文章目录
- Pass-01 前端检测(JS检测)
- 1.1 原理分析
- 1.2 具体问题具体分析
- 1.3 实验
- Pass-02 后端检测(MIME检测)
- 2.1 原理分析
- 2.2 具体问题具体分析
- 2.3 实验
- Pass-03 后端检测(黑名单绕过,特殊后缀名)
- 3.1 原理分析
- 3.2 具体问题具体分析
- 3.3 实验
- Pass-04 后端检测(黑名单绕过,.htaccess)
- 4.1 原理分析
- 4.2 具体问题具体分析
- 4.3 实验
- Pass-05 后端检测(黑名单绕过,大小写绕过)
- 5.1 原理分析
- 5.2 具体问题具体分析
- 5.3 实验
- Pass-06 后端检测(黑名单绕过,空格绕过)
- 6.1 原理分析
- 6.2 具体文体具体分析
- 6.3 实验
- Pass-07 后端检测(黑名单绕过,点绕过)
- 7.1 原理分析
- 7.2 具体文体具体分析
- 7.3 实验
- Pass-08 后端检测(黑名单绕过,::$DATA绕过)
- 8.1 原理分析
- 8.2 具体文体具体分析
- 8.3 实验
- Pass-09 后端检测(黑名单绕过,. .绕过)
- 9.1 原理分析
- 9.2 具体文体具体分析
- 9.3 实验
- Pass-10 后端检测(黑名单绕过,)
- 9.1 原理分析
环境:在kali中使用docker进行搭建。
Pass-01 前端检测(JS检测)
1.1 原理分析
客户端(Client):或称为用户端(前端),与服务器相对应。由于客户端对于文件上传漏洞的防御是通过JS代码实现的,所以客户端检测与绕过也称为JS检测与绕过。
由于后端PHP代码没有对文件做任何检测,所以只要绕过前端JS的校验就可以上传WebShell。绕过方法:
- 删除浏览器事件;
- 禁用JS;
- 利用BurpSuite抓包修改文件后缀名。
1.2 具体问题具体分析
查看源码:

从form表单可以看出他在使用了onsubmit这个函数,触发了鼠标的单击事件,在表单提交后马上调用了checkFile()这个函数对上传的文件进行检查。checkfile()返回值为假,文件将不会上传。

该函数只允许上传的文件类型为.jpg、.png、.gif。
综上分析,这种检测方式属于前端检测(JS检测)。
1.3 实验
这里使用上述三种方法进行JS绕过:
(1)禁用JS

(2)利用burp抓包修改文件后缀


(3)删除浏览器事件
先将源代码全部保存到1.html文件中,然后删除onsubmit事件,以及JS函数。使用action事件,告诉浏览器将表单提交给谁。



使用火狐打开firefox 1.html,然后上传文件即可。


Pass-02 后端检测(MIME检测)
2.1 原理分析
MIME检测原理:
判断$_FILES["upload_file"]["type"]是不是图片格式(image/gif、image/png、image/jpeg),不是则不允许上传。在HTTP 协议中,使用Content-Type 字段表示文件的MIME 类型。 $_FILES["file"]["type"]的值是从请求数据包中Content-Type中获取。
常见的MIME 类型如下:
| 文件拓展名 | Mime-Type |
|---|---|
| .js | application/x-javascript |
| .html | test/html |
| .jpg | image/jpeg |
| .png | image/png |
| application/pdf |
绕过方法:修改数据包中的content-type值就行。
2.2 具体问题具体分析

查看源码,发现检测MIME格式是否为
image/gif、image/jpeg、image/png。抓包修改MIME值即可。
2.3 实验


Pass-03 后端检测(黑名单绕过,特殊后缀名)
3.1 原理分析
(1)黑名单绕过
- 名单列表绕过
有些中间件允许解析其他文件后缀名,如asa、cer之类的或在httpd.conf配置文件中,配置如下代码,则能解析php、php3、phtml文件,所以上传一个后缀名为php3、phptml的文件即可。

默认状态下
.php3,.php4,.php5,.phtml都是会被解析为php
- Windows特性
一些特殊的文件名命名方式在windows下是不被允许的,利用BurpSuite抓包修改后缀名,绕过验证后上传文件,windows会自动去掉后面添加的,但要注意Unix/Linux系统没有这个特性。比如:
- 末尾的点(
.) 如1.php. - 空格(
),如1.php - ::$DATA,如
1.php::$DATA
(2)白名单绕过
白名单绕过需要配合文件包含漏洞或者解析漏洞。
(3).htaccess文件攻击
.htaccess文件是Apache服务器中的分布式配置文件(IIS中不存在该文件),该配置文件会覆盖Apache服务器的全局配置,作用于当前目录及其子目录。
- 如果一个web应用允许上传.htaccess文件,那就意味着攻击者可以更改Apche的配置。
在httpd.conf配置文件中,AllowOverride参数就是指明Apache服务器是否去找**.htacess**文件作为配置文件,如果设置为none,那么服务器将忽略.htacess文件;如果设置为All,那么所有在.htaccess文件里有的指令都将被重写,即允许.htaccess文件覆盖掉Apache 的配置。
(4)Apahce解析机制
Apche解析机制:从右往左开始解析文件后缀,若后缀名不可识别,则继续判断直到遇到可解析的后缀为止。
3.2 具体问题具体分析

可见,属于黑名单验证。

查看源代码,后缀加
.、(空格)、::$DATA、大小写均被拦截。
通过返回的数据包,可知网站中间件为apache,故用特殊可解析后缀进行绕过。

3.3 实验


注意:
- 需要配置apache的后缀解析规则,才能使用特殊后缀名绕过黑名单检测;
- 本靶场搭建在linux上,所以修改
/etc/apache2/mods-available/mime.conf文件(windows下为httpd.conf文件),增加语句AddType application/x-httpd-php .phptml;- 如果用不了vim进行编辑,可以是使用
echo "AddType application/x-httpd-php .phptml" | cat >> mime.conf。
Pass-04 后端检测(黑名单绕过,.htaccess)
4.1 原理分析
.htaccess文件是Apache服务器中的分布式配置文件(IIS中不存在该文件),该配置文件会覆盖Apache服务器的全局配置,作用于当前目录及其子目录。
- 如果一个web应用允许上传.htaccess文件,那就意味着攻击者可以更改Apche的配置。
在httpd.conf配置文件中,AllowOverride参数就是指明Apache服务器是否去找.htaccess文件作为配置文件,如果设置为none,那么服务器将忽略.htacess文件;如果设置为All,那么所有在.htaccess文件里有的指令都将被重写,即允许.htaccess文件覆盖掉Apache 的配置。
4.2 具体问题具体分析

黑名单中并没有限制.htaccess文件的上传,故上传一个.htaccess文件,文件内容如下:
<FileMatch "shell.png">
SetHandler application/x-httpd-php
大致意思就是把shell.png图片文件当作php代码进行解析。
4.3 实验
先上传.htaccess文件,再上传shell.png文件,即可。



注意:
- 需要修改
/etc/apache2/apache2.conf配置文件(windows下为httpd.conf文件),其中的AllowOverride参数设置为All;- 使用cat命令进行写入。
Pass-05 后端检测(黑名单绕过,大小写绕过)
5.1 原理分析
原理:windows对大小写不敏感,linux对大小写敏感。
5.2 具体问题具体分析

可以看出后端没有对大小写进行过滤。
5.3 实验
抓包,修改文件后缀。


本靶场搭建再linux环境下,故phP文件无法被解析为php文件。
Pass-06 后端检测(黑名单绕过,空格绕过)
6.1 原理分析
一些特殊的文件名命名方式在windows下是不被允许的,利用BurpSuite抓包修改后缀名,绕过验证后上传文件,windows会自动去掉后面添加的,但要注意Unix/Linux系统没有这个特性。比如:
- 末尾的点(
.) 如1.php. - 空格(
),如1.php - ::$DATA,如
1.php::$DATA
6.2 具体文体具体分析

可以看出后端没有对空格进行过滤。
6.3 实验


Pass-07 后端检测(黑名单绕过,点绕过)
7.1 原理分析
一些特殊的文件名命名方式在windows下是不被允许的,利用BurpSuite抓包修改后缀名,绕过验证后上传文件,windows会自动去掉后面添加的,但要注意Unix/Linux系统没有这个特性。比如:
- 末尾的点(
.) 如1.php. - 空格(
),如1.php - ::$DATA,如
1.php::$DATA
7.2 具体文体具体分析

可以看出后端没有对点进行过滤。
7.3 实验

Pass-08 后端检测(黑名单绕过,::$DATA绕过)
8.1 原理分析
一些特殊的文件名命名方式在windows下是不被允许的,利用BurpSuite抓包修改后缀名,绕过验证后上传文件,windows会自动去掉后面添加的,但要注意Unix/Linux系统没有这个特性。比如:
- 末尾的点(
.) 如1.php. - 空格(
),如1.php - ::$DATA,如
1.php::$DATA
8.2 具体文体具体分析

可以看出后端没有对::$DATA进行过滤。
8.3 实验

注意,在使用蚁剑进行连接时,不要加上
::$DATA。
Pass-09 后端检测(黑名单绕过,. .绕过)
9.1 原理分析
一些特殊的文件名命名方式在windows下是不被允许的,利用BurpSuite抓包修改后缀名,绕过验证后上传文件,windows会自动去掉后面添加的,但要注意Unix/Linux系统没有这个特性。比如:
- 末尾的点(
.) 如1.php. - 空格(
),如1.php - ::$DATA,如
1.php::$DATA
9.2 具体文体具体分析

deldot()函数从后向前检测,当检测到末尾的第一个点时会继续它的检测,但是遇到空格会停下来。假如文件名为shell.php. .,deldot函数会删除最后一个点,然后将.php. 转换为小写,再去除特殊字符串::$DATA,最后去掉空格,得到.php.绕过检测。
9.3 实验

…待续



















