HacKerQWQ的博客空间

preg_match绕过方法总结

Word count: 156Reading time: 1 min
2020/12/22 Share

preg_match函数

数组绕过

preg_match只能处理字符串,当传入的subject是数组时会返回false

PCRE回溯次数限制

pcre.backtrack_limit给pcre设定了一个回溯次数上限,默认为1000000,如果回溯次数超过这个数字,preg_match会返回false

具体分析:
https://www.codercto.com/a/52693.html
https://www.laruence.com/2010/06/08/1579.html
利用payload:
payload+’a’*1000000

换行符

.不匹配换行符

1
2
3
4
5
if (preg_match('/^.*(flag).*$/', $json)) {
echo 'Hacking attempt detected

';
}

绕过payload:
$json=\nflag
$json=%0aflag

$会忽略结尾的换行符

1
2
3
if (preg_match('/^flag$/', $_GET['a']) && $_GET['a'] !== 'flag') {
echo $flag;
}

payload:
?a=flag%0a

CATALOG
  1. 1. preg_match函数
  2. 2. 数组绕过
  3. 3. PCRE回溯次数限制
  4. 4. 换行符