齐博CMS_V7.0前台SQL注入
前言
今天看到一篇文章分析齐博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] 的值,或者说控制该值,发现都不是很容易,于是作罢。
@Bojack 这可 $webdb[mymd5] 可以爆破出来,参考QiboCMS从SQL注入到getshell
@mochazz 加密的key是从后台或者配置文件中获取的话,好像挺多类似的框架都是这样做的吧,不过拼接方面确实不应该。
@mochazz emmmm表哥好,其实是因为我昨天第一次做审计,发现一个cms的漏洞利用跟这个类似,都是解码后或反序列化后 可以绕过过滤..但是需要一个类似于这个的$webdb[mymd5]一样的值 /doge 。。它也是install的时候初始化的...然后没找到前台获取它的方法,只能靠register_global=on的时候可以设置这个值来绕过....
@sera 不是说全局变量覆盖的漏洞是鸡肋漏洞,而是在这个漏洞中,想通过前台获取 $webdb[mymd5] 变量的值比较困难,导致漏洞利用难度变大,影响变小,所以说它鸡肋。如果能从前台获取到 $webdb[mymd5] 变量的值,那漏洞影响就不一样了。
这种需要全局变量覆盖的是不是都算鸡肋漏洞