目录
pass-01 JS绕过
pass-02 content-type绕过
pass-03部分黑名单绕过
pass-04 .htaccess绕过
pass-05 .user.ini绕过+. .绕过(点空格点绕过)
pass-06 大小写绕过
pass-07 空格绕过
pass-08 点绕过
pass-09 ::$DATA绕过
pass-01 JS绕过
上传一个webshell到服务器
上传区要我们选择上传的图片
我们可以试着上传一个图片
可见我们成功上传了
再试着上传一句话木马
<?php phpinfo();?>
被拦住了,该文件不允许上传,说是文件类型不被允许
查看页面源代码,发现文件类型和弹框是由前端JS代码校验的。
查看提示
解决这个问题有两种方法:
1.禁用浏览器js
2.burpsuite抓包
把.jpg改为.php即可,就是改为它允许上传的文件类型
出现了以下页面,即没加载成功的图片,则表示webshell成功上传
复制图片地址查看一下
pass-02 content-type绕过
上传php文件
这次只告诉我们文件类型不正确,但没告诉我们哪类文件类型是正确的
查看源码,发现对['upload_file']['type']的检测
查看提示
什么是MIME?
在HTTP中,MIME类型被定义在Content-Type header中。Content-Type(内容类型)一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些 PHP网页点击的结果却是下载一个文件或一张图片的原因。Content-Type 标头告诉客户端实际返回的内容的内容类型。
使用bp抓包
修改content-type
当文件上传后,content-type会标记文件类型,简单来说当我们上传一个1.php文件的时候,content-type会自动将我们这个文件类型标识为application/octet-stream,不匹配时上传失败,这里仅允许content-type为image/jpeg,image/png,image/gif属性的通过
将content-type标识的application/octet-stream修改为image/jpeg
这样也就可以成功上传了
pass-03部分黑名单绕过
上传php文件
这次提醒我们不允许以下后缀的文件上传
查看源码
查看提示,禁止了一部分后缀文件的上传
抓包
那我们就给一句话改一下后缀,然后上传,进行抓包
先把.php改为.png
可以成功上传
pass-04 .htaccess绕过
上传php文件
这时只提示此文件不允许上传,也没说哪些可以上传
查看源码
查看提示,黑名单拒绝了几乎所有后缀名
这一关在后端使用了黑名单,并过滤了空格,点,以及大小写 , 但未过滤 .htaccess(分布式配置) , 固此关卡使用 分布式配置文件绕过黑名单。
htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
准备一个 .htaccess 文件 , 内容如下:
<FilesMatch "2.jpg(即将上传的文件名)">
SetHandler application/x-httpd-php
</FilesMatch>
这段代码的意思就是把2.jpg当作php文件去执行。
还要准备一个2.jpg的一句话木马,要把后缀名改为jpg。
先上传.htaccess文件
上传成功
再上传2.jpg文件
上传成功
用浏览器访问一下,可以成功访问
pass-05 .user.ini绕过+. .绕过(点空格点绕过)
查看源码
查看提示,上传目录存在php文件
可使用.user.ini绕过黑名单
我们先上传一个.user.ini
文件,内容为auto_prepend_file=5.gif
表示该目录及其子目录下所有的php文件在执行时,自动在头部包含一个5.gif
文件
然后上传一个包含一句话木马的5.gif
文件即可
抓包,改一下后缀
pass-06 大小写绕过
查看源码,发现可以通过大小写绕过
查看提示,这个连上面的.htaccess文件也禁止了
改一下后缀
上传成功
到浏览器访问一下
pass-07 空格绕过
查看源码
在读取源码的过程中,发现并没有写出过滤出首尾空格这一个限制
所以,我们可以在第七关,利用空格绕过限制
抓包
后缀名后面加空格
pass-08 点绕过
查看源码,可以通过点绕过
抓包,改后缀
上传成功
到浏览器访问
pass-09 ::$DATA绕过
查看源码
与前面不一样的是,少了一句话
与前面不同的是,它没有对::$DATA进行过滤,所以我们可以用此来进行绕过,其次是此关在移动文件的时候只移动了文件名,并没有增加后缀名。此关我们就是运用::$DATA的效果来让脚本不检测后缀名
本关没有对后缀名中的::$DATA
进行过滤。在php+windows的情况下:如果文件名+::$DATA
会把::$DATA
之后的数据当成文件流处理,不会检测后缀名且保持::$DATA
之前的文件名。利用windows特性,可在后缀名中加::$DATA
绕过
上传文件,进行抓包
上传成功