暂时不打算学Pwn,不过这里把一些以前觉得不错的网站记录下来.
Pwn-基础
工具
checksec
检查保护
1 | checksec --file <file> |
pwndbg
https://github.com/pwndbg/pwndbg
OneGadget
david942j/one_gadget: The best tool for finding one gadget RCE in libc.so.6 (github.com)
寻找execve('/bin/sh', NULL, NULL)
1 | one_gadget /lib/x86_64-linux-gnu/libc.so.6 |
LibSearcher
lieanu/LibcSearcher: glibc offset search for ctf. (github.com)
main_arena_offset
1 | ./main_arena /lib/x86_64-linux-gnu/libc.so.6 |
Pwntools
Gallopsled/pwntools: CTF framework and exploit development library (github.com)
安装
Installation — pwntools 4.11.1 documentation
然后还要安装gdb上的pwndbg
1 | git clone https://github.com/pwndbg/pwndbg |
简单使用
PWN从入门到放弃(一):PWNTOOLS_哔哩哔哩_bilibili
1 | p = process("./a.out") |
ret2text
同一个程序内的text段内已经有system("/bin/sh")
了,所以只需要修改控制流就可以触发。
基本 ROP - CTF Wiki (ctf-wiki.org)
ret2shellcode
基本 ROP - CTF Wiki (ctf-wiki.org)
- 存在可执行修改数据段
- 栈溢出从而劫持控制流,同时也能用于修改数据段的数据用于执行shellcode
- 控制流劫持到修改的地方
莫名其妙bss段变成了不可执行段,还是pwn不出来
ret2libc
通过溢出覆盖返回地址,劫持控制流
手把手教你栈溢出从入门到放弃(上) - 知乎 (zhihu.com)
Classic Stack Based Buffer Overflow – sploitF-U-N (wordpress.com)
ret2syscall(ROP)
- 执行一连串的gadget
- 主要是通过函数结尾的一些类似
pop eax
这样的汇编来将栈内的攻击数据拷贝到寄存器上 - ret劫持一连串的控制流
- 最后想办法触发syscall
基本 ROP - CTF Wiki (ctf-wiki.org)
https://zh.wikipedia.org/wiki/%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8
1 | ROPgadget --binary rop --only 'pop|ret' | grep 'eax' |
1 | #!/usr/bin/env python |
注意ROP编程的顺序:
1 | 函数地址,返回地址,参数表 |
Integer Overflow
Integer Overflow – sploitF-U-N (wordpress.com)
1 | //vuln.c |
类型缩小导致的bypass
比如261转换成unsigned char就变成5了,Line 2的条件就能满足
工具
ROPgadget、rp++、ropeme
手把手教你栈溢出从入门到放弃(下) - 知乎 (zhihu.com)
GOT劫持
GOT,PLT之间的关联
手把手教你栈溢出从入门到放弃(下) - 知乎 (zhihu.com)
一种LAZY的思想,不到被调用的时候,就不会去解析GOT表。这也给劫持GOT表函数提供了思路
比如要用同一个库函数中的函数B来替换函数A,A是被调用的那个:
- 确定A的位置:在call的时候会有PLT表,PLT指向了A在GOT表上的位置
- 确定B的位置:通过A与B之间的静态偏移
- 修改数据:利用前面的ROP自行DIY
参考
Homepage One - exploit-exercises.com
2015 – sploitF-U-N (wordpress.com)
如何做到一边使用pwntools一边使用gdb下断点到main函数前_pwntools gdb.debug-CSDN博客
- 本文作者: Taardis
- 本文链接: https://taardisaa.github.io/2023/08/28/Pwn-基础/
- 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!