pwn学习笔记之小技巧篇

1.怎么获取environ环境变量地址?

关于environ的解释:http://tacxingxing.com/2017/12/16/environ/
获取:

image.png

在peda下面还可以用vmmap来查看内存的情况
image.png

2.怎么获取libc里的read,write等函数的地址偏移?

复制 linux 下依赖的 libc.so.6 文件到 IDA 里面,其中用 ldd 命令可以查看可执行文件的依赖库。


image.png

在IDA里用 crtl +F 可以快速检索 read,然后点击对应的函数就可以查看没有载入的时候 read函数的地址。


image.png

3.怎么获取libc版本号?

使用工具:LibcSearcher:https://github.com/lieanu/LibcSearcher

4.地址寻找小结

image.png

image.png

image.png

5.success()、format()、next()等函数的使用

  • success()和format()格式化输出


    image.png
  • next()常用寻找字符串“/bin/sh”


    image.png

    image.png

6.recvuntil()获取6字节地址分析

原因是虽然在64位计算机中,一个地址的长度是8字节,但是实际上的计算机内存只有16G内存以下,所以一般的地址空间只是用了不到 2^48 的地址空间。因此实际的操作系统中,一个地址的最高位的两个字节是00,而且实际栈地址一般是0x7fxxxx开头的,因此为了避免获取错误的地址值,只需要获取前面的6字节值,然后通过ljust函数把最高位的两字节填充成00。 我们可以用这种一般的写法:

u64(p.recv(6).ljust(8, "\x00"))

7.使用flat()函数来格式化payload

image.png

可以看到需要事先使用context()函数声明arch,不然的话默认会使用p32来打包
实例:


image.png

image.png

8.使用ROPgadget来寻找gadgets

使用实例:


image.png

你可能感兴趣的:(pwn学习笔记之小技巧篇)