最近发现,做pwn题的时候,有时侯不是不理解思路,而是有些操作没学会,导致你在思考的时候没有思考全面,容易进入卡死的状态。(你所学到的限制了你的想象力)所以在这里记录一些常见的小tip,方便你泄露一些地址
leak方法
libc中泄露stack
libc中有一个叫做 _environ 的全局变量,里面存放着当前进程的环境变量。
从这个图中我们可以看出, _environ存在在libc中,而其中所指向的值,是stack中的。
在IDA分析libc.so中,export符号里会有一个叫environ的符号,可用看它得到相对于libc的偏移
mmap申请的chunk泄露libc
mmap的chunk地址其实也在libc的那个段中,如果我们可用mmap一个chunk并泄露其堆地址,其实相当于泄露了libc地址。
stripped的libc中找main_arena位置
在ida拖入libc后,搜索函数malloc_trim
这个高亮即为main_arena的地址
其中main_arena有几个偏移比较重要,需要记住
在main_arena+112处,是bins数组的起始位置。因为一开始bins里什么都没有,所以指向main_arena+112(空bins都是这个,所以有很多),如果能泄露这个位置的值,就可以泄露libc
在mian_arena+96处,存放的是top_chunk的地址,据此可以推出heap的地址。
攻击思路
heap攻击
首先可以好好看看how2heap里的利用手法。
获得栈地址进而ROP
这个在最新的堆里面是很常见的(2.34)
获得shell后尝试拿到flag
一般情况下cat命令无法使用,重点在于利用其他命令执行sys_open来读取flag