文件上传
漏洞简介
文件上传,顾名思义就是上传文件的功能行为,之所以会被发展为危害严重的漏洞,是程序没有对访客提交的数据进行检验或者过滤不严,可以直接提交修改过的数据绕过扩展名的检验。文件上传漏洞是漏洞中最为简单猖獗的利用形式,一般只要能上传获取地址,可执行文件被解析就可以获取系统WebShell。
漏洞原理
网站WEB应用都有一些文件上传功能,比如文档、图片、头像、视频上传,当上传功能的实现代码没有严格校验上传文件的后缀和文件类型时,就可以上传任意文件甚至是可执行文件后门。
漏洞危害
恶意文件传递给解释器去执行,之后就可以在服务器上执行恶意代码,进行数据库执行、服务器文件管理,服务器命令执行等恶意操作。根据网站使用及可解析的程序脚本不同,可以上传的恶意脚本可以是PHP、ASP、JSP、ASPX文件。
文件上传检测方式
- 客户端javascript检测(检测文件扩展名)
- 服务端MIME类型检测(检测content-type 内容
- 服务端目录路径检查(检测跟path参数相关的内容
- 服务端文件扩展名检测(检测跟文件extension相关的内容
- 服务端文件内容检测(检测是否合法是否含有恶意代码
Webshell介绍
Webshell就是以asp、php、jsp或者CGI等网页文件形式存在的一种命令执行环境,也可以将其称为一种网页后门。入侵者通常会将这些asp或php后门文件与网站web服务器目录下正常的网页文件混在一起,然后使用浏览器来访问这些后门。
常用一句话木马
1 | <?php |
文件上传的绕过脑图
1)JS检测绕过
前端代码;
1.修改前端代码
2.抓个正常的包 修改
2)服务端检测
通常三个方向:MIME,文件内容,文件后缀。
MIME绕过:修改Content-Type字段
文件后缀名绕过:一般是黑名单,或者直接白名单。
1 | 黑名单策略:以.php为例 |
3)绕过文件内容检测
1.通过上传文件内容开始处的文件幻数来判断。
一般通过判断前10个字节,基本就能判断出一个文件的真是类型
绕过jpg文件
1 | Value = FF D8 FF E0 00 10 4A 46 49 46 |
绕过gif文件幻数
1 | Value = 47 49 46 38 39 61 |
绕过png
1 | Value = 89 50 4E 47 |
2.文件加载检测
一般是调用API或函数对文件进行加载测试。常见的是图像渲染测试,甚至二次渲染。
图像处理软件对一张图片进行代码注入
原理是:在不破坏文件本身的渲染情况下找一个空白区进行填充代码,一般是图片的注释区
二次渲染的攻击方式-攻击文件加载器本身
溢出攻击对文件加载器进行攻击
4)解析漏洞
Apache解析漏洞
形式:test.php.qwe.asd 任意不属于Apache解析黑名单且也不属于白名单的名称
原理:Apache解析文件的规则是从右往左开始判断解析,如果后缀名为不可识别文件解析,就往左判断。
条件:apache通过mod_php来运行脚本,其2.4.0-2.4.29中存在apache换行解析漏洞,在解析php时xxx.php\x0A将被安装PHP后缀进行解析,导致绕过一些服务器的安全策略
www.xxx.com/test.php.qwe.asd
以moudel方式连接,配置文件httpd.conf中LoadMoudle rewrite_module
modules/mod_rewrite.so前的注释去掉,寻找关键词:AllowOveride,并把后面的参数从None全部改成All。
Ngnix解析漏洞
形式:任意文件名/任意文件名.php
一个在任意文件名后面加/任意文件名.php的解析漏洞
原理:Ngnix《0.8.37默认是以CGI的方式支持php解析的,普遍的做法是在Ngnix通过正则匹配设置SCRIPT_FILENAME。当访问www.xx.com/phpinfo.jpg/1.php这个URL时,$fastcgi_script_name会被设置为phpinfo.jpg1.php,然后构造成SCRIPT_FILENAME传递给PHP CGI,但是PHP如果开启fix_pathinfo这个选项。就会将SCRIPY_FILENAME是phpinfo.jpg,而1.php是PATH_INFO,所以就会将phpinfo.jpg作为php文件来解析
1 | 漏洞形式: |
IIS 6.0解析漏洞
1.目录解析
形式:www.xxx.com/xx.asp/xx.jpg
原理:服务器默认会吧.asp目录下的文件都解析成asp文件
2.文件解析
形式:www.xxx.com/xx.asp;.jpg
原理:服务器默认不解析;后面的内容
1 | 默认的可执行文件除了asp还包含 |
IIS7.0/7.5解析漏洞
形式:任意文件名/任意文件名.php
原理:对任意文件只要在URL后面追加上字符串/任意文件名.php就会按照php的方式去解析
文件上传漏洞防御
1.文件上传的目录设置为不可执行
2.判断文件类型
3.使用随机数该写文件名和文件路径
4.单独设置文件服务器的域名
[!NOTE]
svg文件
pdf文件
上传存储型xss