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

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

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

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

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

▶ 漏洞检测

▶ 初始立足点

▶ 权限提升

▶ 横向移动

▶ 报告/分析

▶ 教训/修复

目录

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

[1.1 分析并修改漏洞利用脚本](#1.1 分析并修改漏洞利用脚本)

[1.1.3 脚本语言和编译语言的区别](#1.1.3 脚本语言和编译语言的区别)

[1.1.3.1 二者总体的区别](#1.1.3.1 二者总体的区别)

[1.1.3.2 内存管理方式的不同](#1.1.3.2 内存管理方式的不同)

[1.1.4 分析并修改C语言漏洞利用代码 (42341.c)](#1.1.4 分析并修改C语言漏洞利用代码 (42341.c))

[1.1.4.1 修改目标IP与端口](#1.1.4.1 修改目标IP与端口)

[1.1.4.2 理解缓冲区构造逻辑](#1.1.4.2 理解缓冲区构造逻辑)

[欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论](#欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论)


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

本例以Sync Breeze Enterprise**(这是一个文件管理同步软件)** 为目标,对其漏洞利用分析与修改,并最终利用,漏洞编号:CVE-2017-14980

1.1 分析并修改漏洞利用脚本

我们在kali中查找 Sync Breeze Enterprise 10.0.28 有关的漏洞利用脚本,然后聚焦于两个可用漏洞之一,这将为我们提供适用于目标环境的漏洞利用代码,并展示后续的修改过程。

1.1.3 脚本语言和编译语言的区别

上一节详细分析了py脚本,下一节分析C语言的脚本。在分析之前,简要回顾一下**脚本语言(如Python)和编译语言(如C)**之间的区别。

1.1.3.1 二者总体的区别
对比维度 脚本语言 (Python) 编译语言 (C)
执行方式 解释执行 依赖Python解释器++逐行++翻译执行 编译执行 通过编译器生成独立的机器码可执行文件
可移植性 跨平台性好 需目标系统安装对应Python环境即可 独立性强 生成的可执行文件可直接运行,但需为不同平台分别编译
交付方式 Python脚本文件(.py) .exe等可执行文件
独立运行能力 需预装Python环境,否则无法运行 无需额外运行时环境,可直接执行
文件体积 脚本文件较小 可执行文件相对较大
防病毒检测 通常较低 较高(尤其使用打包工具时)
开发效率 字符串操作直观(如"A"*780),自动内存管理 需手动内存管理,字符串操作需用函数(strcat等)
控制精度 对内存布局、寄存器等底层控制有限 可直接操作内存地址、指针、寄存器,适合精细漏洞利用
适用场景 快速PoC、概念验证、自动化脚本 独立攻击载荷、需要精确内存操作的利用(如ROP链)
典型打包工具 PyInstaller(打包为exe) GCC、MinGW(编译器)

综上,

  • 执行方式

    • Python (脚本) :需要解释器,不能在没有Python的环境中独立运行。

    • C (编译) :直接编译成独立可执行文件,可在目标系统上直接运行。

  • 开发与控制

    • Python开发简单快速 。自动管理内存,字符串操作直观,但底层控制力弱

    • C开发复杂易错 。必须手动管理内存和指针,但能实现精准的底层控制,适合编写精细的漏洞利用。

如何选择?

  • Python 进行快速原型验证、编写测试脚本

  • C 制作独立的攻击载荷、或需要精确内存操作的利用程序

两者结合是常态:用Python构建攻击框架,用C编写核心的Shellcode


1.1.3.2 内存管理方式的不同

Python 中,自动内存管理 。你可以直接写 "A"*780 + "\x83\x0c\x09\x10",解释器会自动为你分配和管理所需的内存。比如:

而在 C 语言中,手动内存管理。 字符串本质上是字符数组,必须手动分配和操作内存,无法直接"相加"。常见的连接方式有:

  • 使用函数 :如 strcat(dest, src) 或更安全的 strncat

  • 手动复制 :用 memcpy 或循环将字节逐个复制到预先分配好的缓冲区中。

常用的C语言字符串连接方法

① strcat() 函数 - 基础连接

objectivec 复制代码
#include <string.h>

char buffer[100] = "Hello, ";
char name[] = "World!";
strcat(buffer, name);  // 结果: "Hello, World!"

⚠️ 风险 :不检查目标缓冲区大小,可能导致缓冲区溢出

② strncat() 函数 - 相对安全的连接

objectivec 复制代码
char buffer[20] = "Hello";
char addition[] = ", World!";
strncat(buffer, addition, sizeof(buffer)-strlen(buffer)-1);

优点:可限制最大复制字符数,避免溢出。

③ 手动操作字符数组

objectivec 复制代码
char buffer[100] = "前缀";
char *ptr = buffer + strlen(buffer);  // 定位到字符串末尾
memcpy(ptr, "要添加的内容", 15);      // 直接复制内存
ptr[15] = '\0';                       // 手动添加结束符

对比示例:

操作需求 Python实现 C语言实现
简单连接 result = str1 + str2 strcat(dest, src)
连接多个字符串 result = s1 + s2 + s3 多次调用strcat或使用sprintf
创建重复字符 "A" * 780 memset(buffer, 'A', 780)
构造漏洞利用载荷 offset + JMP_ESP + nops + shellcode 分别使用memcpy或循环填充各部分

1.1.4 分析并修改C语言漏洞利用代码 (42341.c)

使用 searchsploit -m 命令将漏洞利用复制到本地工作目录后,可检查其内容。

编译环境识别

打开代码阅读,看到包含 winsock2.h 等头文件,表明这段代码专为Windows平台编译而设计的 。意思是:++这个代码正常是在windows平台下直接编译成exe文件利用的。++

跨平台编译选项

虽然可在Windows环境直接编译,也可通过 Kali Linux 使用交叉编译器(minw-w64)进行编译,使其能在目标环境中运行。编译的动作是在修改c代码完成后进行,现在先继续阅读这个c语言代码。


1.1.4.1 修改目标IP与端口

问题 :C代码中使用了硬编码的IP地址和端口,必须调整为实际目标信息。

方法

  • 定位代码中的连接配置部分

  • 将固定值替换为目标环境的实际IP地址和端口号

把以下的C语言代码:

修改为:目标IP和端口。


1.1.4.2 理解缓冲区构造逻辑

接下来,仔细检查核心部分:

代码片段 功能说明 类比比喻
int initial_buffer_size = 780; 定义缓冲区大小为780字节 确定信封的大小
char *padding = malloc(initial_buffer_size); 动态分配780字节内存,并将返回的指针存储在padding中。此时,padding 指向的是一块动态分配的内存区域。 领取一个空信封
memset(padding, 0x41, initial_buffer_size); 使用 memset 将 padding 指向的内存区域的前 780 字节全部填充为 0x41。0x41 是ASCII码中的字符 'A',所以这行代码是将这块内存区域填充为字母 'A'。 在信封里塞满白纸 (填充物)
memset(padding + initial_buffer_size - 1, 0x00, 1); 将最后一个字节设为空终止符。 再调用一次 memset, padding + initial_buffer_size - 1 意思: 从 padding 指针开始,向后移动 (initial_buffer_size - 1) 字节,最终指向缓冲区的最后一个字节(779字节)。将该字节设置为 0x00,即 'A' 被替换为null 字符,以确保它是一个合法的C字符串, 通常用于字符串结束标志。变成如下: 在信封封口处盖章(标记结束)

**问题:**原来的返回地址失效,要寻找适合本例的返回地址。

原始代码

objectivec 复制代码
unsigned char retn[] = "\xcb\x75\x52\x73";  // msvbvm60.dll中的返回地址

问题分析

  • 注释说明返回地址指向msvbvm60.dll(Visual Basic 6.0运行库)

  • 但目标Windows系统可能缺少此DLL文件

  • 因为缺失此DLL文件,因此将导致跳转地址无效,漏洞利用失败

msvbvm60.dll

这是Microsoft Visual Basic 6.0的虚拟机文件。它是一个动态链接库(DLL),用于支持运行使用Visual Basic 6.0开发的程序和应用程序,是Visual Basic 6.0程序运行所依赖的核心文件。

****但是:****在我们的Windows目标上检查调试器中加载的模块时,注意到这个DLL文件是缺失的,这意味着返回地址对我们的目标无效。(当然,如有没有缺失,该返回地址可用。)

  • 注意!如果没有启用 ASLR(地址随机化): 同一个 DLL 文件在不同的 Windows 系统上加载时,它的加载基址会相同 ,因此 jmp 指令的跳转目标地址是一样的。这就解释了为什么要寻找一个合适的返回地址的根本原因。

比喻理解

这就像制作一把万能钥匙 ,但钥匙的齿形设计 基于特定品牌的锁芯。如果目标门上安装的是不同品牌的锁,这把钥匙就完全无效。


由于篇幅有限,对该利用代码要修改返回地址、自定义shellcode等内容见下一篇文章。

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

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

相关推荐
大方子4 小时前
【PolarCTF】rce1
网络安全·polarctf
枷锁—sha6 小时前
Burp Suite 抓包全流程与 Xray 联动自动挖洞指南
网络·安全·网络安全
聚铭网络7 小时前
聚铭网络再度入选2026年度扬州市网络和数据安全服务资源池单位
网络安全
darkb1rd9 小时前
八、PHP SAPI与运行环境差异
开发语言·网络安全·php·webshell
世界尽头与你13 小时前
(修复方案)基础目录枚举漏洞
安全·网络安全·渗透测试
枷锁—sha1 天前
【SRC】SQL注入快速判定与应对策略(一)
网络·数据库·sql·安全·网络安全·系统安全
成茂峰1 天前
软考高级·系统架构设计师 | 四、信息技术安全知识
安全·信息安全·系统架构·架构设计师
liann1191 天前
3.1_网络——基础
网络·安全·web安全·http·网络安全
ESBK20252 天前
第四届移动互联网、云计算与信息安全国际会议(MICCIS 2026)二轮征稿启动,诚邀全球学者共赴学术盛宴
大数据·网络·物联网·网络安全·云计算·密码学·信息与通信
旺仔Sec2 天前
一文带你看懂免费开源 WAF 天花板!雷池 (SafeLine) 部署与实战全解析
web安全·网络安全·开源·waf