7.1 SQL 注入测试
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论