❽⁄₄ ⟦ 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等内容见下一篇文章。

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

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

相关推荐
安全渗透Hacker14 小时前
新一代特征扫描器afrog与经典引擎Xray深度解析
网络·安全·web安全·网络安全·自动化·系统安全·安全性测试
玥轩_52116 小时前
防火墙技术-综合应用实验-2
网络·网络安全·智能路由器·防火墙·交换机·三层交换
vortex516 小时前
常用PowerShell渗透框架及工具介绍【后渗透】
网络安全·kali
Whoami!16 小时前
❾⁄₈ ⟦ OSCP ⬖ 研记 ⟧ 防病毒软件规避 ➱ 本地进程内存注入实践(下)
网络安全·信息安全·防病毒软件·注入进程
黄乔国PHP|JAVA|安全2 天前
网络安全开源靶场Vulfocus靶场搭建指南[2026最新版本]
安全·web安全·网络安全·开源·网络安全靶场·vulfocus靶场
ShoreKiten2 天前
ctfshow-web164
网络安全·web
ShoreKiten2 天前
ctfshow-web163
网络安全·web·rfi
汉堡包0012 天前
【网安基础】--Spring/Spring Boot RCE 解析与 Shiro 反序列化漏洞的关联(包括简易加密方式梳理)
学习·安全·spring·信息安全
汤愈韬2 天前
FW旁挂实验
网络协议·网络安全·security·huawei
盛满暮色 风止何安2 天前
负载均衡的部署模式
运维·服务器·网络·网络安全·负载均衡