Introduction
ROP Emporium训练1:split的解析。
split32
Step 1
程序正常运行截图:
checksec:32位程序,只开启了DEP保护
Step 2
把程序丢到hopper中看下,发现在pwnme函数中fgets函数存在溢出漏洞:
同时程序中存在system函数,可以执行系统命令:
再找下程序中有没有’/bin/sh’字符串:
可惜,没有找到。不过在hopper中看到一个有趣的字符串“/bin/ls”:
有这个也无法看到flag,那么再去找一下“flag.txt”字符串:
Surprise!!!居然有“/bin/cat flag.txt”字符串。到此思路就清晰了,fgets函数溢出覆盖返回地址跳转到system执行“/bin/cat flag.txt”的命令即可。
Step 3
话不多说,直接上EXP:
1 | * from pwn import * |
代码运行结果:
split
Step 1
程序运行截图:
checksec还是一样的仅开启DEP保护,只是程序变成了64位:
Step 2
将程序丢到hopper中发现解题的逻辑和split32一模一样,fgets函数溢出覆盖返回地址到system函数,执行“/bin/cat flag.txt”命令.
与32位程序不同的有两点:
一是偏移量不同,这点简单明了
二是32位和64位程序传参方式的不同,具体可以参考XMAN level2_x64 の Write-Up
Step 3
比较简单,还是直接给出EXP:
1 | * from pwn import * |
其中rop_addr是通过ROPgadget --binary ./split --only 'pop|ret’
命令找到的:
EXP脚本运行结果图: