【新手入门】SQL注入之盲注

一、引言

在我们的注入语句被带入数据库查询但却什么都没有返回的情况我们该怎么办?

例如应用程序返回到一个"通用的"的页面,或者重定向一个通用页面(可能为网站首页)。这时,我们之前学习的SQL注入的办法就无法使用了。这种情况我们称之为无回显 ,如果页面有信息显示,我们称之为有回显 。回显状态的页面就用之前学的SQL注入的方式,无回显的这种我们就可以采用盲注的手段。

二、有、无回显

有回显

pikachu靶场

无回显

是指当攻击者控制目标系统执行命令时,目标并不会直接返回结果,造成攻击者无法知晓自己的攻击行为是否成功。

无回显的两种情况

①有防护,注入失败:过滤掉攻击语句,再去数据库查询

②无防护,注入成功:对响应数据进行了加工,只显示一条 ,若数据库查询出来的数据超过了一条,就报错,说查不到数据或404。此情况可使用盲注

三、盲注

盲注,即在SOL注入过程中,SOL语句执行选择后,选择的数据不能回显到前端,我们需要使用一些特殊的方法进行判断或尝试,这个过程称为盲注。

SQL盲注分为两大类:基于布尔型SQL盲注、基于时间型SQL盲注。

四、Boolian布尔型盲注

通过一种比较手段来得到一个真假值(布尔值,true 1真、false 0假),根据真假值来断定数据是什么样子的。

手动爆破

布尔型盲注入查询长度

要查询当前库名,首先确定要查询的数据库的长度,再通过截取字符进行对比

vince' and length(database())>=4#

代码中的4需要我们从1开始试

可查询出的界面

不可查询出的界面

综上,可知数据库长度为4

布尔型盲注入获取数据库名

数据库常用字符如下:

0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz. @_

将这些字符和数据库中的每一个字符进行比较得到最终的数据库名

获取数据库第一个字符,输入

vince' and if(substring(database(),1,1)='p',1,0)

(这里p是爆破得到的)

一个一个爆破比较麻烦,建议用bp爆破

获取表

select table_name from information_schema.tables where table_schema=database() limit 0,1

获取列名

select column_name from information_schema.columns where table_name='users' limit 1,1

五、base on time时间型盲注

vince' and sleep(x)#

基于时间的延迟,构造一个拼接语句:

'vince'and if(substr(database(),1,1)='X'(猜测点),sleep(10),nu11#'

输入后,如果猜测正确,那么就会响应10秒,如果错误会立刻返回错误。

时间型盲注常用函数:sleep(x)、benchmark.如果sleep被防御掉了,可用另一个。或变换sElect、benCHmark等的大小写。

以上内容均为自己学习理解所得,如有错误,欢迎大家评论指正。

相关推荐
m0_672656549 分钟前
如何把图片或者图片地址存到 MySQL 数据库中以及如何将这些图片数据通过 JSP 显示在网页中
java·数据库·mysql
m0_zj20 分钟前
30.[前端开发-JavaScript基础]Day07-数组Array-高阶函数-日期Date-DOM
开发语言·前端·javascript
mengweijin31 分钟前
华为 Open Gauss 数据库在 Spring Boot 中使用 Flyway
数据库·spring boot·华为·flyway·gauss
网络安全Max32 分钟前
网络安全清单
安全·web安全·智能路由器
Dav_209939 分钟前
DAV_postgresql_3-schema
数据库
念九_ysl1 小时前
Vue 3指令全解析:内置指令与自定义指令实战指南
前端·javascript·vue.js
裁二尺秋风1 小时前
MongoDB—(一主、一从、一仲裁)副本集搭建
数据库·mongodb
"Wild dream"1 小时前
正则表达式
java·数据库·mysql·正则表达式
瞬间动力1 小时前
笔记:大模型Tokens是啥?为啥大模型按Tokens收费?
前端·javascript·人工智能·阿里云·easyui·oneapi·to
名之以父1 小时前
Git与GitHub:它们是什么,有什么区别与联系?
开发语言·前端·javascript·人工智能·github·个人开发·gitcode