sqlilabs第十四关布尔盲注方法
SQLi-labs是一个用来学习和实践SQL注入的开源项目。第十四关是关于布尔盲注的,主要通过布尔表达式的真假来推断数据库中的数据。
布尔盲注是一种在没有返回错误消息或者显示具体数据的情况下,通过不断试错和判断来推断出数据库中的数据的注入方式。与前面的关卡不同,布尔盲注更加隐蔽,需要通过一系列的逻辑判断来获取数据。
首先,我们需要通过前面关卡所学的方法来确定注入点。在这个关卡中,注入点在`id`参数处,我们可以尝试给`id`参数加上单引号(`'`)来测试是否存在注入点。如果页面显示错误或者报错信息,则说明存在注入点。
接下来,我们需要通过试错的方式来判断布尔表达式的真假。在布尔盲注中,我们通常使用`1=1`和`1=2`来判断表达式的真假。如果页面显示正常,则说明表达式为真;如果页面显示错误或者报错信息,则说明表达式为假。
现在我们需要确定`username`的长度。我们可以使用`length(`函数来获取字符串的长度,并结
合前面的判断表达式方式来进行试错。
我们可以尝试使用以下语句来获取`username`的长度:
- `id=1 and length(username)=10 and 1=1`
- `id=1 and length(username)=10 and 1=2`
如果第一种情况页面显示正常,说明`username`的长度为10;如果第二种情况页面显示错误或者报错信息,则说明`username`的长度不是10。通过不断尝试不同的长度,我们可以逐渐缩小`username`的长度范围。
一旦确定了`username`的长度,我们可以使用`substring(`函数来逐个获取`username`的字符。我们可以结合前面的判断表达式方式来进行试错。
我们可以尝试使用以下语句来获取`username`的第一个字符:
- `id=1 and substring(username, 1, 1)='a' and 1=1`
- `id=1 and substring(username, 1, 1)='a' and 1=2`
如果第一种情况页面显示正常,说明`username`的第一个字符为'a';如果第二种情况页面显示错误或者报错信息,则说明`username`的第一个字符不是'a'。通过不断尝试不同的字符,我们可以逐个获取`username`的所有字符。
同样的方式,我们也可以获取`password`的长度和字符。只需要将上面的语句中的`username`替换成`password`即可。
通过不断的尝试和推断,我们可以逐渐获取到数据库中的数据。最终我们需要得到一个完整的SQL语句来获取数据,类似于:
- `id=1 and substring((select username from users where id=1), 1, 1)='a' and 1=1`
- `id=1 and substring((select username from users where id=1), 1, 1)='a' and 1=2`
字符串长度判断
通过逐个获取字符并拼接起来,最终我们可以获取到完整的`username`和`password`的值。
布尔盲注是一种相对隐蔽的注入方式,需要通过不断的试错和判断来推断数据。需要注意的是,在进行布尔盲注的过程中,应该避免对数据库进行破坏性的操作,以免对数据库造成损坏或数据丢失。在实际应用中,应该避免出现SQL注入漏洞,以确保数据库的安全性。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。