1.怎么获取environ环境变量地址?
关于environ的解释:http://tacxingxing.com/2017/12/16/environ/
获取:
在peda下面还可以用vmmap来查看内存的情况
2.怎么获取libc里的read,write等函数的地址偏移?
复制 linux 下依赖的 libc.so.6 文件到 IDA 里面,其中用 ldd 命令可以查看可执行文件的依赖库。
在IDA里用 crtl +F 可以快速检索 read,然后点击对应的函数就可以查看没有载入的时候 read函数的地址。
3.怎么获取libc版本号?
使用工具:LibcSearcher:https://github.com/lieanu/LibcSearcher
4.地址寻找小结
5.success()、format()、next()等函数的使用
-
success()和format()格式化输出
-
next()常用寻找字符串“/bin/sh”
6.recvuntil()获取6字节地址分析
原因是虽然在64位计算机中,一个地址的长度是8字节,但是实际上的计算机内存只有16G内存以下,所以一般的地址空间只是用了不到 2^48 的地址空间。因此实际的操作系统中,一个地址的最高位的两个字节是00,而且实际栈地址一般是0x7fxxxx开头的,因此为了避免获取错误的地址值,只需要获取前面的6字节值,然后通过ljust函数把最高位的两字节填充成00。 我们可以用这种一般的写法:
u64(p.recv(6).ljust(8, "\x00"))
7.使用flat()函数来格式化payload
可以看到需要事先使用context()函数声明arch,不然的话默认会使用p32来打包
实例:
8.使用ROPgadget来寻找gadgets
使用实例: