在2018年5月,PHP官方宣布停止對(duì)PHP 5.2的維護(hù),但是我們?nèi)匀豢梢栽谝恍┑胤娇吹絇HP 5.2版本在使用。然而,由于該版本存在許多漏洞和安全性問(wèn)題,攻擊者可以利用這些漏洞繞過(guò)安全機(jī)制。
下面詳細(xì)介紹幾種常見的PHP 5.2.17 bypass EXP:
file_get_contents()函數(shù)繞過(guò): $data = $_GET['url']; if (strpos($data, "http://") === 0 || strpos($data, "https://") === 0) { echo file_get_contents($data); }
這段代碼邏輯上看上去是可靠的,但是在PHP 5.2.17中,攻擊者可以通過(guò)一些特殊的輸入來(lái)繞過(guò)安全性檢查。例如,當(dāng)data參數(shù)值為“http://127.0.0.1/phpinfo.php”。這是因?yàn)樵赑HP 5.2.17之前,file_get_contents()函數(shù)不允許從本地文件系統(tǒng)之外讀取文件,但在該版本下,該限制被刪除,攻擊者可以自由訪問(wèn)文件系統(tǒng)和敏感信息。
LD_PRELOAD bypass: $url = $_GET['url']; exec("/usr/bin/wget -O /tmp/1.txt {$url}"); $data = file_get_contents("/tmp/1.txt");
這段代碼檢查了URL是否以“http://”或“https://”開頭,但他仍然面臨被攻擊的風(fēng)險(xiǎn)。攻擊者可以使用LD_PRELOAD來(lái)劫持exec啟動(dòng)的wget程序,以達(dá)到繞過(guò)訪問(wèn)控制的目的。
上述實(shí)例僅是PHP 5.2.17 bypass EXP中的極少數(shù),并非詳盡無(wú)遺,但希望給予開發(fā)人員們一些幫助,了解和充分理解這些漏洞的危害和對(duì)策。同時(shí),也提醒用戶們及時(shí)升級(jí)PHP版本或采取其他措施保護(hù)服務(wù)器的安全。