buuctf-pwn axb_2019_fmt32题解(学习过程持续更新)

本人也是在自学过程,主要目的也是记录学习过程,有些地方做的不太好,都是按照自己理解进行讲解的(不专业),欢迎大家指出问题

此处我将文件命名为pwn

checksec pwn查看一下保护机制

可以看到这是一个32-bit的文件,NX保护开启

将文件拖入ida,按F5将汇编代码转换成c语言代码,得到

read(0, &s, 0x100u)可以输入0x100字节的内容s;

sprintf(&format, "Repeater:%s\n", &s) sprintf 把用户输入s拼接到Repeater:后面再加换行存入 format 缓冲区;

printf(&format)存在格式化字符串漏洞

这个题没有system函数,没有/bin/sh,只有printf(&format)格式化字符串漏洞。所以我们考虑用这个漏洞泄露puts@got中存储的puts函数的真实地址,用于获得system函数的真实地址,然后再次利用这个漏洞将printf@got中存储的地址改成system函数的真实地址,最后写入我们的/bin/sh,达到system("/bin/sh")的效果,所以我们三次循环达成目的。

返回虚拟机

gdb pwn动态调试

可以看到我们输入的AAAA,在第七个参数里有一个A,在八个参数里有三个,被分开了,所以我们输入五个A,看一下

所以我们需要先输入一个A,再输入我们的地址(放在了第八个参数)

nano exp.py 开始写攻击脚本

payload:泄露puts@got里存储的puts函数的真实地址,进而得到system函数的真实地址;

payload2:改写printf@got里存储的地址为system函数的真实地址 ;

fmtstr_payload(8,{printf_got:system_addr},write_size='byte',numbwritten=0xa)

  • 8:格式化字符串漏洞偏移,栈上第 8 个参数指向我们可控输入缓冲区
  • {printf_got:system_addr}:要把printf_got地址改写为system_addr
  • write_size='byte':用%hhn按单字节分次写入,适配 32 位
  • numbwritten=0xa:printf 在遇到第一个%前,已经输出了10 字节Repeater:A),工具要基于这个已输出字节数计算%c填充量。

最后发送b";/bin/sh\x00":";" 是 shell 命令分隔符,执行前面无效字符串后直接执行后面的/bin/sh

#在这里我尝试了用LibcSearcher,但是给出的libc没有一个可以打通。根据题目里给出的这是一个Ubuntu 16,猜测我们需要的是Ubuntu16.04 libc‑2.23‑0ubuntu11 i386这个libc库,询问AI,就得到了固定偏移

puts 0x05f140

system 0x03a940

保存退出

python3 exp.py

cat flag

此题完

相关推荐
sunshine22 girl2 小时前
Java学习二 基本语法2, 算术运算符
java·学习
派葛穆3 小时前
Lerobot -飞特舵机ST-3215双舵机联动(ESP_NOW)
c语言
零依赖极客4 小时前
Day 6·1 ARMv8.2 dotprod——vdotq_s32 一条指令做 4 个点积
c语言·开发语言·人工智能·矩阵·arm·vllm
Bruce_Liuxiaowei5 小时前
2026年9月第2周网络安全形势周报
网络·安全·web安全·网络安全·漏洞评级
衡石科技5 小时前
Data_Agent记忆机制与经验复用衡石分析智能体会话记忆与长期学习技术解析
人工智能·科技·学习·算法·企业级bi
传奇开心果编程6 小时前
【Xilem基础语法学与练】第7课:Xilem与Masonry底层构建技术解析
学习·rust·前端框架
hasty6 小时前
Origin 校验不是身份认证:MySQL MCP Server 漏洞给 AI 平台的警告
数据库·mysql·安全
小杨不想秃头6 小时前
《信息安全工程师教程(第2版)》通关笔记
安全
想要入门的程序猿6 小时前
回调函数学习
java·网络·学习
码上上班6 小时前
iptables学习; firewalld学习;ufw学习
学习