您当前的位置: 首页 >  sql

贤鱼不闲

暂无认证

  • 0浏览

    0关注

    75博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

35分钟了解sql注入-盲注(三)

贤鱼不闲 发布时间:2022-09-29 07:00:00 ,浏览量:0

🏆今日学习目标: 🍀学习sql注入之盲注操作 ✅创作者:贤鱼 ⏰预计时间:25分钟 🎉个人主页:贤鱼的个人主页 🔥专栏系列:网络安全

请添加图片描述

盲注
  • 布尔盲注
    • 原理
    • 布尔盲注payload构造步骤
    • 截取字符串
      • substr()
      • mid
      • rigth()
      • left()
      • regexp
      • rlike
      • trim
      • insert
    • 字符串定位函数
    • 比较
      • =
      • rlike/regexp
      • between
      • in
      • and,or减法运算
    • 脚本
  • 时间盲注
    • 原理
    • 时间盲注payload步骤
    • 条件语句构造
      • and
      • or
    • 延时操作
      • sleep
      • benchmark
      • 笛卡尔积延时
      • 正则dos延时
    • 脚本
  • 报错盲注
    • 原理
⚠盲注内容较多,可能需要花费一些时间

布尔盲注 原理

存在sql注入漏洞的地方,但是不会会先数据,只能看到是否执行成功,这样子就不能通过注入数据回显了,就需要盲注,盲注对一个数据多次测试

举个例子

如果"库名"第一个字母是a,就回显“查询成功”,反之“查询失败”;
如果"库名"第一个字母是b,就回显“查询成功”,反之“查询失败”;
如果"库名"第一个字母是c,就回显“查询成功”,反之“查询失败”;
如果"库名"第一个字母是d,就回显“查询成功”,反之“查询失败”;
......
如果"库名"第一个字母是z,就回显“查询成功”,反之“查询失败”;
......

名字可能由任何字符组成,我们如果匹配上了,就把他记录下来,一位一位的比较,就可以获得我们要的数据了 当然,如果手动比较,电脑和我的手一定会炸掉一个 所以我们需要写脚本,在后文会介绍到。

布尔盲注payload构造步骤

确定注入点,找到回显不同,例如:内容不同或者http头部不同

我们该如何构造语句呢? 举个栗子

SELECT name, mojority FROM student WHERE student_id = '0' or substr((QUERY),1,1) = 'a'

SELECT name, mojority FROM student WHERE student_id = ‘0’ or substr((QUERY),1,1) = ‘a’ 这个部分就是我们需要构造的部分

构造语句的两个重点: 字符串如何截取 比较结果是否相等

所以盲注就相当于把注入内容一位一位拆开然后比较内容,最后比较出啥输出啥,然后将比较到的每一位字符都输出就是我们的答案了

截取字符串 substr()

使用方法: substr(要截取的字符串,从哪一位开始,截取多长)

例如

select substr((select database()),1,1);
mid

用法和substr完全相同!!可以互相绕过过滤

rigth()

使用方法 right(要截取的字符串,截取长度) 表示截取字符串右边几位 注意: 配合ascii/ord一起使用,这两个函数是返回传入字符串的首字母的ASCII码 使用方法: ascii((right(要截取的字符串,x))) 返回的内容是从右往左x位的ascii码

举个栗子

select ascii(right((select database()), 2));
left()

使用方法: left(要截取的字符串,截取长度) 表示截取字符串左边第几位 注意: 配合reverse()+ascii/ord使用,用法和上面类似

举个栗子:

elect ascii(reverse(left((select database()), 2));
regexp

使用方法: binary 目标字符串 regexp 正则 判断一个字符串是否匹配一个正则表达式

举个栗子:

select (select database()) regexp binary '^sec'
rlike

用法和regexp雷同

trim

trim(leading ‘a’ from ‘abcd’) 表示移除句首a,会返回abc,如果将from前的a改成b,则会返回abcd

insert

用法 insert(字符串,起始位置,长度,替换成什么)

字符串定位函数
INSTR(str,substr)–> 返回字符串 str 中子字符串的第一个出现位置,否则为0
FIND_IN_SET(str,strlist)–> 返回字符串 str 中子字符串的第一个出现位置,否则为0
LOCATE(substr,str,pos)–> 返回字符串 str中子字符串substr的第一个出现位置, 起始位置
在pos。如若substr 不在str中,则返回值为0
POSITION(substr IN str)–> 返回子串 substr 在字符串 str 中第一次出现的位置。如果子串
substr 在 str 中不存在,返回值为 0

用法: locate(substr, str, pos) 字符串 str中子字符串substr的第一个出现位置, 起始位置在 pos。如若substr 不在str中,则返回值为0。

比较 =

我觉得不需要讲。。。

rlike/regexp

上文有讲,截取+比较结合体

between

用法 expr between 下界 and 上界 意思是是否expr>=下界 &&expr

关注
打赏
1664987740
查看更多评论
立即登录/注册

微信扫码登录

0.0362s