下面基于sql注入挑几处重点的部分来说说
首先我们需要看下hdphp中获取参数的函数

代码如下
也就是我们可以通过
$id=Q('uid');
来调取请求中的数字,字符串或者数组 并进行赋值。
如果我们通过上面的方式来获取uid,那么的话会从$_REQUEST中来进行获取。
而且没有对请求的数据进行过滤。
通过上面的介绍,我们可以想到几个利用点。
字符型 这样的话 我们需要添加%27 如果开启gpc会被注释
数字型 这种方式 有的时候会这样写代码Q('uid',0,'intval')
数组型 这个是重点,因为intva和gpc我们都无法绕过,可以在当程序员想获取数字的时候,变量数组key中来填充自己的恶意代码。
了解了获取的函数,我们还需要了解一下sql语句执行的函数。
其主要通过Hdphp/lib/driver/db/db.class.php这个里面的文件来进行执行。
我们需要重点看下where函数。
他的主要作用就是对传递的$where进行拼接。
当我们传递数组的时候,他会将key 和 value 进行拼接。这样的话,我们就可以执行一些key中的命令,从而绕过intval 这个函数。 再就是这个函数对key 的过滤实在是不到位。绕过很简单。
用框架的根本原因就是为了快速开发
最简单的获取一个用户id信息的代码如下
$uid=Q(‘uid’,0,’intval’);
$userinfo=M(‘user’)->find($uid);
如果要是这样写的话,我们可以构造如下的sql语句进行检测注入
Index.php?uid[1 like 2 %23]=1
Index.php?uid[1 like 1 %23]=1
下面来说一个hdcms 的实例注入漏洞。
首先我们来看HDCMS\Member\Controller\SpaceController.class.php
关键代码如下



