红帽杯pwn1+Xman level3 wp

穿精又带淫゛_ 提交于 2019-12-03 10:19:07

1  ROP

这两道题的核心思想是ROP,ROP(返回导向编程),通俗的说,就是溢出后使用返回函数跳转到目标。一般来说,ROP应用在不能直接shellcode的情况下(NX开启时shellcode不能写入内存),具体了解ROP见wiki

2  pwn1分析

检查程序:开启NX保护,不能写shellcode;32位linux

看代码:发现一个scanf,输入写在内存,考虑通过scanf控制;发现system函数,可以利用;

编写ROP链:scanf有两个参数和一个返回值,因此ROP结构为【scanf地址】+【return】+【参数】+【参数】,return应该是system,system有一个参数和一个返回值,system结构为【system地址】+【return】+【参数】,我们可以用scanf写入一个“/bin/sh",然后返回system函数,system的参数为”/bin/sh“

tips:scanf有两个参数,我们本应pop pop ret,但如果我们把return直接写成system,我们”惊喜的“发现这上面其实就完美的对应了return+参数。。。

因此,rop结构为:【scanf地址】+【system地址】+【%s地址】+【参数】

搞定!接下来我们看一个特殊的

3  Xman level3 题目描述

libc!libc!这次没有system,你能帮菜鸡解决这个难题么?

附件:https://adworld.xctf.org.cn/media/task/attachments/c42e36c561b844fe91c0d086fbecbf50.gz

4  分析

老规矩,NX保护,32位linux

IDA看代码,找到write和read两个可以溢出的位置

但是,IDA看代码发现这次没有system了。。。。

附件给了一个libc,google搜索,发现libc是linux下C函数库,这里面是从libc中调用system

这就涉及到基地址和真实地址了,感兴趣的网上查吧:总之,真实地址=基地址+偏移地址(偏移地址已知)

通过write函数溢出找到write的真实地址,真实地址-偏移地址=libc基地址,由于各函数偏移地址已知

因此可以求出system的真实地址,后面的过程就和以前一样了。

5  知识点整理

这两道题涉及到了很多知识点,不了解这些知识点可能会很懵逼

核心知识点:

checksec使用

pwntools使用

ROP绕过技术

libc

拓展知识点:

gdb.attach调试

pwn常见的各项保护机制

shellcode

pop|ret是什么意思?

 

至此,本玩家半只脚踏进了pwn的大门(离入门还有很长的路)。

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!