2022-11-28 20:20:24682浏览
DNSlog 可以在没有直接回显的前提下,借助 DNS 查询拿到注入结果,但是这个漏洞也有其特殊的条件,如果条件不满足则无法成功。如果你也遇到诸如失败的情况,可以参考本文尝试解决。
一、SQL 配置文件需要特殊配置
MySQL 提供了一个函数 load_file 来加载文件,以方便读取配置文件或者加载文件数据,这个函数也可以引用网络文件。
因此,在一些可能存在注入,但是没有直接回显的场景,我们可以用 load_file 读写一个不存在的网络文件的方式,让 MySQL 发起网络请求。即便请求不成功,也会因为进行了 DNS 解析请求从而在服务器上留下记录,这些记录包括子域名,只要把获取到的内容附着在子域名里面,就可以在服务器日志中收到回显了。
不过这个 load_file 需要经过配置方可使用,接下来我们先修改一下这个配置。
1. 打开 phpStudy
2. 依次点击“其他选项”→“MySQL工具”→“打开数据库目录”
3. 在数据库目录里,点击回到上一层
4. 选中 my.ini ,然后右击,点击“编辑”
5. 在文件中的空白处,新增一行
secure_file_priv=''
👆注意这里是两个单引号而不是一个双引号
6. 保存文件并退出编辑
7. 点击 phpStudy 上的“重启”按钮
二、DNS 查询会被缓存
DNS 查询通常会被缓存,即便受害者服务器没有缓存,也可能被其他任何一个参与递归查询的服务器缓存,这就会导致 DNS 服务器只能收到第一次访问记录,后面的访问无法记录。
对此我们可以每次都构造不同的二级域名,确保每次都会发起 DNS 解析请求。
解决方案:
每次测试的语句里,都使用一个不同的数字作为二级域名,然后把查询的数据添加到三级域名,例如下图的 payload 中:
红框内的数字 8 就是本次查询的特殊数字。
这样做的另一个好处是:我们可以清楚地知道是第几个 payload 产生了作用!
问题反馈