ROP Emporium 挑战 WP

ROP Emporium 挑战是用来学习 ROP 技术的一系列挑战,本文就对于其中涉及的所有挑战记录一下 wirte up。下载地址:https://ropemporium.com/虽然说简单,但是后面 badchar 后面的 rop 还是学到了不少东西的~程序默认开启 nxCANARY : disabledFORTIFY : disabledNX : ENABLEDPIE : disabledRELRO : Partial如果是 so 就多开了个 PIEret2win直接覆盖返回地址为 win 函数

32 位版

split这次有个函数执行我们看看字符串,刚好有个

exp

split32

callme就是依次调用 callmeone,two,three,参数是 1,2,3 就行

callme3232 位,栈上传参而已

write4这个的话没有字符串了,那么这就需要我们写到内存了加入我们想用 fgets 写到内存需要 3 个参数,但是 gadgets 里面没有的,那么就不能给第三个参数传参,那么我们可以找其他方法,通过汇编的 mov 看看有什么组件我选择了下面两个,目标地址写到 bss0x0000000000400820 : mov qword ptr [r14], r15 ; ret我们先写个试试

我们直接写个 sh 试试,只贴 payload当然你改成也可以

write432这个也是类似的

badchars一开始一看这么简单,badchars 是这几个,但是有个 b 和 s,我们就不能了

那我们就要对 payload 加密,之后运行的时候再解密了按照官方的提示,是要 xor 加密,之后再用 gadgets 解密首先可以找下可以用于异或的数字,找 10 以内的

运行结果,那我们选个3吧,有时候传不过去的话可能这个 ascii 代表传输结束什么的,

我们通过 ROPgadget,找到一些组件,先将我们的写到 bss,再去解密,再执行

badchars32这个也用 xor 吧,这次我们异或 0xff

fluff来到这的时候已经没有了 mov 指令了,但下面的吸引了我mov dword ptr [rdx], ebx ; pop r13 ; pop r12 ; xor byte ptr [r10], r12b ; ret再找一下给 rdx 赋值的,但我们没法操作 rdx 啊再找找,找不到啊看下别人的 wp,原来还有个 --depth 的参数ROPgadget --binary ./fluff --depth 20我们就选用这条 mov0x000000000040084d : pop rdi ; mov qword ptr [r10], r11 ; pop r13 ; pop r12 ; xor byte ptr [r10], r12b ; ret但找不到啊,返回空#ROPgadget --binary ./fluff --depth 20 grep "pop r10"#ROPgadget --binary ./fluff --depth 20 grep "pop r11"直接找看看 r11 相关的

最后两个不就可以通过 r12 赋值给 r11 吗,在查下 r12,有 pop 可以0x0000000000400832 : pop r12 ; mov r13d, 0x604060 ; ret而且上面有个交换 r11,r10 的,不也可以给 r10 赋值了吗而且看了下程序,原理作者都写到一块去了

最终 payload

fluff32有了上一题的经验,直接找到作者内嵌汇编写的组件

最终代码

pivot一上来我就看这了

这个使用了 so 文件,ret2win 在这个 so 文件里面实现,但是这个 so 是开启了 PIE 的

查看 pwnme 函数,首先给了 256 大小的给你存放 pivot,之后再溢出

所以我们需要先"泄露"地址咯,由于栈溢出的缓冲区大小比较少,完成泄露 + 执行完全不够用,所以要跳到 a1 去 ROP,这技术叫 stack pivot,栈翻转,就是让 esp 指向别处,在那 rop信息泄露的话,这里只有 foothold_function 是 so 里面的,而且存在 got 表,泄露完计算偏移就好由于这个函数没调用,需要调用一次,got 表才会存在真正的地址最终 exp

pivot32这个有如下 gadgets

最终 exp

其实栈翻转我们一般用, 上面 64 位有 0x0a,所以用不了上面的 stack pivot 可以用如下 payload:

总结

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171222G0GM5H00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券