第三关(黑名单过滤不全,php3、php5绕过)
方法一:我们先进行黑盒测试,先上传一个test.php文件。我们会发现这是一个黑名单过滤,并且我们还发现这个黑名单只过滤了php,但没有过滤php3、php4、php5等,所以我们可以用php3(当然也可以用php4、php5等)绕过,从而上传php文件
方法二:点空格绕过
这里我先解释一下点绕过和空格绕过
我这先创建一个1.txt的文件,然后再创建一个1.txt.的文件
我们发现在创建1.txt.时,我们的系统会自动把.过滤掉,所以我们创建还是1.txt文件
那我们试试上传1.php.文件,看能不能绕过黑名单,从而上传php文件
很明显上传失败了,这是为什么呢?这是因为这里代码会把文件名末尾的点删除掉,所以我们就上传失败了,那如果是..(两个点),还是一样上传失败,这样还是因为代码原因,虽然说是文件名末尾的点,但没说多少个点,所以就上传失败了(当然我理解的是这样,不知道有没有理解错,如果错了,各位朋友评论告诉我一下)
空格绕过也是这样的原理,由于我们系统的原因,创建文件时也会把空格过滤掉,所以我们能不能在这里试试空格绕过,结果显而易见,不行,为什么呢?还是因为代码把后面空格给删除掉了
那我们把空格绕过和点绕过结合起来呢?
因为我们是创建不出一个xx.php. .(点加空格加点)的文件的,所以我们必须使用bp抓包修改数据
我们还真绕过了
那这里为什么又可以绕过呢?我是这样理解的代码先把一个点删掉,然后又把空格去掉,就剩下test.php.文件,代码识别时,识别到test.php.文件的后缀是.(空白的后缀名,就是没有后缀名),并且这个后缀名没有在黑名单中,所以就能绕过,上传文件了(如果我理解错了,大家跟我说一下)
第四关(.htaccess)
方法一:这关还是黑名单绕过上传,但是这里和上面第三关的区别是,这里把php5、php3等都加进了黑名单,所以我们就不能用它们进行绕过了
但我们可以看到,它没有对.htaccess文件进行限制,我们可以使用.htaccess文件进行绕过(这里我就不解释什么是.htaccess文件了,网上有资料)
这里.htaccess有使用前提
我们要修改apache下的httpd.conf文件,使用文件编辑器对httpd.conf进行编辑,把里面的AllowOverride None改为AllowOverride All,并保存
创建一个.htaccess文件(好像用记事本创建的文件不行,可以使用Notepad++创建这个文件),文件内容为:
<FilesMatch "test.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
但我这复现失败,好像是因为php的nts版本无法解析,因为我是在phpstudy上搭建的靶场(如果有人做出来,告诉我一下方法)
这里我说一下接下来的做法,我们先上传.htaccess文件,再上传一个test.jpg(把test.php改为test.jpg)的文件,那么后面上传的test.jpg会被解析成php文件
方法二:我们可以使用第三关的点空格绕过的方法进行绕过,上传文件,这里我就不多说了