学习 pwn 的过程中的一点心得

Posted on Nov 21, 2020

值得注意的东西

与exp的动调

在 exp 中先指定 terminal,即添加一句

context.terminal = ['tmux','splitw','-h']

然后在创建进程变量后,添加

gdb.attach(proc.pidof(sh)[0]) #这里的sh是进程变量

这样调试时先打开tmux,然后就可以动态调试了

加载指定的libc:

io = process(['./bin'],env= {"LD_PRELOAD":"./libc-2.23.so"})

可能很有用的东西

gdb 调试二进制和符号表分开的程序

glibc-all-in-one

高版本 gcc,g++ 编译后的程序 plt IDA 无法识别的问题 一位老学长写的脚本,强!

docker build运行apt-get update失败 docker build 时常常出现 apt 的 Temporary failure resolving 错误,可能是 docker 使用的默认 dns 服务器的问题,用文章中的办法可以解决这个问题。

kernel pwn 中可用的一些结构体。一直只知道 tty_struct,但其实有很多可用的,这篇文章总结的很详细

kernel pwn 中 qemu 的启动参数若没有加 -monitor none,就可以直接用 monitor 和 qemu 交互。

一种利用 tcache statsh unlink 和 fastbin double free 实现控制 tcache next 指针的攻击手段,很有意思,简单来说就是通过 fastbin double free 构造一个环,statsh 的时候就会填满 tcache,然后把环上的一个 chunk 返回,这个 chunk 同时还存在于 tcache 中,这样就实现了 tcache 的 UAF。

通过 __malloc_assert 实现调用 IO 虚表的利用方法——house of kiwi,在 __malloc_hook,__free_hook,exit 等 fsop 方法失效时,该方法可以实现通过虚表劫持程序执行流

hitcon ctf 中碰到了一道用户态内核的题,给了任意文件读写,要求拿个 shell(拿到 shell 之后可以直接 mount host 的文件读 flag),不过其实这道题主要考察的应该还是对 Linux 系统的熟悉程度吧,从 perfect blue 战队公开的 exp 中学到了,可以通过/dev/mem 文件完成 leak 和 rce。该文件是系统的物理内存,root 可读。