基于Web渗透测试的SQL注入研究

2018-12-10 02:59曾佩璇汤艳君钱丽纳
网络安全技术与应用 2018年12期
关键词:攻击者语句漏洞

◆曾佩璇 汤艳君 钱丽纳



基于Web渗透测试的SQL注入研究

◆曾佩璇 汤艳君 钱丽纳

(中国刑事警察学院 辽宁 110854)

在大数据时代的背景下,互联网安全问题受到重视,网络数据安全也面临威胁和挑战。本文对渗透测试技术的过程、分类进行了介绍,系统分析了SQL注入常用的攻击方式以及具体实现的方法。

Web;渗透测试;SQL注入

0 引言

随着计算信息技术的迅猛发展,计算机和互联网的应用越来越广泛。与此同时,不法分子以互联网为平台,利用网络技术手段攻击Web网站,以达到窃取网站数据、篡改网页内容或劫持网页等目的。在多种Web安全威胁中,sql注入攻击影响较大。在Web网站的开发过程中,由于开发者的疏忽、不严谨,没有过滤掉用户所输入的不良信息,导致SQL注入漏洞在Web系统中很常见且对Web安全威胁很高。[1]

1 渗透测试技术简介

渗透测试指的是对受测试系统进行模拟入侵攻击,对其安全性进行评估。[2]该测试主要用来帮助用户发现其管理的系统中潜在安全漏洞并且能直观、动态地将攻击过程展示给用户,使用户充分了解他们当前管理的系统的安全状况。渗透攻击要求攻击者不仅需要有强大的攻击手段,还需要有丰富的经验进行合理判断,其中常用的攻击方法包括脚本注入式攻击、ARP 欺骗攻击、后门攻击等。[3]

渗透测试的过程如图1所示。

图1 渗透测试过程示意图

1.1 明确目标

主要明确测试目标的范围,比如ip地址、域名、内外网等。然后确定规则,测试其能渗透到哪种程度,能否直接修改进行上传,确定能不能提取相关权限。最后根据漏洞的类型,比如web应用的漏洞(新上线程序)、人员权限管理漏洞等,来确定具体的需求。

1.2 信息收集

信息收集主要利用主动扫描和开放搜索的方式获取所需要的重要信息。包括基础信息(ip,网段,域名等)、系统信息、应用信息(web应用,邮件应用等)、版本信息、人员信息(域名注册人员信息,web应用中网站发帖人的id等)、防护信息。

1.3 获取所需要的信息

基础信息包括网络连接、基础设施的相关内容。随后进一步进行渗透,入侵内网,找到敏感信息。也可以一直进行渗透,但一般不建议。主要是通过添加管理账号(容易被发现),驻扎手法等。最后将相关日志痕迹,上传的文件进行清理还原。

1.4 信息整理

信息管理主要是整理渗透工具,渗透过程中收集的信息与发现的漏洞信息。主要包括渗透过程中用到的代码,poc,exp等,收集到的一切重要以及遇到的各种漏洞,各种位置信息。

2 渗透测试的分类

2.1 方法分类

(1)黑箱测试

黑箱测试指的是攻击者对于受测试目标的情况没有任何了解,对受测试目标进行远程攻击,测评网络的安全性,并讨论相关解决方案。黑箱测试的初始信息主要源自邮件、DNS信息以及多种对外开放的服务器等。

(2)白盒测试

白盒测试是一种完全内部测试,这种测试对受测试目标的情况有着较为全面的了解,如受测试目标的相关服务版本、网络拓扑结构、程序代码等重要信息。[4]然后通过扫描、验证测试等手段,对受测试目标进行检验测评,发现问题。因此白盒测试相对黑盒测试实用性更高,目的性更强,花费代价也相对来说较小。

2.2 目标分类

渗透测试的目标主要有四类,分别为操作系统、网络设备、应用程序、数据库。[5]操作系统渗透测试主要针对的是Windows、Mac OS、Linux等主机系统。当渗透测试的目标是网络设备时,主要内容包括防火墙、入侵检测系统,路由器以及交换机等。应用程序渗透测试的目标是安装在受测试目标上的各种软件、应用。数据库渗透测试的目标是各种主流数据库,如MySql、SQLite、Oracle、MS SQL Server、Access等。

3 SQL注入攻击概述

3.1 SQL注入攻击原理

Web前端与后台数据库的交互是通过传递请求与应答消息来实现的。这一前后端分离机制为Web网站带来了很强的灵活性的同时,也留下了安全隐患——前端与后端之间的传递的消息命令有可能被恶意修改。SQL注入就是恶意攻击者利用这一漏洞,将特定的SQL语句插入到数据库查询代码中,根据程序返回的结果,获得某些他想得知的数据(如用户名、密码等)。[6]SQL注入的前提是Web网站对输入的参数不进行检查和过滤。

图2 SQL注入攻击原理示意图

3.2 SQL注入类型

(1)SQL常规注入

攻击者执行恶意SQL语句,分析系统回应的报错消息,从中分析提取有用的信息,这些信息包含数据库表名、数据库类型等。

(2)SQL盲注

SQL盲注是指攻击者实施攻击之后,无法看到系统返回的错误内容,其必须利用其他的方法进行判断。因为此特点,所以这种注入才叫做“盲注入”,具体方法是利用服务端返回的“TRUE/FALSE”进行推测。当系统返回错误信息时,SQL常规方法的效率更高,但如果系统屏蔽了错误信息,盲注便能发挥出作用。[7]

3.3 SQL注入的步骤

(1)SQL注入判断

使用动态页面(静态的HTML网页则没有这个)或使用数据库调用(参数传递)的Web网站往往存在SQL注入漏洞。动态架构Web网站的数据存储于后台数据库,当打开某一个网页时,Web服务器会根据Web前端传递过来的参数在后台数据库中进行查询然后返回数据。因此,形如:http://xxx.xxx.xxx/xxx.asp?id=xxx等带有参数的动态网页中很可能存在SQL注入漏洞。

(2)寻找SQL注入点

在对Web网站发起SQL注入攻击之前,需要寻找SQL注入漏洞的所在位置,也就是寻找所谓的SQL注入点。网站的数据填写页面、信息查找页面或登录页面等,这些页面中的可以查找或修改数据的位置一般有SQL注入点。判断某个Web链接有没有SQL注入点,可以通过对其传入的可控参数进行简单的构造,通过服务端的返回信息进行判断是否有SQL注入点。

(3)判断数据库类型

Web网站的架设方式有很多种,ASP最常搭配Access或SQL Server数据库,PHP一般搭配MySql数据库,JSP则经常搭配Oracle数据库。对于不同的数据库,其注入的方法、函数都存在着不同点。需要先了解目标Web网站使用的数据库的类型再进行注入操作。

(4)实施注入并提升权限

攻击者获取到足够的信息(注入点、数据库类型等)之后,构造SQL注入语句进行注入尝试。在注入攻击成功后,获取到数据库的账户密码等信息,然后利用账户密码登录Web后台,使用上传木马、webshell等手段,提升自身权限,设置后门。

3.4 SQL注入攻击方式

目前,SQL注入攻击包括有四种广泛使用的攻击方法,分别是:使用服务器变量注入、利用Cookie注入、用户输入注入和二阶注入。[8]下面对这四种形式的攻击进行简要介绍:

(1)利用服务器变量注入

服务器变量主要指环境网络、消息报头、及HTTP中包含的变量。如果不对Web前端向后端服务器提交的数据请求执行过滤,那么使用服务器变量生成的SQL语句将被发送到数据库端,攻击者可以修改HTTP及网络消息的报头值,然后构造修改SQL语句,实施SQL注入。

(2)利用Cookie注入

Cookie用途是当用户浏览网站需要登录账户时,可以将登录名、密码以加密的形式进行记录下来。当再次浏览同一网页时,将自动登录并反馈给用户。Cookies 给用户提供极大便利的同时,如果攻击者获取到Web网站的Cookie信息,使用Cookie中的信息构造SQL查询语句,然后将SQL注入攻击插入Cookie一起上传发动SQL注入攻击,还会导致用户个人隐私遭到泄露。

(3)利用用户输入注入

用户输入注入方式主要是利用GET方法与POST请求两种方式提交SQL注入语句。GET方法主要是利用搜索或者直接输入网站域名,在该链接中可以直接看到其包含的参数。此时攻击方可对用户访问或输入的域名中的参数进行修改,执行攻击。但POST方式不会显示参数,需要进行报文的截获加上专门的修改工具才能够完成SQL注入。

(4)二阶注入

二阶注入与一阶注入相关,它们造成的伤害是一致的,都允许攻击者访问数据库。二阶注入是一种触发型攻击,攻击者提交两个或两个以上的请求,将恶意数据上传到数据库中,一旦这些数据被使用,则攻击被触发。且二阶注入很微妙,主要依靠测试人员对该系统功能设置有充分了解以及对经常出错的位置能够进行经验判断,但经验判断不能代表测试结果。

4 基于Web渗透测试的SQL注入的实现

SQL注入攻击者经常采用盲注的方法进行手动攻击。SQL盲注不能直接获得后台的数据库信息,需要根据多种检测手段(例如基于报错的检测、布尔检测等)返回的信息来进行分析判断。然后构造SQL注入语句获取数据库信息,获得权限,进行上传木马、设置后门等操作。SQL手动注入的信息收集、分析、利用过程,也是Web渗透测试的一种应用。SQL手动注入攻击示意图如图2。

图2 手动注入攻击流程示意图

4.1 SQL注入过程之寻找注入点

使用metasploitable2为靶机,寻找SQL注入攻击点。metasploitable是一个基于metasploit框架的的靶机,它自身带有多种安全漏洞,可以提供可靠的渗透测试环境。使用kali作为发起攻击端。kali系统中自带的BurpSuit是一个功能强大的渗透测试工具,可以用来实施SQL注入攻击。开启metasploitable2的DVWA服务,设置其安全级别为“Low”。第一步采用基于报错的检测方法,在DVWA的输入框中输入英文字符单引号“’”,点击“Submit”提交,返回报错信息“You have an error in your SQL syntax...”;第二步,依次输入基于布尔检测的两条语句1’ and ‘1’=’1和1’ and ‘1’=’2,若提交后这两条语句返回的结果不同,则可以判断此处存在SQL注入漏洞;第三步可使用order by语句判断字段数,例如,输入1′ or 1=1 order by 3 时报错,改为1′ or 1=1 order by 2时未报错,即可判定该注入点执行的SQL查询语句中存在两个字段。

4.2 获取数据库账户密码

在本次实验中,使用布尔检测,输入order by 8后,页面返回正常结果,说明数据库表的列数为8列,有8个字段。接下来进一步分析判断,使用联合查询,输入“and 1=2 union select 1,2,3,4,5,6,7,8--”,显示除该数据库列的具体位置。之后,再使用一次union联合查询,输入“union select user,password from users—”,数据库中的表名都被查询出来了。复制表名信息到text文本文档。最后,再使用kali的John the Ripper快速密码破解程序进行密码爆破。密码破解结果如下图3所示。

图3 账号密码破解成功案例图

4.3 手动账号密码猜解

使用kali密码破解时,可能会出现破解不成功的情况。可以换一种思路,采用手动猜解的方式获取账号和密码。使用update语句。输入update users set user=“1234”where user=”admin”,接下来使用kali系统中的数据库连接工具hexorbase,进入靶机后台数据库后在输入框中输入上述的SQL注入语句后,显示示successfully executed query。之后在DVWA输入框中输入刚更改的账号信息,登录并进行验证。

5 结束语

SQL注入是一种常见的渗透技术,对网络安全的威胁很高。通过对Web渗透测试与手动SQL注入的研究,可以对SQL注入攻击的原理、步骤有更加深入的理解。SQL注入攻击虽然手段成熟隐蔽,但通过分析Web网站的服务器日志、数据库日志等信息,可以追溯到攻击源。[9]打击SQL注入这一恶意攻击行为,维护网络安全,这将是接下来研究的重点。

[1]罗丽红,柯灵,杨华琼.web安全之SQL注入漏洞及其防御[J].网络安全技术与应用,2017(11):81-82.

[2]魏星. 基于手工SQL注入的Web渗透测试技术研究[D].中北大学,2015.

[3]徐光.基于Kali Linux的Web渗透测试研究[J].信息安全与技术,2015,6(03):56-58.

[4]常艳,王冠.网络安全渗透测试研究[J].信息网络安全,2012(11):3-4.

[5]蔡凯. WLAN安全协议测试技术与系统实现[D].西安电子科技大学,2011.

[6]高洪涛.SQL注入攻击途径及策略分析[J].网络安全技术与应用,2011(03):14-16.

[7]刘合叶. 多功能SQL注入检测系统的实现及攻击防范方法研究[D].北京交通大学,2009.

[8]郭轶. 基于渗透测试的SQL注入漏洞检测及防范技术研究[D].哈尔滨工程大学,2016.

[9]金涛,张启翔.基于SQL注入的Web渗透技术取证方法的研究[J].网络空间安全,2017,8(Z3):55-58.

猜你喜欢
攻击者语句漏洞
漏洞
机动能力受限的目标-攻击-防御定性微分对策
重点:语句衔接
正面迎接批判
三明:“两票制”堵住加价漏洞
漏洞在哪儿
高铁急救应补齐三漏洞
有限次重复博弈下的网络攻击行为研究
我喜欢
作文语句实录