系统简介

近年来Web应用安全问题已经成为网络安全的一个焦点话题, 根据有关数据显示,大部分的Web应用都存在着安全问题。想想现在无处不在的Web应用服务:电子邮件、在线文档、在线网银等,入侵这些应用系统已经不仅仅是攻击者炫耀自己技术手段,背后也存在着巨大的经济利益。
尽管人们在服务器和网络上安装了防火墙和杀毒软件、并对传输的数据采取了加密处理等防护措施,但是我们并没有在真正意义上确保Web应用技术本身的安全。常见的Web攻击手段SQL注入就是企业通过分析程序的漏洞利用社会正常的连接对Web应用系统进行攻击。在防火墙或者IDS等网络层安全生产设备看起来是正常的访问链接,没有其他任何一个特征研究显示此次访问控制存在一些恶意攻击。访问一旦通过,后续的安全管理问题就不是防火墙可以有效应对的了。因此需要对Web应用进行有效的安全测试以确保Web应用的安全性和可靠性。
渗透测试作为一种通过模拟真实的网络黑客对系统进行渗透攻击并获取访问控制权,并发现系统中存在的漏洞和安全隐患,它可以让企业人员直观地了解当前存在的威胁和系统的安全强度,并对发现的漏洞进行修补和处理,从而避免企业造成重大损失。
针对上述问题,本文首先对Web应用安全现状进行分析,详细地阐述Web应用程序安全测试的流程和方法 ,并创建了两个简答的测试网站用来研究几种常见的Web应用安全漏洞:如SQL注入漏洞,跨站脚本(XSS)漏洞,文件上传漏洞等。
关键词:Web应用安全,渗透测试 ,SQL注入,XSS

第1章 绪论

1.1 研究背景和意义
随着互联网技术的高速发展,如今互联网已经进入了“应用为王”的时代,越来愈多的新型互联网应用与web技术紧密联系在一起,这些新型互联网应用给人们的生活带来便利的同时也给Web应用安全带来前所未有的安全隐患,Web应用安全问题由此成为了网络攻防领域近年来最炙手可热的关注点。
因此,确保Web应用程序的安全性和可靠性是必要的。但由于Web应用运行许环境十分复杂,导致Web应用程序经常出现安全问题,所以每当Web应用程序发布前,都需要经过详细的安全测试,确保它可以在复杂的网络环境中正常运行。所以,研究Web应用安全具有重要意义。
1.2 Web安全现状
针对web应用程序的安全问题,人们会在开发工作的各个层面布置适当的安全策略,比如在客户机安装杀毒软件来确保其安全运行,搭建Web服务器防火墙等方法来防止黑客入侵系统或者过滤掉一些带有攻击性的访问。这些防御措施虽然可以抵抗一些病毒入侵,但是要确保Web应用的安全这些措施还远远不够。由于服务器80端口是必须开放的,防火墙不能正确辨别从这两个端口传输进来的数据或者外来的访问是否安全,当带有攻击性的访问数据伪装成正常数据通过访问进入系统,Web应用就会暴露在攻击者面前,导致得后果将不堪设想。
近年来,Web攻击层出不穷,给人的感觉就是:Web应用相对于防护更加严格的操作系统来说,安全漏洞更多而且越容易被挖掘。互联网安全现状依然十分脆弱,据统计,大部分的攻击都是出现在Web应用自身的问题,由于现阶段Web应用存在着安全机制不够成熟,防火墙可绕过性,运行环境复杂,web应用开发人员缺乏充分的安全培训,修改Web应用时没法保证安全策略很好的实施等问题,导致Web应用渗透攻击每年呈现大幅度增长趋势。
1.3论文结构
本文一共分为5个章节,具体内容安排如下:
第1章 绪论 主要介绍本文的研究背景和研究意义,简要分析了Web应用安全的现状以及简单概括本论文的内容
第2章 渗透测试基础知识和测试流程 主要介绍了渗透测试的概念,详细地介绍了渗透测试的两种基本类型以及渗透测试的流程
第3章 设计渗透测试方案 简单介绍了如何创建渗透测试网站和渗透测试的工具以及渗透测试的方法。
第4章 渗透攻击过程 详细得演示了SQL注入攻击、XSS漏洞攻击以及文件上传攻击的过程,并针对这几个漏洞提出了相应的防御措施
第5章 总结 概括本文的主要研究内容Web渗透测试并提出论文的不足之处

第2章 Web应用渗透测试基础知识和流程

2.1 渗透测试的定义
渗透测试是指渗透测试工作人员通过采用与黑客相同的方式对目标企业进行渗透攻击,目的是检测目标存在的安全漏洞以及安全机制方面的隐患并提出有效改善的方法,最后输出渗透测试报告,并提交给网络公司所有者。网络所有者根据渗透测试报告,可以更加清楚地知道存在的安全问题和隐患。
2.2 渗透测试的分类
渗透测试按照分类可以分为两种基本类型:黑盒测试和白盒测试,而灰盒测试则是黑盒跟白盒测试的组合体,下面我们来详细介绍一下黑盒测试,白盒测试以及灰盒测试的概念。
黑盒测试:黑盒测试也称作外部测试,渗透测试人员在没有获得目标的任何内部信息的情况下通过外部网络对目标系统进行渗透攻击,完全模拟黑客的攻击的手段,发现目标系统或者网络存在的安全漏洞,然后测试这些安全漏洞是否被他人利用获取目标系统的控制权,漏洞是否对目标造成资产损失。
白盒测试:内部测试就是白盒测试,渗透测试人员在进行渗透测试前就已经对目标的内部信息了如指掌,可以对目标进行更有针对性的渗透测试,以便于消除更多目标存在的安全漏洞。
灰盒测试:灰盒测试时指渗透测试人员对目标的信息有一定的了解,但并不是像白盒测试那样了解目标的所有信息,它要求渗透测试人员将已经得到的目标信息进行评估,然后对目标进行渗透测试,进而得出最佳的安全修复方案。它结合了黑盒测试和白盒测试各自的优点,它往往可以使渗透测试工作达到更佳的效果。
2.3 渗透测试流程
经过详细的调查、研究、分析,针对web应用的渗透测试,大概可以分为前期与客户沟通阶段,情报收集阶段、威胁建模阶段、分析漏洞阶段,渗透攻击阶段 ,报告阶段6个主要阶段。
1.前期与客户的交流阶段
(1)在这个阶段渗透测试人员需要跟客户组织确定渗透测试的测试范围,如:是整个网站还是部分模块进行渗透测试,是否可以从外网对目标进行渗透测试,IP,域名等是否需要进行测试等
(2)渗透测试所需要的条件和限制规则
需要的条件:渗透测试者要找客户组织提供渗透测试所需要的权限和一些必要的信息。
限制条件:要与客户沟通好那些设备不能进行渗透测试,哪些技术不能应用,是否允许数据破坏。
2.情报收集阶段
这个阶段需要渗透测试团队利用各种方法和资源来获取测试目标的信息,比如对目标Web应用服务进行发现和剖析,服务器的域名,目标的IP地址和运行的操作系统,Web服务器端口和端口开放的服务,Web站点的类型和版本,Web应用程序的类型和版本,还有网站的目录结构,看看是否可以遍历目录。
3.威胁建模阶段
通过上面的情报收集获取到充足的情报信息后,渗透测试团队可以根据这些情报信息对渗透测试目标进行威胁建模和模拟渗透攻击的规划,威胁建模阶段在渗透测试过程扮演着非常重要的角色
4.漏洞分析阶段
在这个阶段,渗透测试人员需要对前面收集到的情报信息和漏洞信息,行汇总和分析,然后找到可以利用的漏洞和可以进行渗透攻击的地方,并在实验环境中对该漏洞进行验证。
5.渗透攻击阶段
在这个阶段渗透测试团队需要利用找到的安全漏洞通过绕开目标系统的安全机制的方式对Web应用程序进行渗透攻击。然后获取内部的信息,甚至可以对目标进行后渗透攻击来获取控制权限,登录凭证和其他重要的信息。这主要是向客户展示当前存在的目标会带来的风险。
6.报告阶段
渗透测试报告包含了整个渗透测试的过程,发现系统存在的漏洞,并针对漏洞说明目标系统存在的威胁和隐患最后针对目标系统存在问题提出修复方案,当前安全机制的改进建议等。

第3章 设计渗透测试方案

3.1 创建渗透测试网站
为了进行渗透测试,我们需要一个渗透测试网站,由于法律原因,我们不可以去攻击网络上的网站,所以需要创建一个网站用来进行渗透测试,这样做既合法,又可以在测试后深入学习如何加固自己的网站。
图1-1是我在虚拟机上选用了IIS+ASP方案创建了一个Web测试网站。
在这里插入图片描述

图 3-1 创建网站的页面
3.2 渗透测试工具
对Web网站渗透测试的工作是在一个能访问网站的虚拟机上实施的,渗透测试工作如果用手工操作的话会比较耗费时间和人力,但是有合适的辅助工具可以帮战我们大幅度提高渗透测试的效率。因此我们要安装一些渗透测试可能会用到的辅助工具比如Nessus漏洞扫描器,XSS攻击软件,SQL注入攻击软件等,如图1-2所示,我在攻击机上安装了的一些渗透测试辅助工具。
在这里插入图片描述

图3-2 渗透测试工具
3.3 渗透测试方法
本次渗透测试的方法是通过模拟黑客利用各种工具和方法对目标网站进行渗透攻击,以获取目标Web网站的用户名和密码,甚至网站所在服务器上的权限。在下一章,我会在一个有明显漏洞的Web网站演示一遍Web渗透测试过程。

第4章 Web渗透测试流程

4.1 查找Web网站漏洞
我们可以使用一些自动化扫描工具对Web网站进行漏洞扫描,也可以使用纯手工的方式对网站进行检测,下面使用手工的方式对上述创建的渗透测试网站进行SQL注入漏洞测试,看它是否存在SQL注入漏洞。
在这里插入图片描述

图 4-1 正常返回页面
在这里插入图片描述

洞。
4.2 SQL注入测试
(1)SQL注入的原理
SQL注入攻击指的攻击者通过构造SQL语句传入Web应用程序,获取攻击者想到得到的信息,这是由于Web应用程序没有对用户输入的数据进行严格的检索和输入限制,导致有威胁的数据入侵系统。
(2)SQL注入实验测试
下面我们可以利用该XSS漏洞,通过构造指定的SQL语句来获取该网站数据库管理员账号长度范围。图2-3所示,在链接http://www.xuanke.com/wz/list.asp?id==47后面插入SQL语句and 1=(select min(id)) from admin where len(username)>5),返回页面正确,说明管理员账号长度大于5位。
在这里插入图片描述

图4-3 正常返回页面
图2-4所示,在链接http://www.xuanke.com/wz/list.asp?id==47后面插入SQL语句and 1=(select min(id)) from admin where len(username)<10),页面显示正常,说明管理员账号长度小于10位。
在这里插入图片描述

                     图4-4 正常返回页面

上面已经知道用户名位数的范围,然后我们可以继续对用户名位数进行猜测,如图2-5所示,在链接http://www.xuanke.com/wz/list.asp?id==47后面插入SQL语句and 1=(select min(id)) from admin where len(username)=7),页面返回正确,说明管理员账号长度为7位。
在这里插入图片描述

                      图4-5 正常返回页面

下面我们可以用同样的方式对网站数据库密码位数进行猜测,如图2-6所示
在链接http://www.xuanke.com/wz/list.asp?id==47后面插入SQL语句and 1=(select min(id)) from admin where len(password)>5),页面返回正确,说明管理员密码长度大于5位。
在这里插入图片描述

图 4-6 页面返回正确

继续猜测用户密码的长度,如图2-8所示,在链接http://www.xuanke.com/wz/list.asp?id==47后面插入SQL语句and 1=(select min(id)) from admin where len(password)=8),页面返回错误,说明密码长度不是8位。
在这里插入图片描述

图4-8 错误返回页面

我们继续猜测用户的首字母,如图2-11所示,在链接http://www.xuanke.com/wz/list.asp?id==47后面插入SQL语句and 1=(select min(id)) from admin where mid(username,1,1)‘a’),页面返回正确,说明用户名的首字母是’a’。

在这里插入图片描述

图4-11 正确返回页面
接下来我们继续使用SQL语句猜测用户名的第二个字母是什么,如图2-12所
为了避免重复太多上述的步骤,根据上述的方法我得出用户名为adminri。然后接下来我们尝试把密码的首字母猜出来,根据图2-13所示,在链接http://www.xuanke.com/wz/list.asp?id==47后面插入SQL语句and 1=(select min(id)) from admin where mid(password,1,1)‘a’),页面返回正确。说明密码的第一位为‘a’。
在这里插入图片描述

图4-13 正确返回页面

继续猜测,如图2-15所示,出现管理员界面,猜测成功。

在这里插入图片描述

                       图4-15 管理员界面

我们使用账号密码登录管理后台
在这里插入图片描述

图4-16管理员登录页面

进入了管理后台界面,我们就可以获取里面的信息和修改里面的数据。
在这里插入图片描述

图4-17管理员后台页面
(3)实验总结
通过上述实验我们可以知道SQL注入攻击可以获取数据库的用户名和密码,不仅如此,利用SQL注入攻击还可以对网站进行篡改,远程控制服务器,所以面对此类漏洞,我们需要做许多防范措施,在下面4.4章节详细地介绍SQL注入的防范措施。
4.3 XSS跨站脚本漏洞测试
(1)XSS的定义
XSS又称作跨站脚本攻击。它指的是网络攻击者通过向没有对用户输入信息进行过滤的Web网页提交恶意脚本代码的方式进行恶意攻击,当其他用户浏览该页面,该页面中的恶意脚本代码就会被执行,进而达到恶意攻击的目的。
(2)XSS攻击的类型
目前XSS有三种形式:存储型XSS、反射性XSS以及基于DOM的XSS。
反射型XSS:当浏览器在HTTP请求参数或者HTML提交表单中提供的数据,被立即由服务器端脚本使用产生一个提供给该用户的结果页面,而缺乏恰当的请求数据安全验证和过滤,那么就会导致反射性XSS。
存储型XSS:通常作为一个恶意脚本长期存储在web应用中并作为一个内容展示给浏览的用户。
基于DOM的XSS:基于DOM的XSS是一种通过DOM操作前端代码输出的时候产生的问题。
(3)XSS的风险
1.XSS可以盗取用户的账号信息,如管理员账号,网银账号。
2.诱惑浏览器对钓鱼网站进行访问来获取目标用户的账户密码等信息
3.通过浏览器导向恶意网站向用户计算机植入后门程序。
(4)实验分析
我在Kali Linux利用MS12-004漏洞做了一个木马网站,如果带有XSS漏洞的
图3-23就是成功攻击后的页面,上面显示了用户的cookie值还有用户名和密码。
在这里插入图片描述

图4-41查看cookie值等信息
4.3 文件上传漏洞
(1)文件上传漏洞的定义
文件上传漏洞是指由于编写网站代码的人员没有对用户提交的数据进行过滤或者检验,导致用户可以通过修改过文件扩展名的方式来绕开扩展名的检验,将带有威胁的文件提交到Web应用当中,导致文件上传漏洞的产生。
(2)实验分析
首先我们在DVWA靶机上把安全等级设置为中级
在这里插入图片描述

图4-42设置DVWA安全等级

我们可以在网页的后台PHP代码可以看到有一个限制只能上传.jpg文件的代码。
在这里插入图片描述

图4-44查看网页代码
下面我们上传一个.jpg文件
在这里插入图片描述

图4-45上传.JPG文件
由上图4-4可以知道文件上传成功,接下来我们通过使用burpsuite代理绕开限制上传自己的文件。
我们首先打开火狐浏览器代理,设置好参数

实验总结:从上面的实验可以知道,文件上传漏洞是由于编写网站代码人员没有对访问用户提交的数据进行检测和过滤,导致该漏洞的产生,所以针对此类漏洞的防御方法通过看书跟在网上查阅资料可以概括为以下几点:
1.对文件进行重命名操作
2.对文件扩展名进行检测,避免服务器解析文件时使用非图片的格式。
3.检测文件的上传路径
4.尽量不要暴露文件上传后的路径,特别是在网站进行下载东西的时候
4.4 针对SQL注入的防护措施
SQL注入攻击漏洞是由于Web应用程序对用户输入的数据进行严格的转义字符过滤和类型检查而导致的,因此针对SQL注入攻击的防范措施主要是Web应用程序对输入参数类型的长度的进行检查与限制机制以及对用户输入中特殊字符进行严格的输入验证处理,下面是我总结出来的防范SQL注入攻击的几个方面:
(1)凡是外部的用户输入的数据,都要进行严格的检测处理
凡是程序外部的用户输入内容,采取“限制”,“拒绝”,“净化”的流程进行完备检测和过滤,对包含限制字符的查询应进行拒绝或者通过转义操作进行净化。
(2)使用类型安全的参数机制
在使用用户输入的参数进行构造动态SQL语句时,注意用户输入参数的类型安全,使用参数编码机制确保用户输入参数类型是安全的,在ADO,ADO .NET等大多数数据库访问API接口中,都可以明确指定参数确切类型,对目标输入数据的类型进行恰当地转义和编码,进而防止遭到SQL注入攻击。
(3)采取一系列安全措施来加强SQL数据服务器的配置与WEB应用程序的连接。如将敏感或者重要的数据进行加密处理存放在数据库中、Web应用程序连接数据库的查询操作权限应设置为最低权限,使用默认出错出现机制来代替默认出错提示等。
4.5 针对XSS跨网攻击的防护措施
从上面我们可以知道跨站脚本攻击是由于Web应用程序对用户输入的数据没有进行严格的审查和过滤所引起的,但是恶意脚本最终是在客户端的浏览器上执行的,受到威胁也是客户端,经过分析我认为对XSS脚本的防范措施可以分为服务器端和客户端两个方面:
服务器端方面的防范措施:
1.输入验证
对于用户输入的数据必须进行严格的验证和过滤操作,需要验证的数据的潜在特性,比如是否包含合法字符,是否含有JavaScript关键标签符号,数据与一个特殊的正规表达式相匹配等。另外就是尽可能对收到数据类型进行限制处理。避免它们被利用获取用户的信息。
2.消除危险的输入点
Web应用界面中有一些地方可以上传用户提交的数据信息,这样可能会让黑客有机可乘,因此,网站开发人员需要使用其他方法执行相应的功能。如避免在现有的JavaScript中插入用户输入的数据,还要检测输入的数据是否存在威胁。
客户端方面的防范措施:
跨站脚本最终是在客户端的浏览器上执行的,针对XSS漏洞攻击,我们需要提高浏览器访问网站的安全等级,将cookie调整为只读或者将cookie功能关闭。另外还可以采用其他非主流的安全浏览器的方式来尽量降低安全风险。

第5章 总结

随着WEB技术的高速发展,Web应用已经联系着人们生活中的方方面面,同时web应用领域成为了网络攻防的主战场,近年来,Web应用程序中被挖掘的安全漏洞始终占据着漏洞榜榜首,而针对Web网站的渗透攻击在因特网上比比皆是,成为了网络安全人员最大的困扰。
本文我通过搭建两个简单的测试网站进行渗透测试工作,由于水平有限,所用的技术比较简单,并没有涉及到最新的Web应用渗透测试技术,虽然比较完整实现了对网站的测试工作和详细地列举出各种漏洞的防护措施,但是还没有达到理想的要求,希望老师对我的论文加以指点并提出建议,。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐