专栏首页信安之路ROP Emporium 挑战 WP

ROP Emporium 挑战 WP

ROP Emporium 挑战是用来学习 ROP 技术的一系列挑战,本文就对于其中涉及的所有挑战记录一下 wirte up。

下载地址:

https://ropemporium.com/

虽然说简单,但是后面 badchar 后面的 rop 还是学到了不少东西的~

程序默认开启 nx

CANARY : disabled FORTIFY : disabled NX : ENABLED PIE : disabled RELRO : Partial

如果是 so 就多开了个 PIE

ret2win

直接覆盖返回地址为 win 函数

32 位版

split

这次有个函数执行 /bin/ls

我们看看字符串,刚好有个 /bin/cat flag.txt

exp

split32

callme

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

callme32

32 位,栈上传参而已

write4

这个的话没有 /bin/cat flag.txt 字符串了,那么这就需要我们写到内存了

加入我们想用 fgets 写到内存需要 3 个参数,但是 gadgets 里面没有 pop rdx 的,那么就不能给第三个参数传参,那么我们可以找其他方法,通过汇编的 mov 看看有什么组件

我选择了下面两个,目标地址写到 bss

0x0000000000400820 : mov qword ptr [r14], r15 ; ret 0x0000000000400890 : pop r14 ; pop r15 ; ret

我们先写个 cat flag.txt 试试

我们直接写个 sh 试试,只贴 payload

当然你改成 /bin/sh\x00 也可以

write432

这个也是类似的

badchars

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

那我们就要对 payload 加密,之后运行的时候再解密了

按照官方的提示,是要 xor 加密,之后再用 gadgets 解密

首先可以找下可以用于异或的数字,找 10 以内的

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

我们通过 ROPgadget,找到一些组件,先将我们的 /bin/sh 写到 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

我们就选用这条 mov

0x000000000040084d : pop rdi ; mov qword ptr [r10], r11 ; pop r13 ; pop r12 ; xor byte ptr [r10], r12b ; ret

但找不到 pop r10,r11 啊,返回空

# 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.plt:0000000000602048 off_602048 dq offset foothold_function

由于这个函数没调用,需要调用一次,got 表才会存在真正的地址

最终 exp

pivot32

这个有如下 gadgets

最终 exp

其实栈翻转我们一般用 leave;ret , 上面 64 位有 0x0a,所以用不了

上面的 stack pivot 可以用如下 payload:

本文分享自微信公众号 - 信安之路(xazlsec),作者:giantbranch

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-12-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • PE 病毒与 msf 奇遇记

    通俗的讲,PE 病毒就是感染 PE 文件的病毒,通过修改可执行文件的代码中程序入口地址,变为恶意代码的的入口,导致程序运行时执行恶意代码。

    信安之路
  • 基于 CAN 总线操作汽车仪表盘模拟器实用指南

    最近在外文博客看了相关的系列文章,学习结束后决定翻译整理做一个笔记,整理笔记的过程中曾试图放弃,阅读实践半小时,整理笔记用几天,以后再慢慢培养整理笔记的技能吧。

    信安之路
  • 从面试题中学安全

    根据 Github 上的面经总结的一些安全岗面试的基础知识,这些基础知识不仅要牢记,而且要熟练操作,分享给大家,共勉。

    信安之路
  • pandas(二)

      index=[('a',2010),('b',2011),('c',2010'),('a',2012),('e',2010),('f',2011)]

    py3study
  • 记一个脚本解释器的开发

    最近可以有1个月左右的空闲,可以稍微整理一下这个脚本解释器的开发过程。 一、缘由   2014年左右,我们使用AIR技术,开发了一个3D战争类型的手游。那时候手...

    用户1687945
  • 前端页面布局控件

    是一套同微信原生视觉体验一致的基础样式库,由微信官方设计团队为微信内网页和微信小程序量身设计,令用户的使用感知更加统一。https://weui.io/

    Java架构师历程
  • Python命令行神器 Click 快速上手

    导读:写 Python 的经常要写一些命令行工具,虽然标准库提供有命令行解析工具 Argparse,但是写起来非常麻烦,我很少会使用它。命令行工具中用起来最爽的...

    华章科技
  • SeleniumWebDriver处理复选框CheckBox和单选按钮RadioButton

    使用网页http://demo.guru99.com/test/radio.html作为练习,如下: 使用radio1.click() 切换到Option1单选...

    软测小生
  • SaaS销售:增长引擎 or 增长杀手?

    ? 来源:ToBeSaaS 作者戴珂 ---- 为什么美国SaaS的订阅续费率能接近、甚至超过100%;而中国SaaS续费率却低的可怜?先别急着把这个锅甩给客...

    腾讯SaaS加速器
  • 【BDTC 2017讲师专访】彭冬:微博商业基础大数据平台(D+)的架构演进

    BDTC 2017中国大数据技术大会将于12月7日-9日在北京新云南皇冠假日酒店举行,大会为期三天。届时,近百位技术专家将为现场数千名的大数据行业精英、技术...

    CSDN技术头条

扫码关注云+社区

领取腾讯云代金券