PWN_小tools的使用
GCC 编译常用命令
不带选项 | gcc test.c 将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out。 | |
---|---|---|
-o | 指定生成的输出文件; | gcc test.c -o test 将test.c预处理、汇编、编译并链接形成可执行文件test。-o选项用来指定输出文件的文件名。 |
-E | 仅执行编译预处理; | gcc -E test.c -o test.i 将test.c预处理输出test.i文件。 |
-S | 将C代码转换为汇编代码; | gcc -S test.i 将预处理输出文件test.i汇编成test.s文件。 |
-c | 仅执行编译操作,不进行连接操作。 | gcc -c test.s 将汇编输出文件test.s编译输出test.o文件。 |
-wall | 显示警告信息; | |
**无选项链接** | gcc test.o -o test 将编译输出文件test.o链接成最终可执行文件test。 | |
-O | 使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长 | gcc -O1 test.c -o test |
关掉DEP/NX(堆栈不可执行) | gcc -z execstack -o level level.c | |
关掉Stack Protector/Canary(栈保护) | gcc -fno-stack-protector -o level level.c | |
关掉程序ASLR/PIE(程序随机化保护) | gcc -no-pie level level.c | |
64位linux下面的GCC编译出一个32位可执行程序 | gcc -m32 -z execstack -fno-stack-protector -o level level.c |
GDB常用调试命令
|
|
查壳
upx -d file
objjump
objdump是二进制文件快速查看工具。 常用命令:
1. `objdump -d [file]` 查看文件的所有汇编代码
1. `objdump -f [file]` 查看文件的每个文件的整体头部摘要
####python
python -c “…” | ./file python以命令方式执行并把结果传递给filepython -c “…” | xargs ./file python以命令方式执行并当作命令行参数传递给file,具体的是:“它的作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题。”存在这个命令是因为很多的参数不支持以管道的方式传递。os.system() 创建一个子进程os.putenv(“name”, “value”) 添加一个环境变量
pwntools
[http://brieflyx.me/2015/python-module/pwntools-intro/](http://brieflyx.me/2015/python-module/pwntools-intro/)
[http://brieflyx.me/2015/python-module/pwntools-advanced/](http://brieflyx.me/2015/python-module/pwntools-advanced/)
一般直接用from pwn import * 或者import pwn将所有模块导入到当前命名空间,这条语句还会把os、sys等常用的系统库一并导入。
常用的模块有下面几个: - ==asm==:汇编与反汇编 - ==dynelf==:用于远程符号泄露,需要提供leak方法 - ==elf==:对elf文件进行操作 - ==gdb==:配合gdb进行调试 - ==memleak==:用于内存泄漏 - ==shellcraft==: shellcode的生成器 - ==tubes==:包括tubes: 包括tubes.sock, tubes.process, tubes.ssh, tubes.serialtube,分别适用于不同场景的PIPE - ==utils==:一些实用的小功能,例如CRC计算,cyclic pattern等
pwndbg
arena 堆检查
mp 显示堆
bins,fastbins,unsorted,smallbins,largebins
heap
top_chunk
procinfo 查看当前进程状态
rop
rop --grep "pop rdi" -- --nojop --nosys --depth 2
search
search -s “/bin/sh”
vvmap 虚拟内存映射
telescope 检查内存转储