Reverse
exeinfo:查位数、查壳
脱壳:upx
IDA:查找字符串/变量名、反编译成c
根据反编译的c代码写逆向脚本(……
Java class逆向得源码:jd-gui
Pwn
checksec:如果栈可执行可能有栈溢出
pwngdb:生成payload;
栈溢出
可能导致栈溢出的函数:gets/strcpy/read
利用方式:
- 将栈溢出所在栈的ret值覆盖为危险函数所在的栈底
- 覆盖条件语句,跳过判断
- 覆盖指定变量值,绕过判断
pwngdb调试程序确认栈溢出所需偏移值(rsp-rbp)
ida确认目标函数/变量/指令的地址
编写exp,发送payload:填充值*偏移值+p64(危险函数地址)
(可能有时候偏移量需要+1?
工具
Exeinfo PE
查壳!会显示是32位还是64位;是否有壳;甚至还有脱壳建议!
UPX脱壳工具
1 | upx.exe -d [file_path] |
IDA
啥都能反编译,Windows-exe,Linux-elf,macos,apk
shift+F12 查看string信息 (通常可以看到重要的信息 )
Alt + T 查找带有目标字符串的函数
Ctrl + F5 导出 C代码
Ctrl + F 在函数框中 搜索函数
X 定位函数-> F5 查看当前函数的c代码
空格键 流程图与代码 来回切换.
pwntools 2
Ubuntu18.04+python2
pwntools — pwntools 3.12.0dev 文档 (pwntools-docs-zh.readthedocs.io)
1 | p32/p64:将16进制的数字转为\x字符格式(小端序) |
checksec
checksec检测文件的保护机制
RELRO:RELRO会有Partial RELRO和FULL RELRO,如果开启FULL RELRO,意味着我们无法修改got表和plt表
Stack:如果栈中开启Canary found,那么就不能用直接用溢出的方法覆盖栈中返回地址,而且要通过改写指针与局部变量、leak canary、overwrite canary的方法来绕过
NX:NX enabled如果这个保护开启就是意味着栈中数据没有执行权限,以前的经常用的call esp或者jmp esp的方法就不能使用,但是可以利用rop这种方法绕过
PIE:PIE enabled如果程序开启这个地址随机化(ASLR)选项就意味着程序每次运行的时候地址都会变化,而如果没有开PIE的话那么No PIE (0x400000),括号内的数据就是程序的基地址
FORTIFY:FORTIFY_SOURCE机制对格式化字符串有两个限制 (1)包含%n的格式化字符串不能位于程序内存中的可写地址。 (2)当使用位置参数时,必须使用范围内的所有参数。所以如果要使用%7$x,你必须同时使用1,2,3,4,5和6。
gdb-peta
常用命令
1 | gdb [file] |