新手小白入门——SQL注入分类之数字类型分类

一、关于SQL注入漏洞

SQL注入是一种常见的web安全漏洞,利用这个漏洞可以访问或修改数据,或利用潜在的数据库漏洞进行攻击。

下面先简单了解一下

1.一次SQL注入过程:

2.SQL注入的本质:

数据与代码未分离,即将数据当成了代码来执行,即攻击者通过将恶意的SQL代码插入到用户输入或其他数据源中,改变了原有SQL语句的逻辑

3.SQL注入的必备条件:

①可以控制输入的数据

②服务器要执行的代码拼接了可控制的数据

4.SQL注入的危害:

①获取数据库信息(包括管理后台用户名和密码 以及 脱裤<即脱取数据库信息>)

②获取服务器权限

③植入Webshell,获取服务器后门

④读取服务器敏感文件

⑤“万能密码”

二、SQL注入之数字类型分类

一般主要分为字符型,数字型,搜索型和xx型

在此之前,我先简述一下抓包的过程:

抓包(以pikacha靶场为例,在Burpsuite上进行):

①首先打开pikachu靶场(在这里以字符型注入为例),在查询框里输入要查询的用户名  

eg:vince

②紧接着打开Burpsuite,然后打开拦截器(看到如下图的 Intercept is on 即代表拦截器已打开,而Intercept is off 代表拦截器已关闭!)

在打开拦截器后一定要记得将火狐浏览器右上角的 bp(代表burpsuite在火狐浏览器中的拦截请求)打开!!!(如下图)

③点击查询后,你会看到如下图所示的拦截到的数据,即我们抓到的数据包!

然后在此页面的空白处单击右键,选中 Send to Repeater(即发送到重放器),如下图所示:        

接着在 Repeater (即重放器)的左上角中找到 Send,并点击 

然后在左半边的 Response 中找到Reader(即页面渲染),点击后即可呈现出用户名为 vince 的查询后的页面效果,如下图所示: 当然我们可以在右半边的 Request 中改变用户名的信息,再次按Send,然后查询页面渲染的效果,会呈现出相应的信息                                                                                                                             

接下来我们步入正题:

1.字符型(主要为get请求,以下图为例):

①首先以 vince 为例

当输入的用户名为 vince 时,经过抓包后得到的页面渲染效果:

②而当用户名输入为 xx' or 1=1 时,经过抓包得到的页面渲染效果是:它居然呈现出了所有用户的相关信息!!!

接下来我们来简单分析一下                                                                                                            

打开后即可看到如下内容

下图即当用户名为 xx' or 1=1# ,拼接到语句里面的情况                                                                     

并且 or 后面的 1=1 条件为真,数据库里面的数据信息都符合,所以它呈现出来所有用户的信息!(以上为个人在学习时的理解,若有错误,欢迎大家前来评论指正!!!)

在这里值得一提的还有对于 get 请求访问的要求:

如下图所示,我们可以看到 name= 的后面并不是我们在查询框里输入的 xx' or 1=1#,它是经过URL编码或是浏览器特殊处理的

对于get请求比较特殊,后面输入的数据不能有空格或是特殊字符                 

若有则不符合语法,这是要么会进行URL编码,要么浏览器进行特殊处理,对于其他请求(例如 post请求)可以空格 

下面简述一下URL编码规则 

*URL编码:

①将需要进行编码的字符替换:为其对应的编码形式,使用 "%" 其后跟随两位的十六进制数来替换非 ASCII 字符。
②对于URL中的保留字符,也需要进行编码。
③URL 不能包含空格,通常使用加号(+)或 %20 替代空格。
④其他字符出现在 URL 之中都必须转义,规则是根据操作系统的默认编码,将每个字节转为百分号(%)加上两个大写的十六进制字。

*关于注释符:

# :在SQL语句中使用#作为注释符号时,将#放在SQL语句的末尾,来注释掉后面的内容。eg:select id,username form users where id = 1 #id=admin,此时后面的部分被注释掉,不会执行。而且,在使用#进行注释时,#的后面不能有空格,否则会被浏览器解释为URL的一部分‌。‌

--(后面有空格):用于内联注释,即从“-- ”开始到行末的内容都会被数据库当作注释忽略。eg:在 select id,username from users where username = vince --  and username = admin 中,“--  ”后面的内容被注释掉,而改变了原SQL语句的逻辑 

--+:和 “--(后面有空格)”的效果相同,主要用于在SQL语句中注释掉后面的内容,以改变原SQL语句的执行逻辑

/*/:在SQL中,/*/作为一种块注释符,在“/”与“*/”之间的内容会被当做注释而忽略,可用于SQL注入来改变SQL语句的执行逻辑。eg:在select id,username from users where username = 'vince'/ and username = ‘admin’ */中,and username = 'admin' 就会被注释掉,而不被执行

对于字符型注入我们还可以用引号测试来检测SQL注入点,具体如下图所示:

2.数字型

在这里以id=1为例

我们按照之前的步骤打开其脚本语言进行查看,在这里(即数字型注入)输入的数字拼接进去的语句与字符型注入的有所不同!!!直接是id=$id(变量),不用管有什么‘ ’闭合(字符型输入拼接时的)!!!

当把id改为 1 or 1=1 时

3.搜索型

在这里首先以用户名为vince为例,如下图:经过抓包后得到的页面渲染效果:

在这里我们依然可以按照前面的步骤打开其脚本语言进行查看,在这里(即搜索型注入)输入的用户名拼接进去的语句与字符型注入的有所不同!!!两边用%来闭合!!!

那么在这里简单地介绍一下通配符

*通配符

在SQL中,通配符主要用于模糊查询
 
①“%”(百分号):在 like操作符中使用,它可以代表零个、一个或多个字符,由于%为通配符,而通配符不能用=连接,所以select id,email for member where username  like '%vin';  代表是要在数据库里查询用户名中含有vin的 id,email 的信息',这条SQL语句会查找用户名字段中包含“vin”的所有记录,不管“vin”前面和后面有多少其他字符。
 
②“_”(下划线):也用于 like操作符,它代表一个字符。eg:“select id,email for member where username  like 'vin_'”,会查找用户名为以“vin”开头,后面只有一个字符的记录,像“Vince”符合条件,而“vince”不符合。(在此只是以该查询语句为例进行说明,但在pikachi靶场中并不适用,因为在数据库中不含用户名为vinc的信息!!!)

在下面几张图片里我们可以看到在搜索框里不论是输入 vin ,vin%,%vin%还是%vin%%,搜索得到的数据都是一样的,而这正体现了上面所说的通配符%的作用效果!!!

4.xx型

在此还是以 用户名为 vince 为例:

打开其脚本语言进行查看

最后来介绍一下防止SQL注入的方法

*防止SQL注入的方法:

‌1.参数化查询‌:使用参数化查询可以避免SQL注入的风险,因为参数不会被解释为SQL代码。
‌2.输入验证‌:对所有输入进行严格的验证,确保输入符合预期的格式和类型。

以上为个人对SQL注入分类之数字类型分类的所学总结,若有叙述不正确或不恰当的地方,欢迎大家前来评论指正哦!!!
                                                                                                          

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值