1.题目信息
2.原理
篡改栈帧上的返回地址为攻击者手动传入的shellcode所在缓冲区地址,并且该区域有执行权限。
3.解题步骤
3.1 首先使用checksec工具查看它开了啥保护措施
基本全关,栈可执行。
root@pwn_test1604:/ctf/work/9# checksec ./level1
[*] '/ctf/work/9/level1'
Arch: i386-32-little
RELRO: Partial RELRO
Stack: No canary found
NX: NX disabled
PIE: No PIE (0x8048000)
RWX: Has RWX segments
root@pwn_test1604:/ctf/work/9#
3.2 使用ida查看一下该程序
在危险函数中,程序向我们输出了一个栈站上的地址因此我们可以朝buf写一段shellcode,然后 将返回地址覆盖为buf的地址。在pwntools中可以使用shellcraft.sh()写shellcode,再使用asm将其转换成机器码。
ida帮我们计算出来了buf字符串距离rbp有0x88个字节,由于ebp本身还占4个字节,所以溢出0x8c个字节后将返回地址修改为buf地址,python有 个自带的方法ljust可以将我们的shellcode长度补充为固定字节,期作用是使shellcode左对齐,然后不足长度补齐指定数据。
参数buf存在明显的溢出漏洞,程序还将buf参数的地址给了我们
由于没有开启nx,所以我们可以先通过read读入shellcode,然后利用溢出漏洞将ret覆盖为buf参数地址(此时buf里是shellcode)去执行即可获取shell
但是在测试的时候发现,远程连接不会一开