百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

Web渗透测试——SQL注入基础(sql注入漏洞原理、常见测试方法及防御方法)

toyiye 2024-07-15 01:33 8 浏览 0 评论

SQL注入漏洞是Web端非常危险的一种漏洞,也是长期霸占Web漏洞榜单前几的漏洞类型,我相信许多网络安全初学者,大部分都是从了解SQL注入漏洞开始的,而且第一次获得目标站点管理权限,大部分也都是通过利用SQL注入漏洞来获取的,可见SQL注入的危害性有多大,今天我们就来说一说SQL注入漏洞的基础知识,初步了解一下SQL注入漏洞的原理。

什么是SQL注入?

SQL注入攻击指的是通过构建特殊的输入作为参数,插入到Web表单的输入或者页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。而这些输入大都是SQL注入语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作。用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数。

为什么会出现SQL注入?

不当的字符处理

SQL数据库将单引号解析成了代码与数据库的分割线,单引号外面的内容均是需要执行的代码。将用户输入直接传递给动态创建的SQL语句,单引号字符会被解析成字符串分隔符,并作为代码与字符的分界。处理数字数据时,不需要使用单引号将数字数据引起来。

不安全的数据库配置

SQL Server经常使用“sa”作为数据库管理员,MySQL经常使用“root”作为数据库管理员,Oracle在创建数据库时会创建SYS、SYSTEM、OUTLN等账户。一些默认的账户采用默认的口令进行登录。当Web应用采用的是最高权限用户时,拥有所有权限,可以对当前数据库引擎中所有的数据库进行操作。

不合理的查询处理

在进行数据库操作时,用户的输入没有经过严格的过滤,用户可以自己构造SQL语句,采用拼接、注释等方式构造SQL语句来执行自己的语句。

不当的错误处理

导致错误的处理不当,最常见的原因是将详细的内部错误消息展示给用户或者攻击者。一些错误信息为攻击者提供网站缺陷或者相关的线索。开发和服务器配置时导致错误直接回显。

常见SQL语句

SQL(Structured Query Language)结构化的查询语言,是关系型数据库 通讯的标准语言。

 查询:SELECT statement FROM table WHERE condition;
删除记录:DELETE FROM table WHERE condition;
更新记录:UPDATE table SET field=value WHERE condtion;
添加记录:INSERT INTO table field VALUES(values)。

SQL注入分类

数字型注入点

假设我们网站的 SQL 查询的语句是这样:

SELECT * FROM news WHERE id=$id 

这里的“$id”是用户提交的,当我们输入的是

10 and 1=1

语句就变成了这样:

SELECT * FROM news WHERE id=10 and 1=1 

数字型参数是不需要用单引号引起来的,假设“id=10”存在,那么这个 SQL 语句 and 左边是返回成功的,右边是恒成立的,所以整体返回就是成功。

如果将and右边换成“1=2”,那么就返回不成功,我们可以用这种方法测试站点是否存在数字型注入点,因为我们输入的内容被后台执行了,如果换成更加复杂的SQL语句,就可以在未授权的情况下执行更多SQL语句操作。

字符型注入点

假设我们网站的 SQL 语句是这样的:

 SELECT * FROM news WHERE name='$name' 

注意我们输入的参数被单引号引起来,所以我们构造参数时就需要考虑单引号了,当我们构造输入为

admin' and '1'='1 

语句就变成了:

 SELECT * FROM news WHERE name='admin' and '1'='1'

发现没有语句闭合了,同样如果“admin”存在,那么and左右两边是成立的,所以返回成功,如果将右边换成'1'='2',那么就会返回失败,同样也可以验证是否存在字符型注入点。

搜索型注入点

假设我们的 SQL 查询语句是这样的:

 SELECT * FROM news WHERE keyword like '%$keyword%'

其中“%”是通配符,当我们输入以下语句:

keyword%' and 1=1 and '%'='

最终我们得到的语句是这样的:

SELECT * FROM news WHERE keyword like '%keyword%' and 1=1 and '%'='%'

可见语句也闭合了,如果将“1=1”换成“1=2”就可以验证是否存在搜索型注入点。

内联式注入点

假设我们的网站 SQL 查询语句是这样的:

SELECT * FROM admin WHER username='$name' AND password ='$passwd' 

这一看就是个登录页面的代码,我们构造如下语句:

' or ''='

分别提交给“name”和“password”,那么我们就会得到如下语句:

SELECT * FROM admin WHER username='' or ''='' AND password ='word' 
 SELECT * FROM admin WHER username='name' AND password ='' or ''=''

这里我们要知道一点,就是在 SQL 语句中,AND 的优先级是大于 OR 的, 于是会先计算 AND,然后才会计算OR,所以这里我们的语句会被OR分为两段 SQL语句,第一个语句OR 左边username=''不成立,因为不可能存在用户名为空的情况,右边''=''恒成立,password='word'随便输的密码几乎不可能成立。

同样分析,第二个语句OR左边不成立,右边恒成立,根据OR语法,有一方成立就会返回成功,所以第二句显示登陆成功,就绕过了用户名密码。

终止式注入点

我们还是以

SELECT * FROM admin WHER username='$name' AND password ='$passwd'

不同的是,我们构造

' or ''='' --

我们就可以得到如下的查询语句:

 SELECT * FROM admin WHER username='' or ''='' --' AND password ='word'

其中“--”为终止符号,后边的内容不会执行,可以忽略,因此我们的语句可以看成:

SELECT * FROM admin WHER username='' or ''=''

OR左边不成立,但是OR右边恒成立,所以返回成功,我们又绕过了用户名密码成功登陆。

以上就是我们今天介绍的SQL注入的一些基础知识,为了加深大家对SQL注入的理解,我会在以后文章中介绍一些手工注入的知识,这样会帮助大家更好的理解SQL注入是如何窃取网站后台数据库信息的,欢迎大家关注@科技兴了解更多科技尤其是网络安全方面的知识。

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码