侧边栏壁纸
博主头像
Harry博主等级

沉迷学习,日渐消瘦

  • 累计撰写 16 篇文章
  • 累计创建 4 个标签
  • 累计收到 7 条评论
标签搜索

【WEB】安全性测试

Harry
2021-12-23 / 3 评论 / 0 点赞 / 543 阅读 / 8,215 字
温馨提示:
本文最后更新于 2022-03-02,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

WEB安全性测试

什么是安全测试?

安全测试是在IT软件产品的生命周期中,特别是产品开发基本完成到发布阶段,对产品进行检验以验证产品符合安全需求定义和产品质量标准的过程。

安全测试基本原则

  1. 培养正确的思维方式
  2. 尽早测试和经常测试
  3. 选择正确的测试工具
  4. 尽可能测试源代码
  5. 测试结果文档化

安全性测试目的

在一些有交互信息的网站及进行电子商务活动的网站,这些站点涉及银行账户、用户资料信息保密等问题,如果用户信息被黑客泄露,用户在进行交易时就不会有安全感,甚至造成严重后果。

安全性测试主要检验在系统中已存在的系统安全性、保密性措施是否发挥作用,主要包括以下几个方面的测试:目录设置SSL登录日志文件脚本语言

目录设置

WEB安全的第一步就是正确设置目录。每个目录下都应该有index.htmlmain.html页面
目录安全测试可以通过工具进行,如试用IBMAppScan工具扫描WEB系统中存在的目录安全问题

AppScan

AppScan是IBM的一款web安全扫描工具,可以利用爬虫技术进行网站安全渗透测试,根据网站入口自动对网页链接进行安全扫描,扫描之后会提供扫描报告和修复建议等。
AppScan有自己的用例库,版本越新用例库越全(用例库越全面,对漏洞的检测较全面,被测试系统的安全性则越高)

工作原理

  • 通过探索了解整个web页面结果
  • 通过分析,使用扫描规则库对修改的HTTP Request进行攻击尝试
  • 分析 Response 来验证是否存在安全漏洞

先扫描一下网站
image.pngimage.png
等待扫描完成
image.png
扫描完成后我们点击问题查看
image.png
问题按照严重程度划分,之后我们点击修正建议
image.png
我们继续查看第二个
image.png
image.png
继续查看第三个
image.png
image.png

SSL

为了让网站更加安全,避免不法分子盗用网站信息。所以,很多企业都开始给网站配置SSL证书
image.png当你看到浏览器上这个锁,便说明你的浏览器访问的网站使用了SSL

  • SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL记录协议和SSL握手协议。
  • TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS记录协议和TLS握手协议。TLS是HTTP与TCP协议之间的一层,通常TLS发生在TCP三次握手之后,此时进行TLS四次握手,然后再进行HTTP通信

在学习SSL之前,我们先了解HTTP与HTTPS

HTTP与HTTPS介绍

超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL/TLS协议,SSL/TLS依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

  • HTTP协议以明文方式发送内容,不提供任何方式的数据加密
  • HTTPS在HTTP的基础上加入了SSL/TLS协议,SSL/TLS依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密,要比HTTP协议安全
  • HTTPS协议是由SSL/TLS+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全
  • HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

HTTP与HTTPS的区别

  • HTTPS协议需要到CA申请证书,一般免费证书较少,因而需要一定费用
  • HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的SSL/TLS加密传输协议
  • HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443
  • HTTP的连接很简单,是无状态的;HTTPS协议是由SSL/TLS+HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全

HTTPS优点

  • 使用 HTTPS 协议可认证用户和服务器,确保数据发送到正确的客户机和服务器
  • HTTPS 协议是由 SSL+HTTP构建的可进行加密传输、身份认证的网络协议,要比 HTTP安全,可防止数据在传输过程中被窃取、改变,确保数据的完整性
  • HTTPS 是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本

HTTPS缺点

  • HTTPS 协议会使页面的加载时间延长近 50%,增加 10%到 20%的耗电。此外,HTTPS 协议还会影响缓存,增加数据开销和功耗
  • HTTPS 协议的安全是有范围的,在黑客攻击、拒绝服务攻击和服务器劫持等方面几乎起不到什么作用
  • SSL证书的信用链体系并不安全。特别是在某些国家可以控制 CA 根证书的情况下,中间人攻击一样可行
  • 成本增加。部署 HTTPS 后,因为 HTTPS 协议的工作要增加额外的计算资源消耗

客户端在使用HTTPS方式与WEB服务器通信时的步骤

我们现在知道了SSL是用户在交互信息的网站中使网站更加安全,可WEB服务器又是怎么使用SSL的呢?这就需要了解客户端在使用HTTPS方式与WEB服务器通信时的步骤:

  1. 客户端在使用HTTPS方式与Web服务器通信时的步骤
  2. Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端
  3. 客户端的浏览器与Web服务器开始协商SSL/TLS连接的安全等级,也就是信息加密的等级
  4. 客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站
  5. WEB服务器利用自己的私钥解密出会话密钥
  6. WEB服务器利用会话密钥加密与客户端之间的通信

加密类型

SSL使用的是非对称式加密,HTTP使用的是对称式加密。那什么是对称加密,什么是非对称式加密?

对称式加密
  • 采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,也就是说对称加密算法在加密和解密时使用的是同一个秘钥
非对称式加密
  • 客户端和服务端均拥有一个公有密匙和一个私有密匙。公有密匙可以对外暴露,而私有密匙只有自己可见
图片流程

图片2.png

非对称式加密优点
  • 非对称加密采用公有密匙和私有密匙的方式,解决了http中消息保密性问题,而且使得私有密匙泄露的风险降低
  • 因为公匙加密的消息只有对应的私匙才能解开,所以较大程度上保证了消息的来源性以及消息的准确性和完整性
非对称式加密缺点
  • 非对称加密的性能相对对称加密来说会慢上几倍甚至几百倍,比较消耗系统资源

现在我们再回头看SSL,是不是对SSL功能更清楚多了

SSL/TLS历史

  • 1994年,NetScape公司设计了SSL协议(Secure Sockets Layer)的1.0版,但是未发布。
  • 1995年,NetScape公司发布SSL 2.0版,很快发现有严重漏洞。
  • 1996年,SSL 3.0版问世,得到大规模应用。
  • 1999年,互联网标准化组织ISOC接替NetScape公司,发布了SSL的升级版TLS 1.0版。
  • 2006年和2008年,TLS进行了两次升级,分别为TLS 1.1版和TLS 1.2版。最新的变动是2011年TLS 1.2的修订版,在2018年也发布了TLS1.3版本。
    TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3。

目前应用的最广泛的 TLS 是 1.2,而之前的协议(TLS1.1/1.0、SSLv3/v2)都已经被认为是不安全的了

SSL/TLS协议的基本过程(TLS1.2)

  1. 客户端向服务器端索要并验证公钥。
  2. 双方协商生成"对话密钥"。
  3. 双方采用"对话密钥"进行加密通信。

模拟访问一个网站基本过程

  • client --> server ClientHello
  • 客户端生成随机数,并发送一组密码学套件供服务端选
  • server--> client ServerHello
  • 服务端生成随机数,并从上述密码学套件组里选一个
  • server--> client Certificate
  • 服务端发给客户端证书
  • server--> client ServerKeyExchange
  • 服务端发给客户端秘钥交换算法所需的值
  • server--> client ServerHelloDone
  • 服务端 hello 阶段结束
  • client --> server ClientKeyExchange
  • 客户端发给服务端秘钥交换算法所需的值pre_master
  • client --> server ChangeCipherSpec
  • 客户端告诉服务端,我已经知道秘钥了,之后的消息我就都加密发送了
  • client --> server Finish
  • 结束并验证
  • server --> server ChangeCipherSpec
  • 服务端告诉客户端,我已经知道秘钥了,之后的消息我就都加密发送了
  • server--> client Finish
  • 结束并验证

图片流程

1a98cc74c9d14a02883d8c1ce4e88098 3.png
第一张可能看不明白,下面这一张会更清楚一点图片1.png

为什么一定要用三个随机数,来生成"会话密钥"呢?

  • "不管是客户端还是服务器,都需要随机数,这样生成的密钥才不会每次都一样。由于SSL协议中证书是静态的,因此十分有必要引入一种随机因素来保证协商出来的密钥的随机性。
  • 对于RSA密钥交换算法来说,pre-master-key本身就是一个随机数,再加上hello消息中的随机数,三个随机数通过一个密钥导出器最终导出一个对称密钥。
  • pre master的存在在于SSL协议不信任每个主机都能产生完全随机的随机数,如果随机数不随机,那么pre master secret就有可能被猜出来,那么仅适用pre master secret作为密钥就不合适了,因此必须引入新的随机因素,那么客户端和服务器加上pre master secret三个随机数一同生成的密钥就不容易被猜出了,一个伪随机可能完全不随机,可是是三个伪随机就十分接近随机了,每增加一个自由度,随机性增加的可不是一。"
  • 此外,如果前一步,服务器要求客户端证书,客户端会在这一步发送证书及相关信息。

如何申请SSL?

首先需要选择一家权威安全可信的CA机构

  1. 生成并提交CSR(证书签署请求)文件
  2. CA机构进行验证
  3. CA机构颁发证书

注:CA是证书的签发机构,是负责签发证书、认证证书、管理已颁发证书的机关

登录

有些站点需要用户进行登录,以验证用户身份,同时要阻止非法用户登录

登录的主要测试内容

  • 测试用户名和输入密码是否有大小写区别
  • 测试用有效及无效的用户名和密码进行登录
  • 测试用户登录是否有次数限制,如果允许登录失败的次数为3此,则在第三次登录时输入正确用户名和口令,测试能否通过验证
  • 测试系统是否限制从某些IP地址登录的情况
  • 测试口令选择是否有规律限制
  • 测试哪些网页可以不进行登录而直接浏览
  • 测试WEB应用系统是否有超时的限制,也就是说,用户登录后在一定时间内(如15分钟)没有点击任何页面,是否需要重新登录才能正常使用

日志文件

为了保证WEB应用系统的安全性,日志文件至关重要,详细的日志记录可以帮助用户更迅速地诊断问题,加快对故障的响应。减少一些隐藏得非常深的错误。

日志文件的主要测试内容

  • 日志是否记录了所有的事务处理,在每个事务被处理时,CPU的占用率是否很高,是否有例外的进程占用
  • 是否记录失败的注册企图
  • 是否在每次事务完成的时候都进行保存
  • 是否记录IP地址
  • 是否记录用户名等

脚本语言

脚本语言是常见的安全隐患。每种语言的细节都有所不同,有些脚本允许访问根目录,其他脚本语言只允许访问邮件服务器。但是“经验丰富”的黑客可以将服务器用户名和口令发给自己,找出站点使用了哪些脚本语言,并研究该语言的缺陷。

常用的安全测试方法

  • 认证与授权
  • session和cookies
  • 文件上传漏洞
  • 缓存溢出漏洞
  • SQL注入漏洞
  • XSS跨站脚本攻击
  • DDos分布式拒绝服务攻击
  • CSRF攻击

本篇只讲SQL注入漏洞XSS跨站脚本攻击

SQL注入漏洞

SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息

SQL注入定义

SQL是操作数据库数据的结构化查询语言,网页的应用数据和后台数据库中的数据进行交互时会采用SQL。而SQL注入是将Web页面的原URL、表单域或数据包输入的参数,修改拼接成SQL语句,传递给Web服务器,进而传给数据库服务器以执行数据库命令。如Web应用程序的开发人员对用户所输入的数据或cookie等内容不进行过滤或验证(即存在注入点)就直接传输给数据库,就可能导致拼接的SQL被执行,获取对数据库的信息以及提权,发生SQL注入攻击。

SQL注入特点

  • 广泛性:任何一个基于SQL语言的数据库都可能被攻击,很多开发人员在编写Web应用程序时未对从输入参数、Web表单、cookie等接受到的值进行规范性验证和检测,通常会出现SQL注入漏洞
  • 隐蔽性:SQL注入语句一般都嵌入在普通的HTTP请求中,很难与正常语句区分开,所以当前许多防火墙都无法识别予以警告,而且SQL注入变种极多,攻击者可以调整攻击的参数,所以使用传统的方法防御SQL注入效果非常不理想
  • 危害大:攻击者通过SQL注入获取到服务器的库名、表名、字段名,从而获取到整个服务器中的数据,对网站用户的数据安全有极大的威胁。攻击者也可以通过获取到的数据,得到后台管理员的密码,然后对网页页面进行恶意篡改。这样不仅对数据库信息安全造成严重威胁,对整个数据库系统安全也影响重大
  • 操作方便:互联网上有很多SQL注入工具,简单易学,攻击过程简单,不需要专业知识也能自如运用

SQL注入原理

SQL注入攻击是通过操作输入来修改SQL语句,用以达到执行代码对WEB服务器进行攻击的方法。简单的说就是在post/getweb表单、输入域名或页面请求的查询字符串中插入SQL命令,最终使web服务器执行恶意命令的过程。可以通过一个例子简单说明SQL注入攻击。假设某网站页面显示时URL为 http://www.example.com?test=123 此时URL实际向服务器传递了值为123的变量test,这表明当前页面是对数据库进行动态查询的结果。由此,我们可以在URL中插入恶意的SQL语句并进行执行。另外,在网站开发过程中,开发人员使用动态字符串构造SQL语句,用来创建所需的应用,这种情况下SQL语句在程序的执行过程中被动态的构造使用,可以根据不同的条件产生不同的SQL语句,比如需要根据不同的要求来查询数据库中的字段。这样的开发过程其实为SQL注入攻击留下了很多的可乘之机

SQL注入过程

  1. SQL注入点探测
  2. 收集后台数据库信息
  3. 猜解用户名和密码
  4. 查找Web后台管理入口
  5. 入侵和破坏

SQL注入方法

由于编写程序时未对用户输入数据的合理性进行判断,导致攻击者能在SQL Injection的注入点中夹杂代码进行执行,并通过页面返回的提示,获取进行下一步攻击所需的信息。根据输入的参数,可将SQL注入方式大致分为两类:数字型注入字符型注入

  • 数字型注入:当输入的参数为整型时,如ID、年龄、页码等,如果存在注入漏洞,则可以认为是数字型注入。这种数字型注入最多出现在ASP、PHP等弱类型语言中,弱类型语言会自动推导变量类型,例如,参数id=8,PHP会自动推导变量id的数据类型为int类型,那么id=8 and 1=1,则会推导为string类型,这是弱类型语言的特性。而对于Java、C#这类强类型语言,如果试图把一个字符串转换为int类型,则会抛出异常,无法继续执行。所以,强类型的语言很少存在数字型注入漏洞
  • 字符型注入:当输入参数为字符串时,称为字符型。数字型与字符型注入最大的区别在于:数字型不需要单引号闭合,而字符串类型一般要使用单引号来闭合

SQL攻击常见语句含义

‘or 1=1 -- -

如果脚本正在执行一个SELECT指令,那么,攻击者可以强迫显示一个表格中的每一行记录-通过把一个例如"1=1"这样的条件注入到WHERE子句中,如下所示

SELECT * FROM wines WHERE variety = 'lagrein' OR 1=1;'

这本身可能是很有用的信息,因为它揭示了该表格的一般结构(这是一条普通的记录所不能实现的),以及潜在地显示包含机密信息的记录。
一条更新指令潜在地具有更直接的威胁。通过把其它属性放到SET子句中,一名攻击者可以修改当前被更新的记录中的任何字段,例如下面的例子

UPDATE wines SET type='red','vintage'='9999' WHERE variety = 'lagrein'

通过把一个例如1=1这样的恒真条件添加到一条更新指令的WHERE子句中,这种修改范围可以扩展到每一条记录,例如下面的例子

UPDATE wines SET type='red','vintage'='9999 WHERE variety = 'lagrein' OR 1=1;'

最危险的指令可能是DELETE-这是不难想像的。其注入技术与已经看到的相同-通过修改WHERE子句来扩展受影响的记录的范围,例如下面的例子

DELETE FROM wines WHERE variety = 'lagrein' OR 1=1;'

XSS跨站脚本攻击

网站中包含大量的动态内容以提高用户体验,比过去要复杂得多。所谓动态内容,就是根据用户环境和需要,Web应用程序能够输出相应的内容。动态站点会受到一种名为“跨站脚本攻击”(Cross Site Scripting, 安全专家们通常将其缩写成XSS,原本应当是css,但为了和层叠样式表(Cascading Style Sheet,CSS )有所区分,故称XSS)的威胁,而静态站点则完全不受其影响。

跨站脚本攻击(也称为XSS)指利用网站漏洞从用户那里恶意盗取信息

XSS攻击分类

人们经常将跨站脚本攻击(Cross Site Scripting)缩写为CSS,但这会与层叠样式表(Cascading Style Sheets, CSS)的缩写混淆。因此有人将跨站脚本攻击缩写为XSS。如果你听到有人说 “我发现了一个XSS漏洞”,显然他是在说跨站脚本攻击

XSS攻击类型

  • 持久型跨站:最直接的危害类型,跨站代码存储在服务器(数据库)
  • 非持久型跨站:反射型跨站脚本漏洞,最普遍的类型。用户访问服务器-跨站链接-返回跨站代码
  • DOM跨站(DOM XSS):DOM(document object model文档对象模型),客户端脚本处理逻辑导致的安全问题

常见安全测试工具

Web漏洞扫描工具——AppScan

AppScan是IBM公司出的一款Web应用安全测试工具,它采用黑盒测试方式,可以扫描常见的web应用安全漏洞

端口扫描工具——Nmap

Nmap是一个网络连接端口扫描工具,用来扫描网上计算机开放的网络连接端口。确定服务运行的端口,并且推断计算机运行的操作系统。它是网络管理员用以评估网络系统安全必备工具之一

Web渗透测试工具——Metasploit

Metasploit是一个渗透测试平台,能够查找、验证漏洞,并利用漏洞进行渗透攻击。它是一个开源项目,提供基础架构、内容和工具来执行渗透测试和广泛的安全审计

抓包工具——Fiddler

Fiddler是一个http协议调试代理工具,它以代理Web服务器形式工作,帮助用户记录计算机和Internet之间传递的所有HTTP(HTTPS)流量

渗透测试

什么是渗透测试?

渗透测试是利用模拟黑客攻击的方式,评估计算机网络系统安全性能的一种方法。这个过程是站在攻击者角度对系统的任何弱点、技术缺陷或漏洞的主动分析,并且有条件地主动利用安全漏洞。

渗透测试特点

  • 渗透测试是一个渐进的并且逐步深入的过程
  • 渗透测试是选择不影响业务系统正常运行的攻击方法进行的测试

渗透测试流程

  1. 明确目标
  2. 收集信息
  3. 扫描漏洞
  4. 验证漏洞
  5. 分析信息
  6. 渗透攻击
  7. 整理信息
  8. 编写测试报告
0

评论区