输入/输出模块测试1-SQL注入测试

SQL注入测试

测试原理和方法

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 用户外所有用户的信息。这时可以判断存在字符型注入。

测试过程

攻击者确定疑似的数字型注入链接,按照数字型手工注入方式进行手工判断,若确定 存在漏洞后,可用手工注入方式查询数据或使用注入工具查询数据库数据,如下图所示。
image.png

数字型注入

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

步骤一:正常访问,查看页面,如下图所示。 在参数后加单引号或者%27,即可在参数后构造SQL语句。由于SQL语句单引号是成对出现的,添加单引号则SQL语句是错误的语句,不能被SQL解释器正常解析。访问报错 说明SQL语句执行了。

image.png

image.png

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

步骤三:添加and 1=2,并查看页面,如图所示。
image.png

如果发现与第二步完全不同,则可以证明存在数字型注入,利用专门的SQL注入工具 (如sqlmap)可以拥有数据库增、删、改、查权限,甚至可以执行系统命令、上传后门文 件等。sqlmap 工具下载使用说明详见其官网 http://sqlmap.org/,如图所示。
image.png

字符型注入

攻击者确定疑似的字符型注入链接,按照字符型手工注入方式进行手工判断,若确定 存在漏洞后,可用手工注入方式查询数据或使用注入工具查询数据库数据,如下图所示。
image.png

以网站http://xxx.weikeu.com/Organ!loadOrgs.shtml为例。 步骤一:正常访问,抓包并查看页面,如图所示。
image.png

在参数后加单引号或者%27(由于 SQL 语句单引号是成对出现的,添加单引号则 SQL语句是错误的语句,不能被SQL解释器正常解析。访问报错说明SQL语句执行了), 即可在参数后构造SQL语句,如图所示。
image.png

步骤二:添加’or‘1’=’1,查看页面,如图所示。
image.png

不仅查询出10100095的信息,所有信息都可以查询到,用sqlmap可以进一步验证漏 洞,如图所示。
image.png

以上两种注入都是基于报错信息手工测试和工具注入,还有基于时间、盲注、布尔型 等的注入,在这就不一一举例了。

修复建议

每个提交信息的客户端页面、通过服务器端脚本(JSP、ASP、ASPX、PHP等)生成的客户端页面、提交的表单(FORM)或发出的链接请求中包含的所有变量,必须对变量的值进行检查,过滤其中包含的特殊字符,或对字符进行转义处理。特殊字符如下。 · SQL语句关键词:如and、or、select、declare、update、xp_cmdshell; · SQL语句特殊符号:’、”、;等。 此外,Web 应用系统接入数据库服务器使用的用户不应为系统管理员,用户角色应 遵循最小权限原则。