前言
很早就应该出这篇了,之前国赛出题耽搁了一下,补坑补坑
这个漏洞相信有点接触的都很清楚要干嘛的,就不解释了,直接开讲
常见的上传文件的校验方法
这个漏洞体系庞大,不知道从何讲起,所以就先根据这些校验的方法将绕过的方法说一说
客户端校验绕过
这个检测是在前端,所以直接抓个包改一下就能绕过上传文件了
服务端绕过
content-type检验
这种检验抓包修改content-type即可
文件幻数检测
在文件内容前加入对应的文件头信息,GIF89a
、‰PNG
之类的
文件加载检测
如果图片是通过渲染的方式进行测试的话,可以将一句话木马放在图片最后,尝试一下能不能执行
后缀名
大小写
有些服务器会忽略大小写,因此可以直接修改后缀名的大小写完成绕过
扩展名
有一些后缀名可能不在黑名单里面,但是也是能被服务器解析的1
2
3
4jsp jspx jspf
asp asa cer aspx
php php3 php4 php5 pht phtml
exe exee
%00截断
如果存在这个漏洞的话,可以上传一个文件名为test.php%00.jpg
,用它绕过漏洞
解析漏洞
这个漏洞主要是web容器在解析文件时出了漏洞,导致其他格式的文本也能当做脚本格式去执行
多后缀
Apache的解析规则是从右往左进行判断,如果后缀名为不可识别的文件,就再向左进行解析
例如假设上传了一个test.php.abc
,服务器不能识别abc
,所以会向左看,解析php
,能解析了,于是将它解析成php
文件
配置漏洞
如果在Apache的conf
文件里有这样一行配置AddHandler php5-script .php
,这时只要文件名里包含.php 即使文件名是 test2.php.jpg 也会以 php 来执行。
同理,如果在Apache的conf
里有这样一行配置AddType application/x-httpd-php .jpg
,即使扩展名是 jpg,一样能以 php 方式执行。
.htaccess
一般来说,配置文件都是全局的,但是Apache还有一种比较简单的配置当前目录和子目录的配置文件,当然想利用的前提是开启了模块的使用1
2AllowOverride All
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so
而ubuntu
配置还需要加多句命令sudo a2enmod rewrite
,然后还要重启服务器
假设我们能上传一个.htaccess
文件并且写入1
2
3<FilesMatch "shell.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
这样子等我们上传shell.jpg
的时候就能将shell.jpg
文件当做php文件执行
例题
这里给一个例题,2018年的巅峰极客有一题BabyWeb,图太久远找不回了,只讲操作好吧
首先扫描端口看到3306是开放的,然后用hudra爆破mysql拿到密码是1q2w3e4r5t6y
,进入数据库后可以得到账号和密码`BabyWeb@my.lol/babyweb@1990,成功登录进去以后就是想办法进行文件上传去getshell了
登录进mysql以后是看到一个
type字段,内容是
{“0”:”png”,”1”:”jpg”,”2”:”gif”},这里就是前端取的限制上传的值,直接改php改不了,但是我们可以绕一下,改成
{“0”:”png”,”1”:”jpg”,”2”:”gif”,”3”:”xxx”,”5”:”htaccess”},这样就能成功上传
.htaccess`文件,且内容为1
2
3<FilesMatch "shell.xxx">
SetHandler application/x-httpd-php
</FilesMatch>
然后再上传shell.xxx
,这样就能成功解析shell.xxx
文件然后getshell