驼娑 发表于 2025-6-11 14:25:48

文件上传漏洞

文件上传漏洞

文件上传漏洞是Web应用程序中常见的一种安全漏洞,它允许攻击者上传可以执行的文件到服务器上,从而可能控制整个服务器

以下是文件上传漏洞的基本原理:

[*]正常的文件上传功能:

[*]在很多Web应用中,如论坛、博客、在线编辑器等,都需要提供文件上传功能,允许用户上传图片、文档等文件

[*]文件上传漏洞的产生:

[*]当Web应用没有正确处理用户上传的文件时,就可能产生安全漏洞。以下是几个常见的漏洞点:

[*]缺乏有效的文件类型检查:应用没有检查或错误地检查了上传文件的MIME类型或文件扩展名
[*]不正确的文件名处理:应用在保存上传文件时没有正确处理文件名,可能允许攻击者通过在文件名中插入恶意代码来改变文件类型
[*]文件内容未检查:即使限制了文件类型,攻击者也可能上传含有恶意代码的文件,如图片中嵌入的Webshell
[*]目录遍历:攻击者可能利用目录遍历漏洞,将文件上传到Web目录之外的位置,例如服务器的系统目录
[*]不安全的文件存储:文件存储在服务器上时,如果权限设置不当,攻击者可能通过上传的文件获得对服务器其他部分的访问权限


[*]利用文件上传漏洞:

[*]攻击者通过上传一个可以执行的脚本文件(如PHP、ASP、JSP脚本)到服务器上
[*]如果服务器配置不当,允许执行上传的脚本文件,攻击者就可以通过该脚本执行任意命令,控制服务器
[*]攻击者可能会上传Webshell(一种网页形式的Shell),通过浏览器来执行系统命令

一句话木马
可执行脚本的文件后缀名,可被网站目录解析。以下是常见的后缀名
asp
asa
cdx
cer
php
aspx
ashx
jsp
php3
php.a
shtml
phtml
有些网站会对 asp 或者 php 进行过滤转成空可用这些后缀名。
aspasp asaspp
phpphp一句话木马可以让服务器执行入侵者指定的命令
php的一句话木马: <?php @eval($_POST['pass']);?>
asp的一句话是:   <%eval request ("pass")%>
aspx的一句话是:<%@ Page Language="Jscript"%> <%eval(Request.Item["pass"],"unsafe");%>木马文件的上传及绕过

绕过前端JS检测上传

​                文件上传时,用户选择文件时,或者提交时,有些网站会对前端文件名进行验证,一般检测后缀名,是否为上传的格式。如果上传的格式不对,则弹出提示文字。此时数据包并没有提交到服务器,只是在客户端通过 js 文件进行校验,验证不通过则不会提交到服务器进行处理
绕过JS检测方法


[*]按 F12 使用网页审计元素,把校验的上传文件后缀名文件删除,即可上传
[*]把恶意文件改成 js 允许上传的文件后缀,如 jpg、gif、png 等,再通过抓包工具抓取 post 的数据包,把后缀名改成可执行的脚本后缀如php 、asp、jsp、net 等,即可绕过上传
绕过contnet-type检测上传

​                有些上传模块,会对 http 的类型头进行检测,如果是图片类型,允许上传文件到服务器,否则返回上传失败。因为服务端是通过content-type 判断类型,content-type 在客户端可被修改。则此文件上传也有可能被绕过的风险
黑名单绕过上传

​                上传模块,有时候会写成黑名单限制,在上传文件的时获取后缀名,再把后缀名与程序中黑名单进行检测,如果后缀名在黑名单的列表内,文件将禁止文件上传
​                上传图片时,如果提示不允许 php、asp 这种信息提示,可判断为黑名单限制,上传黑名单以外的后缀名即可。 在 iis 里 asp 禁止上传了,可以上传 asa cer cdx 这些后缀,如在网站里允许.net执行 可以上传 ashx 代替 aspx。如果网站可以 执行这些脚本,通过上传后门即可获取 webshell。 在不同的中间件中有特殊的情况,如果在apache可以开启application/x-httpd-php, 在 AddType application/x-httpd-php .php .php3 .phtml后缀名为.phtml、.php3均被解析成php,有的apache版本默认开启。 上传目标中间件可支持的环境的语言脚本即可,如.phtml、php3
.htaccess重写解析绕过上传

上传模块,黑名单过滤了所有的能执行的后缀名,如果允许上传.htaccess。htaccess文件的作用是可以帮我们实现包括文件夹密码保护、用户自动重定向、自定义错误页面、改变你的文件扩展名、封禁特定 IP 地址的用户、只允许特定 IP 地址的用户、禁止目录列表,以及使用其他文件作为index文件等一些功能。在.htaccess里写入<FilesMatch "jpg">
SetHandler application/x-httpd-php
</FilesMatch>,则可以文件重写成php文件。 要 htaccess 的规则生效,则需要在apache开启rewrite 重写模块,因为apache是多数都开启这个模块,所以规则一般都生效
上传攻击
上传.htaccess到网站里,.htaccess 内容是
<FilesMatch "jpg">
SetHandler application/x-httpd-php
</FilesMatch>再上传恶意的jpg到.htaccess相同目录里,访问图片即可获取执行脚本,当图片上传成功之后,即使格式是jpg的,也一样会被当成php脚本执行
大小写绕过上传

有的上传模块后缀名采用黑名单判断,但是没有对后缀名的大小写进行严格判断,导致可以更改后缀大小写可以被绕过
.user.ini绕过

自 PHP 5.3.0 起,PHP 支持基于每个目录的 .htaccess 风格的 INI 文件。此类文件仅被 CGI/FastCGI SAPI 处理。此功能使得 PECL 的 htscanner 扩展作废。如果使用 Apache,则用 .htaccess 文件有同样效果
.user.ini原理
.user.ini中两个中的配置就是_auto_prepend_file_和_auto_append_file_。这两个配置的意思就是:我们指定一个文件(如1.jpg),那么该文件就会被包含在要执行的php文件中(如index.php),相当于在index.php中插入一句:require(./1.jpg)。这两个设置的区别只是在于auto_prepend_file是在文件前插入,auto_append_file在文件最后插入。
利用.user.ini的前提是服务器开启了CGI或者FastCGI,并且上传文件的存储路径下有index.php可执行文件
利用.user.ini的环境
​                有时候我们进行文件上传的时候,站点不仅在前端做了白名单处理,还在后端做了黑名单处理以及文件类型的检验且服务器没有配置"AddType application/x-httpd-php .php .phtml",这时我们就不能通过简单的绕过前端验证修改数据包的 Content-Type 并将文件后缀改为 phtml 以此来利用文件上传漏洞
​                这时我们就需要利用.user.ini进行配合,使得我们上传的图片格式的webshell也能够被解析,以此成功利用漏洞拿到shell权限
auto_append_file=demo.jpg该文件意思是无论访问当前目录下哪个 PHP 文件都会自动去包含 demo.jpg 这个文件
空格绕过上传

在上传模块里,采用黑名单上传,如果没有对空格进行去掉可能被绕过
利用 windows 系统特征绕过

在 windows 中文件后缀名的点“.”,系统会自动忽略。所以shell.php.和shell.php的效果一样。可以在文件名后面加上.绕过
NTFS 交换数据流::$DATA 绕过上传

如果后缀名没有对::$DATA 进行判断,利用 windows 系统 NTFS 特征可以绕过上传。 在window的时候如果文件名+::$DATA会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名,他的目的就是不检查后缀名
例如:phpinfo.php::$DATAWindows会自动去掉末尾的::$DATA变成phpinfo.php
利用 windows 环境的叠加特征绕过

在Windows操作系统中,文件系统有一定的规则来处理文件名。当一个文件以特定的方式命名时,比如 phpinfo.php:.jpg,Windows可能会截断或忽略文件名中某些特殊字符后面的部分。这是因为 : 在Windows中是一个用于表示卷标或驱动器的特殊字符,而在文件名中通常不被允许。当你尝试上传一个名为 phpinfo.php:.jpg 的文件时,Windows可能会将文件名截断为 phpinfo.php,因为 : 后面的部分被视为对文件系统的指令,而不是文件名的一部分。这样,就会在目录下创建一个名为 phpinfo.php 的空白文件
Windows的文件系统中,以下符号在正则匹配时可能被视为相等:
<ul>双引号 " 等于 点号 .
大于符号 > 等于 问号 ?
小于符号
页: [1]
查看完整版本: 文件上传漏洞