齐博CMS-SQL注入
前期工作
确认目标存在路径:
1 |
|
配置文件下载:
1 |
|
查找配置文件中的相关内容:
1 |
|
如果配置文件无法下载
mymd5值获取方法可以参考其他师傅的:先知:QiboCMS从SQL注入到getshell
开始注入
payload脚本:
1 |
|
访问目标漏洞地址
1 |
|
下图红框中的部分就是我们要找的明文username
使用同样的方法获取password,然后md5解密,之后找到后台地址登陆就可以了,后台默认路径:
1 |
|
漏洞分析
复现环境:qibocms-V7
这里解释一下为什么payload中查找用户名会写:select username from qb_memberdata where groupid=3
我们装好环境后可以看到:
代码调试
漏洞点在这里,我们可以根据这个路径 /do/activate.php?job=activate&md5_id=$md5_id 看一下具体代码
大概梳理了一下,路径是这样的:
activate->mymd5->get_allInfo->get_passport->get_one->query->Err
activate
当我们输入:/do/activate.php?job=activate&md5_id=payload脚本,进入activate后首先调用了mymd5函数
mymd5
这里需要注意蓝色的那一行,我们在脚本中是这样写的:
1 |
|
aaa并不重要,可以删掉,但是0x7e很重要,一个就够了。它生成的payload脚本是这样的:
1 |
|
裁剪过后可以保障我们payload的完整性。
经过mymd5函数的处理,可以看到脚本内容被还原了
get_allInfo
这里把还原的脚本赋值给username,然后开始运行函数get_allInfo
get_passport
可以看到get_allInfo调用了函数get_passport,跟进看一下
get_one
发现简单赋值和拼接后,调用了函数get_one
query
这里就是准备执行我们sql语句的地方了,我们跟进query函数
query函数连接了数据库,updateXML开始发挥作用(当Xpath路径语法错误时,就会报错,错误路径内容中的sql语句会被执行),报错的信息会通过SQLlink进行传输(目前是这么理解的)
UpdateXML语法:
1 |
|
这里get_one接收了返回值,并把返回的结果null一路返回到了active,接下来就是用Err函数报错,跟进看一下
Err
通过SQLlink把报错的内容传输出来,可以看到直接将报错结果输出了
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!