程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php mongodb 注入

php mongodb 注入

編輯:關於PHP編程

 


下面就介紹下php+mongodb注入的方法和原理

其中一篇帖子說:login.php?username=admin&passwd[$ne]=1就有可能注入,剛看的時候,我感覺挺納悶的,這個怎麼就存在注入漏洞了呢,終於從這篇帖子http://hi.baidu.com/hi_heige/item/ce93ce926dede4f428164747中發現了原因。因為PHP是可以直接提交array的,也就是說提交的是含有“$ne”索引的數組,我做了個demo:


[php]
$passwd=$_GET["passwd"]; 
var_dump($passwd); 

$passwd=$_GET["passwd"];
var_dump($passwd);
測試結果為:

array(1) { ["$ne"]=> string(1) "1" }

 


這樣的話


[php]
$collection->find(array( 
    "username" => "admin", 
    "passwd" => array("$ne" => 1) 
)); 

$collection->find(array(
    "username" => "admin",
    "passwd" => array("$ne" => 1)
));
就變為了:


[php]

$collection->find(array(      "username" => "admin",      "passwd" => array("$ne" => 1)  ));  $collection->find(array(
    "username" => "admin",
    "passwd" => array("$ne" => 1)
));


如果把鏈接改成這種(username=[$ne]=1&passwd[$ne]=1)的話,那麼會把所有的用戶信息都獲取過來

解決這個bug的方法為在獲取參數後都把參數強制轉換成string類型下:

[php]
$collection->find(array( 
    "username" => (string)$_GET['username'], 
    "passwd" => (string)$_GET['passwd'] 
)); 

$collection->find(array(
    "username" => (string)$_GET['username'],
    "passwd" => (string)$_GET['passwd']
));這個與執行下面的mysql語句是一樣的道理了,都注入了


[php]

mysql_query("SELECT * FROM collection 
    WHERE username="admin", 
    AND passwd!=1 

mysql_query("SELECT * FROM collection
    WHERE username="admin",
    AND passwd!=1
我做了個demo測試了下,果然好使。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved