【干货】如何判断 Sql 注入点

简介: 【干货】如何判断 Sql 注入点

通常情况下,可能存在 Sql 注入漏洞的 Url 是类似这种形式 :http://xxx.xxx.xxx/abcd.php?id=XX对 Sql 注入的判断,主要有两个方面:


  • 判断该带参数的 Url 是否存在 Sql 注入?
  • 如果存在 Sql 注入,那么属于哪种 Sql 注入?

可能存在 Sql 注入攻击的 ASP/PHP/JSP 动态网页中,一个动态网页中可能只有一个参数,有时可能有多个参数。有时是整型参数,有时是字符串型参数,不能一概而论。总之只要是带有参数的 动态网页且此网页访问了数据库,那么就有可能存在 Sql 注入。如果程序员没有足够的安全意识,没有进行必要的字符过滤,存在SQL注入的可能性就非常大。

1.判断是否存在 Sql 注入漏洞

最为经典的单引号判断法:

在参数后面加上单引号,比如: http://xxx/abc.php?id=1' 如果页面返回错误,则存在 Sql 注入。

原因是无论字符型还是整型都会因为单引号个数不匹配而报错。

(如果未报错,不代表不存在 Sql 注入,因为有可能页面对单引号做了过滤,这时可以使用判断语句进行注入,因为此为入门基础课程,就不做深入讲解了)

2.判断 Sql 注入漏洞的类型

通常 Sql 注入漏洞分为 2 种类型:

  • 数字型
  • 字符型

其实所有的类型都是根据数据库本身表的类型所产生的,在我们创建表的时候会发现其后总有个数据类型的限制,而不同的数据库又有不同的数据类型,但是无论怎么分常用的查询数据类型总是以数字与字符来区分的,所以就会产生注入点为何种类型。

2.1 数字型判断:

当输入的参 x 为整型时,通常 abc.php 中 Sql 语句类型大致如下:select * from <表名> where id = x这种类型可以使用经典的 and 1=1 和 and 1=2 来判断:


  • Url 地址中输入 http://xxx/abc.php?id= x and 1=1 页面依旧运行正常,继续进行下一步。
  • Url 地址中继续输入 http://xxx/abc.php?id= x and 1=2 页面运行错误,则说明此 Sql 注入为数字型注入。

原因如下:


  • 当输入 and 1=1时,后台执行 Sql 语句:select * from <表名> where id = x and 1=1 没有语法错误且逻辑判断为正确,所以返回正常。
  • 当输入 and 1=2时,后台执行 Sql 语句:select * from <表名> where id = x and 1=2 没有语法错误但是逻辑判断为假,所以返回错误。

我们再使用假设法:如果这是字符型注入的话,我们输入以上语句之后应该出现如下情况:

select * from <表名> where id = 'x and 1=1'

select * from <表名> where id = 'x and 1=2'

查询语句将 and 语句全部转换为了字符串,并没有进行 and 的逻辑判断,所以不会出现以上结果,故假设是不成立的。

2.2 字符型判断:

当输入的参 x 为字符型时,通常 abc.php 中 SQL 语句类型大致如下:select * from <表名> where id = 'x'这种类型我们同样可以使用 and ‘1’='1 和 and ‘1’='2来判断:

  • Url 地址中输入 http://xxx/abc.php?id= x' and '1'='1 页面运行正常,继续进行下一步。
  • Url 地址中继续输入 http://xxx/abc.php?id= x' and '1'='2 页面运行错误,则说明此 Sql 注入为字符型注入。

原因如下:

  • 当输入 and ‘1’='1时,后台执行 Sql 语句:select * from <表名> where id = 'x' and '1'='1'语法正确,逻辑判断正确,所以返回正确。
  • 当输入 and ‘1’='2时,后台执行 Sql 语句:select * from <表名> where id = 'x' and '1'='2'语法正确,但逻辑判断错误,所以返回正确。同学们同样可以使用假设法来验证。

3.实例说明

less-1(字符型注入)

拼接方式:id=’$id’

id=1’

数值型方法判断
https://sqli.wmcoder.site/sqli-labs/Less-1/?id=1 and  1=1

https://sqli.wmcoder.site/sqli-labs/Less-1/?id=1 and  1=2

and 1=1 和 and 1=2 均回显正常,并非数字型

字符型方法判断
https://sqli.wmcoder.site/sqli-labs/Less-1/?id=1' and  '1'='1

https://sqli.wmcoder.site/sqli-labs/Less-1/?id=1' and  '1'='2

and ‘1’='1 回显正常,and ‘1’='2回显异常,说明此 Sql 注入为字符型注入。

less-2(数值型注入)

拼接方式:id=$id

id=1

数值型方法判断
https://sqli.wmcoder.site/sqli-labs/Less-2/?id=1 and  1=1

https://sqli.wmcoder.site/sqli-labs/Less-2/?id=1 and  1=2

and 1=1 回显正常 , and 1=2 均回显异常,为数字型注入

less-3(字符型注入)

拼接方式:id=(’$id’)

id=1’)

字符型方法判断
https://sqli.wmcoder.site/sqli-labs/Less-3/?id=1' and '1'='1

https://sqli.wmcoder.site/sqli-labs/Less-3/?id=1' and '1'='2

and ‘1’='1 回显正常,and ‘1’='2回显异常,说明此 Sql 注入为字符型注入。

相关文章
|
8天前
|
SQL Web App开发 安全
【less-1】基于SQLI的SQL字符型报错注入
【less-1】基于SQLI的SQL字符型报错注入
14 2
|
8天前
|
SQL 安全 PHP
基于PHPCMS的SQL注入(Havij)
基于PHPCMS的SQL注入(Havij)
15 1
|
21天前
|
SQL 关系型数据库 MySQL
怎么通过第三方库实现标准库`database/sql`的驱动注入?
在Go语言中,数据库驱动通过注入`database/sql`标准库实现,允许统一接口操作不同数据库。本文聚焦于`github.com/go-sql-driver/mysql`如何实现MySQL驱动。`database/sql`提供通用接口和驱动注册机制,全局变量管理驱动注册,`Register`函数负责添加驱动,而MySQL驱动在`init`函数中注册自身。通过这个机制,开发者能以一致的方式处理多种数据库。
|
27天前
|
SQL 安全 关系型数据库
SQL 注入神器:SQLMap 简单使用
SQL 注入神器:SQLMap 简单使用
|
8天前
【干货】sql-labs、请求方式、注入类型、拼接方式
【干货】sql-labs、请求方式、注入类型、拼接方式
8 0
|
1月前
|
SQL 存储 Java
如何避免SQL注入攻击?
如何避免SQL注入攻击?
|
1月前
|
SQL 安全
jeecg-boot sql注入漏洞解决
jeecg-boot sql注入漏洞解决
142 0
|
7天前
|
SQL 监控 安全
代码审计-PHP原生开发篇&SQL注入&数据库监控&正则搜索&文件定位&静态分析
代码审计-PHP原生开发篇&SQL注入&数据库监控&正则搜索&文件定位&静态分析
|
8天前
|
SQL Web App开发 前端开发
【less-11】基于SQLI的POST字符型SQL注入
【less-11】基于SQLI的POST字符型SQL注入
18 2
|
22天前
|
SQL 监控 安全
sql注入取数据库
SQL注入是一种攻击技术,用于在SQL查询中注入恶意代码,从而绕过安全措施,获取、修改或删除数据库中的数据。这种行为是非法的,并且严重违反了网络安全和隐私原则。我不能提供关于如何进行SQL注入的指导或