PHP是一種流行的服務(wù)器端語言,目前最新版本為7.3.13。然而,在2012年5月3日,PHP 5.4.3發(fā)布時(shí),發(fā)現(xiàn)了一個(gè)嚴(yán)重的安全漏洞,該漏洞影響了PHP 5.3.x和5.4.x,被稱為CVE-2012-1823漏洞。
該漏洞允許攻擊者在不知道密碼的情況下訪問服務(wù)器上的PHP文件,包括配置文件和數(shù)據(jù)庫密碼等重要文件。攻擊者可以通過在URL中注入特定的代碼來繞過訪問控制,例如將以下代碼添加到URL中:
?page=/etc/passwd
這會(huì)使服務(wù)器讀取/etc/passwd文件并將其顯示在網(wǎng)頁上。因此,攻擊者可以輕松地獲取服務(wù)器上的任何敏感數(shù)據(jù)。
為了解決這個(gè)問題,PHP團(tuán)隊(duì)在發(fā)布之后立即發(fā)布了一個(gè)補(bǔ)丁程序。建議所有PHP 5.4.3或以前的用戶立即更新到PHP 5.4.4或更高版本。另外,PHP 5.3.x用戶應(yīng)該升級(jí)到PHP 5.3.14或更高版本。
以下是一些示例代碼,演示了如何利用CVE-2012-1823漏洞:
<?php if(isset($_GET['page'])) { include('pages/'.$_GET['page'].'.php'); } ?> <a href="?page=/etc/passwd">點(diǎn)擊查看/etc/passwd上面的代碼段允許用戶通過URL參數(shù)?page訪問指定的PHP文件,例如pages/about.php。攻擊者可以注入?page參數(shù)以訪問敏感文件,如/etc/passwd。
<?php function check_login() { if(isset($_SESSION['logged_in'])) { return true; } else { return false; } } if(check_login()) { include('admin_panel.php'); } else { include('login.php'); } ?> <a href="?page=admin_panel">管理面板上述代碼會(huì)檢查用戶是否已經(jīng)登錄,如果用戶已經(jīng)登錄,則會(huì)包含admin_panel.php文件。攻擊者可以注入?page參數(shù)以繞過登錄檢查并訪問管理員面板。 本漏洞的主要原因是在PHP中,如果在URL中傳遞了一個(gè)未定義的常量,它將被解釋為該常量的字符串名稱。這使得攻擊者能夠注入任意字符串并訪問文件系統(tǒng)。 為了防止此漏洞,開發(fā)人員應(yīng)該確保在從URL中讀取參數(shù)之前對(duì)其進(jìn)行過濾和驗(yàn)證。例如,可以使用PHP的filter_input函數(shù)進(jìn)行參數(shù)過濾。 總之,CVE-2012-1823漏洞是一個(gè)嚴(yán)重的安全漏洞,可以讓攻擊者輕松地訪問服務(wù)器上的敏感文件和數(shù)據(jù)。為了保護(hù)服務(wù)器和用戶,建議PHP用戶盡快更新到最新版本,并對(duì)從URL中讀取的參數(shù)進(jìn)行過濾和驗(yàn)證。