[求助]一道ctf pwn题的思路

lzldhu 2016-10-5 11:46 1650
网上搜索了linux pwn的教程,感觉入不了门。。
看了一道之前一道ctf的pwn题目,readelf看出来是一个64位静态链接的elf执行文件,checksec只开了NX。

但是网上针对NX的一般都说是leak 动态库,构造system("/bin/sh")什么的。但是看到又是静态链接又没符号的完全不知道怎么办了?望大侠们稍微指点一些这类情况的思路和学习方法了。
上传的附件:
最新回复 (15)
1
fneig 2016-10-5 23:57
2
只开了nx?那试试ret lib或rop。
lzldhu 2016-10-6 16:11
3
但是这个应该是个纯静态的elf(file了一下 貌似有statically linked和stripped),又没有符号的话,怎么构造system("\bin\sh")的rop链呢?望再指点一下
lzldhu 2016-10-8 07:25
4
貌似需要 针对特定的libc 弄sig文件。。就strings出glibc-ld.so.cache1.1。貌似都对应不到glibc的库版本。
2
Keoyo 2016-10-8 08:09
5
静态elf文件主要是用来分析漏洞的,楼上说的ret2libc其实就是system("/bin/sh"),system地址需要libc版本,一般CTF官方都会给的,实在不行就暴力跑一下,有libc版本就能算出system相对基址偏移,然后在题目中leak出libc基址加上偏移就是system地址了
lzldhu 2016-10-8 09:27
6
因为libc是被静态链接在程序内,符号又被剔除了,所以看了网上得确定glibc的版本但是官方的程序里找不太到相关的信息了,就在程序字符串看到glibc-ld.so.cache1.1,再去查查看能不能对应起来。谢谢解答,我再去研究试试。
dwfault 2016-10-8 13:07
7
可以用工具来快速ROP,例如ROPgadget
lzldhu 2016-10-8 13:17
8
使用了已经生成了gadget文件,但是现在的难点就是确定不了system库函数静态编译在程序的地址是多少。。得再想想办法
dwfault 2016-10-10 15:48
9
没能生成INT 80的gadget么?执行系统调用呗,不一定非得找system函数吧。。
lzldhu 2016-10-10 17:03
10
因为那个ctf题是socat把本地漏洞程序转发出来的,需要反弹出Shell拿flag,我只知道system可以。。系统调用 是不是要进内核了?因为主要是执行些shell命令
letitbezh 2016-10-10 23:45
11
学一下pwntools会好点,需要用rop链泄露多个函数信息,之后可以找一个查库的类型的网站,看可不可以查到,之后就自己算了。
dwfault 2016-10-13 09:23
12
ctf pwn题大部分都是socat把本地漏洞程序转发出来的,需要反弹出Shell拿flag。。。

调用system属于ret2libc,只是拿shell的一种方法,这道题静态编译的话显然不适合用ret2libc。

尝试构造如下的rop,11号系统调用,execve(/bin/sh),不需要进内核:
XOR EAX,EAX      
PUSH EAX      
PUSH 68732F6E            hs/n      
PUSH 69622F2F            ib//         //bin/sh     
MOV EBX,ESP     
PUSH EAX      
XCHG CL,AH     
MOV AL,0B          EAX:系统调用号 EBX:Filename ECX:Flag EDX:Mode     
INT 80
lzldhu 2016-10-13 10:17
13
嗷嗷明白了,基本我可以搞定了。麻烦想问问linux下的pwn该怎么入门?有什么学习资料吗
dwfault 2016-10-14 09:54
14
看蒸米的博客里面有Linux rop系列,很详细,然后做几道题就可以了
lzldhu 2016-10-14 10:08
15
好的,谢谢指点
3
Ox9A82 2016-10-23 21:39
16
静态链接直接jmp magic system就可以了
返回