打開網頁
顯然是代碼審計了,分析代碼
當沒有用GET方法傳入flag時,會顯示Click here的鏈接。
點擊鏈接會用GET方法傳入一串字符串$exam,后面是當前時間的一串sha1哈希值。
判斷傳入的flag長度與$exam是否相同,不同則顯示 長度不允許
第二個判斷過濾了一大堆
第三個判斷傳入flag的值等於flag值的哈希值,正確就輸出flag。用的是嚴格的三個等號的比較,我們flag都不知道,哈希值更不可能知道了,==
但容易發現此處存在任意代碼執行漏洞,
eval($_GET['flag'])
嘗試繞過過濾
echo被過濾了,用php短標簽進行輸出
flag被過濾了,用先賦其他值,再修改的方法繞過
當php開啟短標簽后,
能正常解析類似於這樣形式的php文件: phpinfo() ?>
並且可以使用<?=$a?>的形式輸出
$exam字符串長度為49
為了使payload長度與$exam長度相等,在代碼間加入無意義的語句。
構造payload:$a=blag;$a{0}=f;111111111111111111111;?><?=$$a;?>
成功得到flag