黑名单检测
一般情况下,代码文件里会有一个数组或者列表,该数组或者列表里会包含一些非法的字符或者字符串,当数据包中含有符合该列表的字符串时,即认定该数据包是非法的。
如下图,定义了一个数组$deny_ext = array('.asp','.aspx','.php','.jsp');
然后有一个判断语句如果后罪名为数组里面的几个就不允许上传

如何确认是否是黑名单检测
黑名单是有限的,可以随意构造一个文件后缀,如果可以上传,则说明是黑名单检测,反之,为白名单检测。比如上传一个php后缀的文件,发现不允许上传,接下来就是去判断检测方式。
随意构造一个文件后缀,比如将1.php改为1.aaa发现可以上传,说明是基于黑名单检测
绕过技巧
1. 后缀双写绕过
2. 后缀大小写绕过
3. 其它可解析后缀绕过
4. 图片+配置文件绕过
。。。
其它可解析后缀绕过
PHP:
php2、php3、php5、phtml、pht(是否解析需要根据配置文件中设置类型来决定)
ASP:asa、cer、cdx
ASPX:ascx、ashx、asac
JSP:jspx、jspf
Pass-03
方法1:
更改 Apache 的配置项 AddType application/x-httpd-php .php .phtml ,然后上传 .phtml 文件
在实战中是不可以修改的,如果服务器本身就设置了这项那么我们可以利用。这里只是了解一下原理。

一般会将这一项注释掉,我们打开后,可以添加指定后缀,这样服务器就会将指定后缀的文件当做php文件解析

更改后将phpstudy服务重启即可,我们将post.php后缀修改为phtml发现上传成功。接下来就可以利用工具进入服务器

方法2:
抓包,双写 ::$DATA
在window的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名,它的目的就是不检查后缀名
例如:"phpinfo.php::$DATA" Windows会自动去掉末尾的::$DATA变成"phpinfo.php
我们查看源代码可以发现这么一个变量
网站有所防御,会清除::$DATA,防止我们利用::$DATA绕过监测后缀名。
服务器是从第一个字符开始匹配::$DATA,比如第一个从:开始,只有后面完全匹配::$DATA,才会清除,那么我们就可以利用双写::$DATA。那么到底如何双写呢。
1.::$DATA::$DATA,这种写法明显不对,因为第一次开始匹配,发现一个::$DATA清除后,还会继续匹配发现还是::$DATA那么就都会清除掉。
2.::$::$DATADATA,开始匹配,匹配到::$以后下一个应该是字母D但是下一个是:则会认为不是,那么就开始从第二个:同理,知道匹配到中间的::$DATA,会将这个清除掉,然后会接着从下一位开始匹配也就是D开始第一个就匹配失败,那么继续往后,后面都不是从:开始。所以最后就留一下了一个::$DATA。这样就达成了我们的目的

开始抓包
在这里双写,然后放包会发现.php文件上传成功

访问图像链接,将::$data去掉再次访问

可以看到一句话木马上传成功

图片+配置文件绕过
Pass-04
.htaccess 文件(或者“分布式配置文件”),全称是HypertextAccess(超文本入口)。提供了针对目录改变配置的方法。它里面可以存放Apache服务器配置相关的指令。
.htaccess
<FilesMatch "as.png">setHandler application/x-httpd-php</FilesMatch>
通过一个.htaccess 文件调用 php 的解析器去解析一个文件名中只要包含"as.png"这个字符串的任意文件,所以无论文件名是什么样子,只要包含"as.png"这个字符串,都可以被以 php 的方式来解析,一个自定的.htaccess 文件就可以以各种各样的方式去绕过很多上传验证机制。
也可以使用以下方式:
先上传
.htaccess
文件,内容如下
SetHandler application/x-httpd-php(这个万能)
或者
AddType application/x-httpd-php jpg
再上传一句话木马
shell.txt
或者
shell.jpg
文件
解题过程
可以看到这关的源代码添加了更多的黑名单。我们再想通过其他后缀解析php文件就比较困难,那么就用到了.htaccess 文件,先编辑好上传
之所以可以使用
.htacces文件是因为这关源代码中不会随机更改文件名

而第三关会将上传厚的文件随机更改名字这样就会让
.htacces文件失效


上传好
.htaccess 文件后再上传一个.png的文件,直接将一句话木马文件后缀改成这个。
.htaccess 文件的作用是将任何文件当成php文件进行解析

发现上传成功,使用中国蚁剑进行连接也成功了

点和空格绕过
pass-4
由于删除点和首尾去空这些验证只是一次性,所以我们可以进行
点和空格绕过。
bp抓包绕过 这里我们上传post.php文件,然后bp抓包修改为1.php. .这里是点+空格+点。然后放包

可以看到删除点和去空后还剩下一个点,且文件成功被解析

pass-5
查看源代码发现将.htaccess文件也列入黑名单
那么利用点和空格绕过

