前言

今天看到一篇文章分析齐博CMS注入的文章:齐博CMS激活验证处SQL注入 ,得空分析了一下,总体感觉漏洞利用比较鸡肋。

漏洞分析

实际上齐博CMS是有对变量进行过滤的,但是本次注入点就是利用程序自带的编码,使得这些过滤形同虚设。

注入点在 inc/class.user.php 文件中的 get_passport 方法,可以清晰的看到SQL语句进行了变量拼接。

同个文件的 get_allInfo 方法调用了 get_passport

变量加密处的位置在 do/activate.php 文件,代码如下:

可以看到上图 第7行 代码,将经过 mymd5 函数解密后的数据直接赋值给 $username$password 两个变量,并带入数据库查询。解密后的数据没有经过处理,这是导致发生SQL注入的关键。我们可以看看 mymd5 函数的代码。

可以看到这个函数包含了加密与解密。然而要想利用这个注入点,我们需要知道 $webdb[mymd5] 的值,而这个变量的值在每个网站搭建时会有一个初始值,且都不一样,这也是这个漏洞的鸡肋之处。我们可以登录后台查看到该变量对应的值。

漏洞利用

要想利用这个漏洞,我们只需要知道 $webdb[mymd5] 的值,并将相关函数抽取出来,加密我们的 payload 即可。具体如下:

然后利用生成的加密字符串构造如下payload,即可成功注入SQL语句:

结语

后面想试试通过前台获取 $webdb[mymd5] 的值,或者说控制该值,发现都不是很容易,于是作罢。

源链接

Hacking more

...