作者b0920075 (Void)
看板NetSecurity
标题[闲聊] OneGadgetTest(ogt) gdb plugin
时间Thu Jan 30 15:57:10 2020
今天来自肥一下,小弟我昨天用 python 搞了一个用来快速分辨当前满足哪个 one gadget
条件的 gdb plugin ,不是什麽创新发明只是将步骤用程式自动化执行,帮助使用者偷懒
的小工具,想偷懒的人可以尝试用一下 XD
下面针对几个主题做个小简介:
* One Gadget
* one_gadget
* OneGadgetTest
1. One Gadget
one gadget 这个简便的利用方法起源众说纷纭,北京清华的蓝莲花队长在他的 ppt
<掘金-- CTF 中的内存漏洞利用技巧>[1] 中提到 one gadget 可能是从 PPP 战队的
rickyz 提出,而台湾的 ddaa 则在撰写骇客列传(X CTF 的三十道阴影系列(O 的时候提到
one gadget 起源[2] 时是说出自 Dragon Sector 战队之手 (应该是出自 dragon sector
的一篇 slide[3]
扯远了拉回来,这个技巧原理是因为 libc 这个 shared library 内有些 function 会调
用以下的 syscall:
execve("/bin/sh", argv, envp);
目的是啥我没有细究,总之很方便就对了 XD
因为解谜型式的 ctf pwn 的成功标准就是拿 shell 而已,後续的利用和回复没啥必要,
拿到 shell 看 flag 就可以走人,所以这种射後不理的手法很受欢迎,基本上能控制程式
流程题目差不多就解完了,因为 libc 内不只有一个 one gadget ,要存在一种情况刚好
所有条件不满足的机会太小,就算条件不满足透过一些前置作业也可以修正回来,所以现
今比较难的题目通常会在别的地方刁难玩家 XD
2. one_gadget
比较早期的时代,玩家通常都透过 objdump 或 IDA 之类反组译工具硬干,遇到不同版本
的 libc 又要从找一次,十分痛苦(我自己是没经历过啦 XD
所幸,台湾 HITCON 战队的 david942j 自己开发一套用 ruby 写的工具 one_gadget[4],
一个指令下去马上列出当前的 libc 的所有 one gadget 地址和满足条件,十分简便,关
於 one_gadget project , david942j 大大有在自己的 blog 下分享该工具的相关原理和
实作[5],想了解细节可以去参观一下 XD
根据 ddaa 大大的说法,因为 one_gadget 的出现导致 pwn 题的难度下降不少,不少出题
者开始用 seccomp 限制 execve syscall 提升难度,然後强者 david942j 又开发了
seccomp-tools[6],指令一下去马上列出当前 process 限制的 syscall ,大幅降低开发
exploit 的困扰
相比之下我只能在这些基础上面做些偷懒的工具 QQ
3. OneGadgetTest
先说在前头这个部分难度陡降 XD ,以前做 exploit 想用 one gadget 来 get shell 时
,我都必须用 one_gadget 看当前的 libc 的指令地址和限制,然後根据限制比对哪个地
址可以用或是哪个条件不满足。
虽然切换来切换去只是多几个步骤,但懒人如我总想找点地方来偷懒,於是就抓了工具的
输出然後分析,最後根据每个条件计算看是否符合,直接呈现出来,大概从 3, 4 个步骤
降为 1 个步骤这样 XD
project:
https://github.com/0n3t04ll/OneGadgetTest
这边附上引用和来源,不过因为网址好像大多都过长,所以会被裁切掉,可能要自行拼接
,有更好的方法我再改进
* Reference
[1]
https://paper.seebug.org/papers/Archive/refs/2015-1029-yangkun-Gold-Mining-
CTF.pdf
[2]
https://ithelp.ithome.com.tw/articles/10226977
[3]
https://drive.google.com/file/d/18UpGDvhccnnGWj7Mux7_2BGouIZK_5bK/view
[4]
https://github.com/david942j/one_gadget
[5]
https://david942j.blogspot.com/2017/02/project-one-gadget-in-glibc.html
[6]
https://github.com/david942j/seccomp-tools
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.228.98.19 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/NetSecurity/M.1580371039.A.B89.html
1F:推 splitline: 推个 优文居然都没人推 == 02/15 22:56
2F:→ CMJ0121: 小弟我负责 m 讨论靠各位了~ 02/16 15:11
3F:推 st1009: 先推再说! 02/19 07:57
4F:推 ddaa: 其实 libc 里面是执行 execve("/bin/sh", argv, envp) 04/08 10:57
5F:→ ddaa: 但因为控 rip 是从中间跳进去, 所以会在 argv 和 envp 还没 04/08 10:57
6F:→ ddaa: 被设定好的情况下跑 one gadget, 才变成传 NULL 04/08 10:58
7F:→ b0920075: 喔喔我以为 argp,envp 原本就是要传 NULL ,感谢大大指 04/12 21:00
8F:→ b0920075: 点,等等再修改 04/12 21:00
※ 编辑: b0920075 (36.226.12.156 台湾), 04/13/2020 00:41:11