Exponent CMS是一款开源的CMS,其2.4.1版中存在sql注入
漏洞
注入点在 /framework/modules/eaas/controllers/eaasController.php 中。如下:
|
|
api()中,先检测参数apikey
是否为空,若不为空,则进入else分支。在分支中,先对参数apikey
进行一次urldecode
,接着进行 base64_decode
,最后进行一次反序列化expUnserialize
,在expUnserialize
中存在一次小小的过滤:
它会把 经过base64_decode
后的$apikey
中的双引号加上斜杠。但是对于单引号,它没有进行处理。在进行expUnserialize
之后,赋值给$key
,并在之后实例化一个 expConfig
对象。expConfig
部分代码如下:
|
|
在 framysqli\core\subsystems\database\mysqli.php 中,可以看到关于selectValue
的定义:
|
|
可以看到,在检查完$params
是否是数组后,将我们传入的$params
序列化后直接插入到了数据库查询语句中,未作任何过滤和检测。加上之前并未对单引号进行处理,因此我们可以利用单引号,对 location_data='".$this->location_data."'
中的单引号进行闭合。
POC
|
|
其中 base64_decode(“czoxNjoiYWFhJ29yIHNsZWVwKDIpIyI7”) = s:16:”aaa’or “‘sleep(2)#
查看 mysql.log ,可以发现成功注入。
运行的 sql语句 为:
|
|
可以看到单引号被成功闭合。