返回介绍

7.1 SQL 注入测试

发布于 2024-10-11 00:03:32 字数 3930 浏览 0 评论 0 收藏 0

7.1.1 测试原理和方法

SQL 注入就是通过把 SQL 命令插入 Web 表单提交或输入域名页面请求的查询字符串,

最终达到欺骗服务器执行恶意的 SQL 命令的目的。具体来说,它是利用现有应用程序,将

(恶意)SQL 命令注入后台数据库引擎执行的能力,它可以通过在 Web 表单中输入(恶

意)SQL 语句获取一个存在安全漏洞的网站上的数据库权限,而不是按照设计者的意图

去执行 SQL 语句。下面通过一个经典的万能密码登录案例深入浅出地介绍 SQL 注入漏洞。

SQL 注入按照请求类型分为:GET 型、POST 型、Cookie 注入型。GET 与 POST 两种类

型的区别是由表单的提交方式决定的。按照数据类型可分为:数字型和字符型(数字也是

字符,严格地说就是一类,区别在于数字型不用闭合前面的 SQL 语句,而字符型需要闭

合)。测试方法分为报错型、延时型、盲注型、布尔型等。

数字型注入(一般存在于输入的参数为整数的情况下,如 ID、年龄等)测试方法如

下。

第一步:正常请求,查看页面。

第二步:在请求的参数后加 and 1=1,如果可以添加执行,则和第一步的返回页面并

无差异。

第三步:在请求参数后加 and 1=2,如果返回页面与第二步页面明显不同,或有所差

异,则断定存在数字型注入。

字符型注入(一般存在于接收的参数为字符串的情况下,如姓名、密码等)测试方法

如下。

第一步:正常请求查看页面(如查询 admin 用户信息,则返回 admin 用户的信息)。

第二步:在查询的参数后加’or 1=1(有时可以加--来注释后面的语句),加单引号的

目的是闭合前面的 SQL 语句并与后面的语句形成语法正确的 SQL 语句。如果可以添加并能

够执行,则返回除 admin 用户外所有用户的信息。这时可以判断存在字符型注入。

7.1.2 测试过程

攻击者确定疑似的数字型注入链接,按照数字型手工注入方式进行手工判断,若确定

存在漏洞后,可用手工注入方式查询数据或使用注入工具查询数据库数据,如图 7-1 所

示。

图 7-1 数字型注入测试流程图

7.1.2.1 数字型注入

以网站 http://XXX.XXX.com/sydwzwb/zwxq.php?id=3974 为例。

步骤一:正常访问,查看页面,如图 7-2 所示。

在参数后加单引号或者%27,即可在参数后构造 SQL 语句。由于 SQL 语句单引号是成

对出现的,添加单引号则 SQL 语句是错误的语句,不能被 SQL 解释器正常解析。访问报错

说明 SQL 语句执行了,如图 7-3 所示。

图 7-2 正常访问页面

图 7-3 添加单引号页面显示

步骤二:在 ID 参数后加 and 1=1,查看页面,发现与第一步并无异样,如图 7-4 所示。

图 7-4 添加 and 1=1 页面显示

步骤三:添加 and 1=2,并查看页面,如图 7-5 所示。

图 7-5 添加 and 1=2 页面显示

如果发现与第二步完全不同,则可以证明存在数字型注入,利用专门的 SQL 注入工具

(如 sqlmap)可以拥有数据库增、删、改、查权限,甚至可以执行系统命令、上传后门文

件等。sqlmap 工具下载使用说明详见其官网 http://sqlmap.org/,如图 7-6 所示。

图 7-6 用 sqlmap 跑数据

7.1.2.2 字符型注入

攻击者确定疑似的字符型注入链接,按照字符型手工注入方式进行手工判断,若确定

存在漏洞后,可用手工注入方式查询数据或使用注入工具查询数据库数据,如图 7-7 所

示。

图 7-7 字符型注入测试流程图

以网站 http://xxx/Organ!loadOrgs.shtml 为例。

步骤一:正常访问,抓包并查看页面,如图 7-8 所示。

图 7-8 正常访问返回包情况

在参数后加单引号或者%27(由于 SQL 语句单引号是成对出现的,添加单引号则

SQL 语句是错误的语句,不能被 SQL 解释器正常解析。访问报错说明 SQL 语句执行了),

即可在参数后构造 SQL 语句,如图 7-9 所示。

图 7-9 添加单引号返回包情况

步骤二:添加’or‘1’=’1,查看页面,如图 7-10 所示。

图 7-10 添加’or‘1’=’1 返回包情况

不仅查询出 10100095 的信息,所有信息都可以查询到,用 sqlmap 可以进一步验证漏

洞,如图 7-11 所示。

图 7-11 sqlmap 注入成功

以上两种注入都是基于报错信息手工测试和工具注入,还有基于时间、盲注、布尔型

等的注入,在这就不一一举例了。

7.1.3 修复建议

每个提交信息的客户端页面、通过服务器端脚本(JSP、ASP、ASPX、PHP 等)生成

的客户端页面、提交的表单(FORM)或发出的链接请求中包含的所有变量,必须对变量

的值进行检查,过滤其中包含的特殊字符,或对字符进行转义处理。特殊字符如下。

· SQL 语句关键词:如 and、or、select、declare、update、xp_cmdshell;

· SQL 语句特殊符号:’、”、;等。

此外,Web 应用系统接入数据库服务器使用的用户不应为系统管理员,用户角色应

遵循最小权限原则。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文