gcc常用命令
gcc -o test test.c //-o是指输出的
保护机制
NX:-z execstack / -z noexecstack (关闭 / 开启) 不让执行栈上的数据,于是JMP ESP就不能用了
Canary:-fno-stack-protector /-fstack-protector / -fstack-protector-all (关闭 / 开启 / 全开启) 栈里插入cookie信息
PIE:-no-pie / -pie (关闭 / 开启) 地址随机化,另外打开后会有get_pc_thunk
RELRO:-z norelro / -z lazy / -z now (关闭 / 部分开启 / 完全开启) 对GOT表具有写权限
linux的一些命令
ldd test//list, dynamic, dependencies的缩写,列出动态库依赖关系。
strace ./test//常用来跟踪进程执行时的系统调用和所接收的信号
readelf -S level2 //获取各个段的地址
man ls //查看一些帮助信息
objdump
objdump -R ret2libc3 //寻找先查看__libc_start_main的got表地址
objdump -dj .plt ret2libc1 //plt的各个函数
objdump -f main.o //显示文件头信息
ROPgadget
ROPgadget --binary test --only “pop|ret”
ROPGadget –binary pwn5 | grep “int 0×80”
pwngdb调试堆
b main
c
r
vmmap
heap
bin
p __&malloc_hook
gdb.attach(p) //在exp中进行断点调试
libc的查找利用
Python 3.6.9 (default, Jan 26 2021, 15:33:00)
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from pwn import *
>>> elf = ELF('libc_32.so.6')
[*] '/home/hacker/Desktop/pwnstudy_file/xctf-low/libc_32.so.6'
Arch: i386-32-little
RELRO: Partial RELRO
Stack: Canary found
NX: NX enabled
PIE: PIE enabled
>>> elf.search(b'/bin/sh')
<generator object ELF.search at 0x7f3be1969d00>
>>> next(elf.search(b'/bin/sh')
... next(elf.search(b'/bin/sh'))
File "<stdin>", line 2
next(elf.search(b'/bin/sh'))
^
SyntaxError: invalid syntax
>>> next(elf.search(b'/bin/sh'))
1413163
>>> hex(13163)
'0x336b'
格式化字符串漏洞
%3$x 是打印出第三个格式化字符串