发布时间:2015-05-27 19:28:35作者:知识屋
下面就介绍下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测试了下,果然好使。
如何对PHP文件进行加密方法 PHP实现加密的几种方式介绍
php生成圆角图片的方法 电脑中php怎么生成圆角图片教程
用PHP构建一个留言本方法步骤 php怎么实现留言板功能
php中三元运算符用法 php中的三元运算符使用说明
php文件如何怎么打开方式介绍 php文件用什么打开方法
PHP怎么插入数据库方法步骤 php编程怎么导入数据库教程
如何安装PHPstorm并配置方法教程 phpstorm安装后要进行哪些配置
PHP 获取远程文件大小的3种解决方法 如何用PHP获取远程大文件的大小
20个实用PHP实例代码 php接口开发实例代码详细介绍
如何架设PHP服务器方法步骤 怎么搭建php服务器简单教程