saforum是国内安全研究人员修改过的saforum论坛,但是代码中有一点瑕疵导致可能被获取管理员权限:) \include\common.php 行41~49引入没有过滤的变量 ------cut----------------- if(getenv('HTTP_CLIENT_IP')) { $onlineip = getenv('HTTP_CLIENT_IP'); } elseif(getenv('HTTP_X_FORWARDED_FOR')) { $onlineip = getenv('HTTP_X_FORWARDED_FOR'); } elseif(getenv('REMOTE_ADDR')) { $onlineip = getenv('REMOTE_ADDR'); } else { $onlineip = $HTTP_SERVER_VARS['REMOTE_ADDR']; }//$onlineip没有做任何过滤 -------cut----------------- 然后: \include\global.php 行65~80,updatesession函数将变量注射入session库 -------cut----------------- function updatesession() { if(empty($GLOBALS['sessionupdated'])) { global $db, $sessionexists, $sessionupdated, $sid, $onlineip, $ipbanned, $status, $discuz_user, $timestamp, $groupid, $styleid, $discuz_action, $fid, $tid, $onlinehold, $table_sessions, $table_members; $sessionupdated = 1; if($sessionexists == 1) { $db->query("UPDATE $table_sessions SET status='$status', lastactivity='$timestamp', groupid='$groupid', username='$discuz_user',...
saforum是国内安全研究人员修改过的saforum论坛,但是代码中有一点瑕疵导致可能被获取管理员权限:) \include\common.php 行41~49引入没有过滤的变量 ------cut----------------- if(getenv('HTTP_CLIENT_IP')) { $onlineip = getenv('HTTP_CLIENT_IP'); } elseif(getenv('HTTP_X_FORWARDED_FOR')) { $onlineip = getenv('HTTP_X_FORWARDED_FOR'); } elseif(getenv('REMOTE_ADDR')) { $onlineip = getenv('REMOTE_ADDR'); } else { $onlineip = $HTTP_SERVER_VARS['REMOTE_ADDR']; }//$onlineip没有做任何过滤 -------cut----------------- 然后: \include\global.php 行65~80,updatesession函数将变量注射入session库 -------cut----------------- function updatesession() { if(empty($GLOBALS['sessionupdated'])) { global $db, $sessionexists, $sessionupdated, $sid, $onlineip, $ipbanned, $status, $discuz_user, $timestamp, $groupid, $styleid, $discuz_action, $fid, $tid, $onlinehold, $table_sessions, $table_members; $sessionupdated = 1; if($sessionexists == 1) { $db->query("UPDATE $table_sessions SET status='$status', lastactivity='$timestamp', groupid='$groupid', username='$discuz_user', styleid='$styleid', action='$discuz_action', fid='$fid', tid='$tid' WHERE sid='$sid'"); } else { $db->unbuffered_query("DELETE FROM $table_sessions WHERE sid='$sid' OR lastactivity<'".($timestamp - $onlinehold)."' OR (ip='$onlineip' AND lastactivity>'".($timestamp - 60)."') OR ('$discuz_user'<>'' AND username='$discuz_user')"); $db->query("INSERT INTO $table_sessions (sid, ip, ipbanned, status, username, lastactivity, groupid, styleid, action, fid, tid) VALUES ('$sid', '$onlineip', '$ipbanned', '$status', '$discuz_user', '$timestamp', '$groupid', '$styleid', '$discuz_action', '$fid', '$tid')"); //通过伪造$onlineip变量,可以注射一个任意身份的会员到seesion库 if($discuz_user) { $db->unbuffered_query("UPDATE $table_members SET lastvisit=$timestamp+$onlinehold WHERE username='$discuz_user'"); } } } -------cut----------------- 最后 index.php 80行 调用了updatesession()函数 saforum 过滤相关参数