漏洞一 
  
  涉及版本: 
  Myarticle 0.02以下 
  
  描述: 
  由于后臺(tái)管理入口驗(yàn)證代碼存在嚴(yán)重缺陷。導(dǎo)致任何用戶可以只在用戶名里輸入任何字符可以進(jìn)入后臺(tái)。 
  
  詳細(xì): 
  在admin/admin_global.inc.php文件里的151行的代碼是這樣寫(xiě)的: 
  
  引用 or 代碼: 
  function verifyUser($name, $pwd) { 
  global $DB_site,$table_user; 
  $usrpwd = $DB_site->query_first("select password FROM $table_user where username = '$name'"); 
  return $pwd==md5($usrpwd); 
  } 
  
  
  看出問(wèn)題了吧?因?yàn)檩斎氲氖且粋€(gè)沒(méi)有的用戶名,所以它的密碼肯定是為空的,自然就等于你輸入的密碼了。自然登陸了。 
  
  解決辦法: 
  將上面的代碼改為: 
  
  引用 or 代碼: 
  function verifyUser($name, $pwd) { 
  global $DB_site,$table_user; 
  $usrpwd = $DB_site->query_first("select password FROM $table_user where username = '$name'"); 
  $num=mysql_affected_rows($DB_site->link_id); 
  if ($num) { 
  if ($pwd==md5($usrpwd)) return true; 
  } 
  return false; 
  } 
  
  
  其實(shí)這個(gè)漏洞好象0.03也存在??墒菧y(cè)試了網(wǎng)上幾個(gè)0.03的站點(diǎn)。有些可以。有些不可以。在本地調(diào)試0.03的就不能利用。不知何故?哪位高手能指點(diǎn)一二?感激不盡。 
  
  漏洞二 
  
  涉及版本: 
  目前所有版本 
  
  描述: 
   由于category.php、article.php、print.php……多個(gè)文件對(duì)用戶提交的變量過(guò)濾不足。導(dǎo)致非法用戶可以進(jìn)行SQL Injection攻擊。 
  
  詳細(xì): 
  這幾個(gè)文件的相關(guān)代碼是這樣寫(xiě)的(這幾個(gè)文件的代碼不一定相同): 
  
  引用 or 代碼: 
  if (!isset($aid)){ 
  showerror('error_articleid'); 
  } 
  …… 
  …… 
  $article=$DB_site->query_first("SELECT $table_article.*,$table_page.* FROM $table_article 
  LEFT JOIN $table_page USING (articleid) 
  WHERE $table_article.articleid=$aid and $table_page.pagenum=$page"); 
  
  
  沒(méi)有檢查變量用戶提交的變量。不過(guò)在PHP里注入有點(diǎn)困難。因?yàn)镸YSQL4以下的版本是不支持子語(yǔ)句的,而且新版本的php.ini里的 magic_quotes_gpc 選項(xiàng)默認(rèn)是 On 的。當(dāng) magic_quotes_gpc 打開(kāi)時(shí),所有的 ' (單引號(hào)), " (雙引號(hào)), \ (反斜線) and 空字符會(huì)自動(dòng)轉(zhuǎn)為含有反斜線的溢出字符。這樣我們就無(wú)法注入了,所以注入語(yǔ)句就不說(shuō)了,大家自己看看相關(guān)MYSQL語(yǔ)句再碰碰運(yùn)氣自己嘗試注入吧。 
  
  解決辦法: 
  檢查用戶輸入的代碼。比如檢查提交的數(shù)據(jù)是否為數(shù)字類型。將以下代碼: 
  
  引用 or 代碼: 
  if (!isset($aid)){ 
  showerror('error_articleid'); 
  } 
  
  
  改為: 
  
  引用 or 代碼: 
  if (!isset($aid)){ 
  showerror('error_articleid'); 
  } 
  $idid=str_replace(" ","",${"aid"}); 
  if (is_numeric($idid)==0    $idid=="") 
  { 
  print "非法參數(shù)"; 
  exit(); 
  }