绕过正则
绕过正则
空格
空格的url编码是%20
在php里边可以用tab的url编码绕过(%09)
例
1 | if(preg_match("/ /",$_GET['str'])) |
此时传空格必会输出no
改为传tab即可绕过
?str=echo%09”yes”;
此外,还有一堆东西可以替代空格
1 | < |
绕过命令执行函数限制
常用的命令执行函数有:
1 | system() |
使用未被过滤的即可
字符转义绕过仅适用于PHP>=7
以八进制表示的[0–7]{1,3}转义字符会自动适配byte(如”\400” == “\000”)
以十六进制的\x[0–9A-Fa-f]{1,2}转义字符表示法(如“\x41”)
以Unicode表示的\u{[0–9A-Fa-f]+}字符,会输出为UTF-8字符串
URL编码协议规定(即 RFC3986 协议):URL 中只允许包含英文字母、数字、以及这 4 个 - _ . ~ 特殊字符和所有的保留字符
命名空间绕过 (php5.3.0以上
直接给案例,绕过固定的字符串匹配规则
1 ?a=\system&b[]=cat%20passwd
绕过文件名和类型检测
检测<?php
替代品:
1
1 <script language="php">eval();</script>
把特定字符替换为空
例:
1 | $deny_ext = array("php","php5","php4","php3","php2","html","htm","phtml","pht","jsp","jspa","jspx","jsw","jsv","jspf","jtml","asp","aspx","asa","asax","ascx","ashx","asmx","cer","swf","htaccess"); |
这种把特定字符替换为空的,构造个连环的条件就行。(灵感来源于xss的绕过)
把文件muma.php命名成muma.phphpp就行
检测特定文件名
例:
1 | if(!preg_match("/flag|system|php/i",$a)){ |
过滤掉flag.txt,那就写*.txt
cat *.php
过滤掉特定命令
思路:找功能类似的命令
如果过滤掉cat 还有sort、tac、more、less、head、tail、nl
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Enderman_1's blog!