任意文件上传漏洞syr
任意文件上传漏洞
先来几个一句话木马看看
<%execute(request("value"))%> #asp木马
<?php eval($_POST["value"]);?> #php木马
<%@ Page Language="Jscript"%> <%eval(Request.Item["value"])%> #aspx木马
<?php echo file_get_contents('/path/to/target/file'); ?> #读取服务器中的敏感文件
<?php echo system($_GET['command']); ?> #利用command参数执行系统命令
已爆出的文件上传漏洞:
jQuery Upload File <= 4.0.2 中的任意文件上传 在根目录下/jquery-upload-file
漏洞原理
web应用程序没有对可上传的文件类型,文件内容等作严格过滤,或者web服务器的解析漏洞没有及时修复,导致攻击者可上传恶意的脚本文件,获得执行服务端命令的能力。
漏洞利用
1.如果没有对上传的文件名进行严格验证,或者对上传的文件进行重命名,攻击者就可以上传同名文件,对原有文件进行覆盖。
2.未验证上传文件的大小,攻击者可以上传巨大的文件,占用可利用磁盘空间。
3.上传一句话木马,利用蚁箭等工具进行远程连接,从而控制服务器。
检测机制
客户端js验证:这种不可靠,可以用来提示用户可上传的文件类型,攻击者可以直接通过抓包工具进行绕过。
MIME类型检测:通过检测MIME类型,判断用户上传的文件是否合法,但是攻击者可以抓包修改Content-Type:字段来绕过。
文件后缀检测:检测文件的后缀名,如果不是合法的后缀,禁止上传,最好用白名单进行过滤可上传的文件后缀。如果是黑名单检测,就有很多绕过方式:00截断;大小写绕过 ;双写绕过,如果后端验证时,直接将检测到的不合法后缀去掉,我们就可以双写来绕过;.htaccess文件上传,首先上传一个.htaccess文件,让服务器可以解析我们上传的指定文件名,之后将我们的木马文件名设置为.htaccess中指定的文件名,上传以后,就可以在服务端执行。
文件内容检测:服务端检测文件的内容,通常会检查文件头,可以构造图片码绕过。
绕过方式
黑名单绕过
1. 00截断:
抓包我们上传的文件,将请求包中的文件名修改为test.php%00.jpg,在许多语言的函数中,字符串处理函数中会将0x00识别为终止符,会将00后的.jpg去掉,导致攻击者上传成功木马文件。
如果文件名是get方式传输的,直接在文件名中加%00,如果是post方式提交数据的,需要在16进制中加00 ,因为post中直接加%00不会被自动url解码。
2. 黑名单过滤不全:
上传.php3、.php5、index.html、等文件,这种情况发生在,如果黑名单对可执行的文件过滤不全的情况下,可以上传。
3. 特殊文件名绕过:
在文件的后缀名后加点或者空格,Windows系统会自动将最后面的点或者空格去掉,导致上传成功,但是Linux系统这种方法不行。
test.asp. test.asp(空格) test.php:1.jpg test.php::$DATA shell.php::$DATA……
或者将后缀名进行换行绕过
test.ph
p
4. 大小写、双写绕过、url编码绕过:
将文件名中的点、斜杠、反斜杠url编码或者二次url编码,如果验证文件扩展名时没有进行url解码,但是在服务器端进行url解码了,我们就可以绕过限制。例如上传 test%2Ephp
5. .htaccess文件攻击:
只在apache服务中,存在该文件。这种方法可以绕过白名单检测。
<FilesMatch "aa"> SetHandler application/x-httpd-php </FilesMatch>
我们首先上传一个.htaccess文件,文件中指定任意的文件名当做代码文件来解析,之后上传指定文件名的文件,就可以执行文件中的代码。
白名单绕过
1.htaccess文件攻击
2. 00截断
3. 寻找其他测试的上传文件接口:
如果可上传的文件是白名单验证的,我们就可以找一些其他的上传接口,通常一些测试接口是没有做限制的,可上传任意文件。
MIME类型检测绕过
通过指定MIME类型,让浏览器遇到该扩展名的文件时,知道使用指定的应用程序来打开该文件。
如果上传时提示文件类型不正确,我们可以抓包修改Content-Type字段值,修改为对应的值,就可以上传木马文件。
服务器解析漏洞
1. Apache解析漏洞:apache 2.0-2.2版本可能存在该漏洞。
Apache解析文件的顺序是从右往左进行的,如果后面不存在能够解析的后缀,默认会向前解析,直至遇到能够解析的后缀。
文件名设置为 test.php.abo.ddd.eee,当我们成功上传这个文件后,访问它,服务器就会把它当做php文件来执行。
2.IIS 6.0解析漏洞
(1). 目录解析:
3. nginx解析漏洞
当url中有不存在的文件时,php默认向前解析,并且是以不存在的文件后缀去解析前一个文件的。
我们访问www.213.com/test.jpg/1.php ,当不存在1.php时,会向前解析,解析test.php。
文件内容检测绕过
把代码文件和图片合成二进制文件,保存为新的图片,但是上传时,还要上传为.php的后缀,才能够被解析。
Windows系统中,打开cmd命令框,输入:
copy /b 1.png+test.php = 2.png
或者利用ExifTool工具来制做图片码
exiftool -Comment="<?php echo 'START ' . file_get_contents('/home/carlos/secret') . ' END'; ?>" <YOUR-INPUT-IMAGE>.jpg -o polyglot.php
PUT方法写入文件
某些web服务器配置支持PUT方法来提交数据。如果没有防御措施,那么攻击者就可以利用PUT方法来向服务器写入恶意文件。
PUT /images/exploit.php HTTP/1.1 Host: vulnerable-website.com Content-Type: application/x-httpd-php Content-Length: 49 <?php echo file_get_contents('/path/to/file'); ?>
防御方法
1.上传文件的存储目录,不给执行权限。(但是也要防止将源代码回显到前端页面,这样会造成信息泄露)也要防止攻击者通过目录遍历../ 将恶意文件上传到上一级目录,有可能上一级目录有执行权限。
2. 上传的文件进行重命名。
3. 对可上传的文件类型进行白名单校验,只允许上传可靠的文件类型。
4.及时更新web应用软件,防止解析漏洞的发生。
5.不能存在本地文件包含漏洞:如果存在本地文件包含漏洞,攻击者就可以上传任意的文件,再结合本地文件包含漏洞,去执行上传的文件。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」