代碼審計-ereg正則%00截斷


<?php
$flag = "xxx";
if (isset ($_GET['password']))
{
if (ereg ("^[a-zA-Z0-9]+$", $_GET['password']) === FALSE)
{
echo 'You password must be alphanumeric ';
}
else if (strlen($_GET['password']) < 8 && $_GET['password'] > 9999999)
{
if (strpos ($_GET['password'], '-') !== FALSE) //strpos — 查找字符串首次出現的位置
{
    die('Flag: ' . $flag);
}
else
{
    echo('- have not been found');
}
}
else
{
    echo 'Invalid password';
}
}
?>

ereg()函數用指定的模式搜索一個字符串中指定的字符串,如果匹配成功返回true,否則,則返回false。搜索字母的字符是大小寫敏感的

用正則匹配,如果有^[a-zA-Z0-9]+$則直接錯誤,我們可以用%00來截斷,在%00之后的數值函數無法識別

同時滿足   strlen($_GET['password']) < 8 && $_GET['password'] > 9999999

長度跟數值本來就矛盾,我們可以用1e8 即1x10的八次方或者用數組繞過

payload

http://123.206.87.240:9009/5.php?password=1e8%00-

返回值的結果沒有flag

不知道是不是題目出錯了還是故意的

最終的payload

http://123.206.87.240:9009/5.php?password=1e8%00*-*
http://123.206.87.240:9009/5.php?password[]=*-*%00

 

 

Flag: flag{bugku-dm-sj-a12JH8}

 


免責聲明!

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



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