APP下载

基于DVWA 平台的SQL 注入渗透测试*

2022-11-04虞菊花乔虹

科技与创新 2022年21期
关键词:数据表字段攻击者

虞菊花,乔虹

(常州信息职业技术学院网络空间安全学院,江苏常州 213164)

在信息化时代,万物皆可数据。互联网中的信息可以用指定的数据形式表征,该表征数据以不同的方式被存储,待使用者需要时再进行获取和处理。当然,最常见的便是将数据存储到数据库中。但是,随着网络安全问题越来越严重,数据库中的数据被不法分子通过各种技术手段非法窃取,成为了经常发生的恶性安全事件。

OWASP(Open Web Application Security Project,开放式Web 应用程序安全项目)组织发布的“十大安全漏洞列表”,具有较高的权威性。注入型漏洞在历年发布的漏洞列表中都是榜上有名的,其中,SQL 注入漏洞是导致数据泄露的主要原因之一。为了研究SQL注入漏洞,像OWASP 研制的WebGoat、RandomStorm公司的开源项目DVWA 是漏洞分析和渗透测试实战的首选[1]。

本文基于SQL 注入的工作原理,在DVWA 开源平台的漏洞测试环境中进行SQL 注入渗透测试实战,并根据SQL 注入初级渗透测试的流程,明确SQL 注入攻击的实现方式,最后探索SQL 注入漏洞的防护方法。

1 DVWA 平台概述

DVWA(Damn Vulnerable Web App,非常脆弱的Web 应用)存在着各种各样的漏洞。在正式的生产环境中,安全技术人员如果对真实的上线网站进行各种漏洞的渗透测试,会触犯现存的网络安全法律法规,因此,安全相关从业人员需要一个合法的实战环境来测试自己的技能和工具。DVWA 的出现就很好地解决了这个问题,为安全人员提供了一个渗透测试环境,让其自主练习,助其更好地理解各个漏洞的产生原理,以更好地防范各类攻击的发生。

DVWA 的Web 应用后端使用PHP 语言开发的,并且使用MySQL 数据库存储网站中的数据。该平台主要包括暴力破解、命令注入、跨站请求伪造CSRF、文件包含、文件上传、不安全的验证码、SQL 注入、SQL盲注、反射型跨站脚本XSS、存储型跨站脚本XSS 共10 个经典模块以供使用者对学习的技能进行验证。

2 SQL 注入工作原理

SQL 注入指攻击者通过拼接正常的用户输入构造特殊的SQL 语句,该语句通过HTTP 请求被传输到后端服务器,服务器在逻辑处理时没有对其进行严格的检验,导致SQL 语句传输到数据库服务器中被执行,攻击者获取到了恶意SQL 语句执行后的结果,得到了相应的数据信息[2]。

攻击者在正常的Web 应用访问寻找SQL注入的用户输入点,如URL 参数、页面表单的文本框等。在SQL 注入点的原输入参数中拼接SQL 语句,从而构造恶意的SQL 语句,实现攻击者的目的;该语句随着HTTP 请求发送到Web 服务器,Web 服务器处理后直接将其发给数据库服务器执行;数据库服务器接收到SQL 语句后执行该语句,并向Web 服务器返回执行后的结果;Web 服务器将结果返回给攻击者,攻击者就看到了自己构造的SQL 语句执行后的信息,获取到了相应的数据,或者根据执行结果进行下一步的攻击。

SQL 注入主要分为2 种类型,数字型注入和字符型注入。数字型类型是指用户输入的参数为数值型,在类似PHP 的弱类型语言中,数字型SQL 注入类型较为常见,如常用的查询指定ⅠD 的SQL 语句“SELECT*FROM TABLE WHERE id=3”;字符型类型是指用户输入的参数为字符串,如常用的查询指定用户名的SQL 语句“SELECT * FROM TABLE WHERE user='admin'”。由2 个示例语句可以看到,2 个SQL 注入类型最大区别在于是否用单引号将参数闭合。

3 SQL 注入渗透测试

DVWA平台的SQL注入不同等级的渗透测试流程都是相同的,本文以SQL 注入初级为例,如图1 所示。

图1 SQL 注入渗透测试流程图

SQL 注入渗透测试需要在Web 页面中现查找注入点,如搜索框、用户名和密码的文本框、URL 等,判断是否存在SQL 注入漏洞;找到SQL 注入点后,判断SQL 注入是数字型还是字符型的注入;根据SQL 注入类型判断的结果,在正常的用户输入参数后,使用特定的方式拼接构造SQL 语句获取当前数据库的数据库名;获取数据库名后,构造SQL 语句获取当前数据库的所有数据表的表名;根据表名判断,获取指定表所有字段的字段名;最后,获取指定字段对应的数据[3]。当然,部分数据是加密的,需要解密后才能看到原始数据。

3.1 查找注入点

初级SQL 注入的页面是一个查找指定用户ⅠD 的用户信息的界面,只需要输入用户的ⅠD,则会显示用户的“First name”和“Surname”。在页面的文本框中输入“2'”,页面返回报错提示信息,表明单引号被带入SQL 语句中被执行了,即SQL 注入漏洞可能是存在的。用户ⅠD 参数的输入文本框为SQL 注入点。

3.2 判断SQL 注入类型

SQL 注入可能是数字型的,也可能是字符型的,不同的类型对应的SQL 语句构造方式不同,需要通过永真条件“1=1”来判断SQL 注入的类型。输入“2'or 1=1#”,页面返回了所用用户的信息。这说明原参数存在闭合的成对单引号,右侧的单引号被“#”注释了,左侧的单引号被数字2 后的单引号闭合,输入参数闭合后正确执行了该语句,因此,该SQL 注入为字符型注入。

3.3 获取数据库名

基于SQL 注入点和注入类型的判断结果,就可以开始构造获取数据库相关信息的SQL 语句。首先获取的是当前数据库的数据库名。

获取数据库名的路径为:首先考虑使用MySQL数据库中的database()函数获取数据库名,使用该函数就需要使用union 语句,使用union 语句就需要该语句前后两个SELECT 子句的字段数相同。由于页面显示了每个用户的“First name”和“Surname”,可判断SELECT 语句可能是2 个字段。因此,输入“2'union select 1,database()#”,页面在用户的“Surname”即第2个字段处显示了“dvwa”,表明union 前的select 子句确实是2 个字段,当前数据库名为“dvwa”。

3.4 获取数据表名

获取数据库名后就可以构造SQL 语句获取该数据库的所有数据表名。

MySQL 数据库中没有函数能够获取所有数据表的名称,因此,考虑通过MySQL 数据库的默认数据库information_schema 的TABLES 表来获取指定数据库“dvwa”的数据表名。TABLES 表存储了所有数据库对应的所有数据表名,表中的“TABLE_SCHEMA”字段为数据库名,“TABLE_NAME”字段为数据表名。因此,使用MySQL 数据库的group_concat()函数将所有的数据表名连接显示,结合union语句,输入“2'union select 1, group_concat(table_name) from information_schema.tables where table_schema='dvwa'#”,页面在用户的“Surname”处显示了“guestbook,users”,表明“dvwa”数据库中有2 个表,分别为“guestbook”和“users”。

3.5 获取字段名

从获取到的数据表名“guestbook”和“users”,可以知道,首先猜解的应该是“users”表中的数据。因此,接下来,获取users 表中的所有字段名。

与获取数据表名类似,使用information_schema数据库的COLUMNS 表来获取指定数据表“users”的字段名。COLUMNS 表存储了所有数据表对应的所有字段名,表中的“TABLE_NAME”字段为数据表名,“COLUMN_NAME”字段为字段名。因此,输入“2'union select 1,group_concat (column_name) from information_schema.columns where table_name='users'#”,页面在“Surname”处显示了所有字段名连接后的字符串,观察该字符串可以看到,较为关注的字段是“user”和“password”。

3.6 获取数据

一般情况下,攻击者只关注部分字段对应的数据,如用户名、密码、身份证号码等,因此,接下来只获取“user”和“password”对应的数据,输入“2'union select user,password from users#”,显示了数据库中所有用户名和MD5 加密后的密码。通过在线网站或者加解密工具来进行解密,如admin 的密码通过CMD5 在线网站解密,可以得到为“password”。攻击者获取Web应用的管理员账号密码后,就可以进行后续的攻击行为。

4 SQL 注入漏洞的防护

SQL 注入漏洞产生需要2 个条件:攻击者能够控制输入参数;恶意构造的SQL 语句被执行。只要阻止这2 个条件中的任意一个发生,就可以有效防范Web应用中的SQL 注入攻击[4]。

严格过滤输入的参数或对输入进行数据验证,是常用的防护方法之一。如:在输入邮箱时,使用正则表达式进行匹配,不满足邮箱格式的字符串都被过滤;在输入用户ⅠD 时,用户只能在文本框中输入数字,不能输入字符串。

采用SQL语句预编译是目前较好的SQL注入防护方法[5]。预编译保证SQL 语句的语法结构不被改变,即使用户构造了拼接后的恶意语句,也只会被当作字符串处理,不会被当作SQL 命令被执行。

5 结束语

不法分子通过SQL 注入攻击获取数据库中存储的数据,给Web 应用的维护者和使用者都带来了信息安全的困扰。基于DVWA 平台的SQL 注入渗透测试,明确了SQL 注入的工作原理,系统地实现了注入流程,并提出了相应的防护方法。但是,在实际的Web 应用中,业务更复杂、攻击方式更多变,需要持续更新技术技能,才能更好地应对各种网络安全事件的发生。

猜你喜欢

数据表字段攻击者
基于贝叶斯博弈的防御资源调配模型研究
带钩或不带钩选择方框批量自动换
湖北省新冠肺炎疫情数据表(2.26-3.25)
湖北省新冠肺炎疫情数据表
湖北省新冠肺炎疫情数据表
正面迎接批判
正面迎接批判
无正题名文献著录方法评述
无正题名文献著录方法评述