Upload靶场11到17关。
Pass-11:
这一关黑名单验证考的是双写绕过,因为查看源代码可以发现其中有一句如下图:
str_ireplace()函数会把$deny_ext中的内容替换为空。那么想要绕过替换就可以用bp抓包,并修改文件后缀为.pphphp,这里系统会从前往后检测,当检测到php时就会替换为空,于是就剩下了.php。具体操作如下:
上传一个shell2.php文件并用bp抓包,shell2.php文件内容如下:
修改包的内容如下:
放包,右键点击图片,选择新标签页打开图像如下:
可以看到shell2.php的内容已经被解析,如下图:
Pass-12:
查看源码可以看出是一个白名单绕过,只允许上传jpg、png、gif结尾的文件,如下图:
根据提示可以猜到这一关可以通过%00截断来绕过检查。(GET型提交的内容会被自动进行url解码)
原理:在url中%00表示ascii码中的0,而ascii中的0作为特殊字符保留,表示字符串结束,所以当url中出现%00时就会认为读取已结束。
补充1:GET请求会对我们输入的内容进行自动编码,也就是说当我们输入%00时,就相当于输入了ASCII中的0,它是一个表示字符串结束的保留字符。
补充2:url编码就是%加上一个字符ASCII码的十六进制,比如:字符“a”的ASCII码是97,97的十六进制是61,所以字符“a”的url编码就是%61。
但是php5.3之后的版本就已经修复了这个漏洞,所以需要更改PHP的版本为5.3之前,如下图: