1. 程式人生 > 其它 >bugku strpos陣列繞過

bugku strpos陣列繞過

技術標籤:程式碼審計

strpos陣列繞過

<?php
$flag = "flag";
if (isset ($_GET['ctf'])) {
if (@ereg ("^[1-9]+$", $_GET['ctf']) === FALSE)
echo '必須輸入數字才行';
else if (strpos ($_GET['ctf'], '#biubiubiu') !== FALSE)
die('Flag: '.$flag);
else
echo '騷年,繼續努力吧啊~';
}
?>
  • strpos ()
    查詢 “php” 在字串中第一次出現的位置:在這裡插入圖片描述

解答:

1.必須輸入數字才行
2.else if (strpos ($_GET['ctf'], '#biubiubiu') !== FALSE)
get方式得ctf,且ctf中必包含#biubiubiu
3.ereg()只能處理字串,遇到陣列做引數返回NULL,判斷用的是 === ,其要求值與型別都要相同,而NULL跟FALSE型別是不同的,所以滿足null!=false。
4.strpos()遇到陣列,也返回NULL,與FALSE型別不同,if條件成立

綜上所述,利用陣列繞過構造payload:?ctf[]=1