文件上传详细版

发布于:2025-05-01 ⋅ 阅读:(42) ⋅ 点赞:(0)

文件上传造成因素:

文件路径过滤不严格,可能通过遍历目录来获得文件,也可能通过文件上传对重要文件案进行覆盖,还可能对文件拓展名和文件类型过滤不严格,可以上传任意文件到web公开目录上,进而远程控制服务器

绕过

这篇文章判断漏洞类型的图片很言简意赅一文解读文件上传漏洞 - 2xixi3 - 博客园

前端-js绕过

原理:

我理解的前端一般就是过滤文件拓展名,如果不符合过滤条件就会拦截在前端(上传后F12网络就看不到数据流),所以目的是先过去再解析

这是上传png之类的有文件流

这是其他类型文件根本上传不到后端

参考【文件上传绕过】——前端检测_前端js验证漏洞_实验四:文件上传漏洞【实验名称】文件上传漏洞【实验目的】绕过javascript验证检-CSDN博客

方法:

(1)直接网页禁用js

(2)bp抓包放包,把jpg图片码上传抓包改为.php

常见的也就这两种方法

后端

检查后缀

黑名单

可能会限制.php/.asp,随便上传文后缀件名例如.stp,可以就是黑名单

(1)上传可解析特殊后缀

(2)上传.htaccess文件,其实就是改变目录配置,在目标目录上上传一个命令文件作用于该目录及其所有子目录,【前提看web站点架构为:php+apache , 保证文件上传到本地 , apache开对.htaccess支持;(bp抓包看请求头来判断)】

<FilesMatch "evil.gif">
SetHandler application/x-httpd-php   #在当前目录下,如果匹配到evil.gif文件,则被解析成PHP代码执行
AddHandler php5-script .gif          #在当前目录下,如果匹配到evil.gif文件,则被解析成PHP代码执行
</FilesMatch>

(3) 后缀大小写绕过

(4)点绕过:随便输后缀名不行就是白名单1.php.(Windows 系统下,文件后缀名最后一个点会被自动去除,Linux 系统下不会)

(5)空格绕过(Windows系统下,对于文件名中空格【demo.php(空格)】会被作为空处理,程序中的检测代码却不能自动删除空格,从而绕过黑名单。)

(6)::$DATA:   a.php::$DATA(在windows下,无法直接测试::$DATA,因为windows不允许后缀名中存在特殊字符;因为windows会将 a.php::$DATA认为NTFS文件的一个数据流而不是文件,因此会被当成非法文件名)

(7)配合解析漏洞

Apache:

一般解析:后缀名无法识别就像上解析(从右到左)eg:a.php.a.s会解析成a.php

换行解析:在2.4.0~2.4.29版本里有一个解析漏洞,如果在文件名后面加一个换行符x0A服务器依旧会把文件当成php解析,但是可以绕过黑名单(注意:不能是\x0D\x0A,只能是一个\x0A)

IIS:

上传文件抓包在server Microsoft里的版本是IIS/6.0,三个方法,一个创建.asp目录,在目录上上传1.php木马文件,会当作asp解析;一个图片第三个,直接改名;另一个是.asp;.jpg会被当作.asp解析(省略分号后面的部分)  至于怎末创建.asp目录,bp抓包上传请求

    POST /upload.php HTTP/1.1
    ...
    Content-Disposition: form-data; name="file"; filename="shell.jpg"
    Content-Disposition: form-data; name="path"; filename="image.asp"  // 尝试创建目录

   

至于怎末上传文件到指定目录

Content-Disposition: form-data; name="path"; filename="image.asp"  // 指定目录

也可以用穿越目录(没过滤../的情况下)

Content-Disposition: form-data; name="file"; filename="../image.asp/shell.jpg"

IIS/7.0

制作图片码,打开图片,访问图片路径并且在后加上 /.php

Nginx:

解析漏洞:Server是nginx/1.17.8上传 图片码,在访问路径下加上.php

换行解析:nginx因为00截断错误地解析了请求的 URI ,将获取到用户请求的文件名解析为对应的脚本程序,导致出现权限绕过、代码执行等连带影响(版本Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7)上传图片码抓包,服务器通常有以下配置

location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    include fastcgi_params;
}

参考资料:“文件上传”配合中间件“解析漏洞”_中间件解析漏洞配合文件上传-CSDN博客

 白名单

反之白名单

(1)MIME绕过(HTTP请求头中的Content-Type属性绕过,eg:Content-Type: text/html

(1)(2)(3)补充知识看:文件上传漏洞总结(含原因+防御措施)+白名单+黑名单+内容、头+解析漏洞/修补方案_00截断修复方案-CSDN博客

(2)%00截断:%00被服务器解码为0x00发挥了截断作用

(3)0x00截断:利用ASCII码为0这个特殊字符,让系统认为字符串已经结束


网站公告

今日签到

点亮在社区的每一天
去签到