安全测试 – 快速指南
安全测试 – 快速指南
安全测试 – 概述
安全测试对于保护系统免受网络上的恶意活动非常重要。
什么是安全测试?
安全测试是一种测试技术,用于确定信息系统是否按预期保护数据和维护功能。安全测试并不能保证系统的完全安全,但将安全测试作为测试过程的一部分很重要。
安全测试采取以下六项措施来提供安全的环境 –
-
机密性– 它可以防止向非预期接收者披露信息。
-
完整性– 它允许将准确和正确的所需信息从发送者传输到预期接收者。
-
身份验证– 它验证并确认用户的身份。
-
授权– 它指定对用户和资源的访问权限。
-
可用性– 它确保有关要求的信息准备就绪。
-
不可否认性– 它确保发送方或接收方不会拒绝发送或接收消息。
例子
发现基于 Web 的应用程序中的安全漏洞涉及复杂的步骤和创造性思维。有时,简单的测试可能会暴露最严重的安全风险。您可以在任何 Web 应用程序上尝试这个非常基本的测试 –
-
使用有效凭据登录 Web 应用程序。
-
注销 Web 应用程序。
-
单击浏览器的返回按钮。
-
验证是否要求您再次登录,或者您是否可以再次返回登录页面。
安全测试 – 流程
安全测试可以看作是对系统的受控攻击,它以现实的方式发现安全漏洞。其目标是评估 IT 系统的当前状态。它也被称为渗透测试或更普遍地称为道德黑客。
渗透测试是分阶段完成的,在本章中,我们将讨论完整的过程。应该在每个阶段完成适当的文档记录,以便可以随时使用重现攻击所需的所有步骤。该文档还可作为客户在渗透测试结束时收到的详细报告的基础。
渗透测试 – 工作流程
渗透测试包括四个主要阶段 –
这四个步骤重复多次,与正常的 SDLC 相辅相成。
安全测试 – 恶意软件
恶意软件 (malware) 是指任何可以让攻击者/恶意软件创建者对系统进行部分或完全控制的软件。
恶意软件
下面列出了各种形式的恶意软件 –
-
病毒– 病毒是一种创建自身副本并将这些副本插入其他计算机程序、数据文件或硬盘引导扇区的程序。成功复制后,病毒会在受感染的主机上引发有害活动,例如窃取硬盘空间或 CPU 时间。
-
蠕虫– 蠕虫是一种恶意软件,它会在其路径中的每台计算机的内存中保留其自身的副本。
-
特洛伊木马– 特洛伊木马是一种非自我复制类型的恶意软件,其中包含恶意代码,执行后会导致数据丢失或被盗或可能对系统造成损害。
-
广告软件– 广告软件,也称为免费软件或宣传软件,是一种免费的计算机软件,其中包含游戏、桌面工具栏和实用程序的商业广告。它是一个基于 Web 的应用程序,它收集 Web 浏览器数据以定位广告,尤其是弹出窗口。
-
间谍软件– 间谍软件是匿名监控用户的渗透软件,它使黑客能够从用户的计算机获取敏感信息。间谍软件利用用户和应用程序漏洞,这些漏洞通常附加在免费在线软件下载或用户单击的链接上。
-
Rootkit – Rootkit 是黑客用来获得对计算机/网络的管理员级别访问权限的软件,该软件通过窃取的密码或在受害者不知情的情况下利用系统漏洞进行安装。
预防措施
可以采取以下措施来避免系统中存在恶意软件 –
-
确保操作系统和应用程序是最新的补丁/更新。
-
永远不要打开陌生的电子邮件,尤其是带有附件的电子邮件。
-
当您从 Internet 下载时,请始终检查您安装的内容。不要简单地单击“确定”来关闭弹出窗口。在安装应用程序之前验证发布者。
-
安装杀毒软件。
-
确保定期扫描和更新防病毒程序。
-
安装防火墙。
-
始终启用和使用浏览器和应用程序提供的安全功能。
反恶意软件
以下软件有助于从系统中删除恶意软件 –
- 微软安全必备
- 微软视窗防御者
- AVG 网络安全
- Spybot – 搜索和销毁
- 阿瓦斯特!家庭版供个人使用
- 熊猫网络安全
- 用于 Mac OS 和 Mac OS X 的 MacScan
安全测试 – HTTP 协议基础
了解协议对于掌握安全测试非常重要。当我们拦截 Web 服务器和客户端之间的数据包数据时,您将能够理解协议的重要性。
HTTP 协议
超文本传输协议 (HTTP) 是一种用于分布式协作超媒体信息系统的应用程序级协议。这是自 1990 年以来万维网数据通信的基础。 HTTP 是一种通用的无状态协议,可用于其他目的以及使用其请求方法、错误代码和标头的扩展。
基本上,HTTP 是一种基于 TCP/IP 的通信协议,用于通过 Web 传送 HTML 文件、图像文件、查询结果等数据。它为计算机相互通信提供了一种标准化的方式。HTTP 规范指定客户端请求的数据如何发送到服务器,以及服务器如何响应这些请求。
基本功能
以下三个基本特性使 HTTP 成为一个简单而强大的协议 –
-
HTTP 是无连接的– HTTP 客户端,即浏览器发起 HTTP 请求。发出请求后,客户端与服务器断开连接并等待响应。服务器处理请求并重新建立与客户端的连接以发回响应。
-
HTTP 是媒体独立的– 只要客户端和服务器都知道如何处理数据内容,任何类型的数据都可以通过 HTTP 发送。这是客户端和服务器使用适当的 MIME 类型指定内容类型所必需的。
-
HTTP 是无状态的– HTTP 是无连接的,这是 HTTP 是无状态协议的直接结果。服务器和客户端仅在当前请求期间相互了解。后来,两个人都忘记了对方。由于协议的这种性质,客户端和浏览器都不能在跨网页的不同请求之间保留信息。
HTTP/1.0 为每个请求/响应交换使用一个新连接,而 HTTP/1.1 连接可用于一个或多个请求/响应交换。
建筑学
下图显示了 Web 应用程序的一个非常基本的架构,并描述了 HTTP 所在的位置 –
HTTP 协议是一种基于客户端/服务器架构的请求/响应协议,其中 Web 浏览器、机器人和搜索引擎等充当 HTTP 客户端,Web 服务器充当服务器。
-
客户端– HTTP 客户端以请求方法、URI 和协议版本的形式向服务器发送请求,然后是类似 MIME 的消息,其中包含请求修饰符、客户端信息和通过 TCP/IP 连接可能的正文内容。
-
服务器– HTTP 服务器以状态行响应,包括消息的协议版本和成功或错误代码,然后是类似 MIME 的消息,其中包含服务器信息、实体元信息和可能的实体正文内容。
HTTP – 缺点
-
HTTP 不是一个完全安全的协议。
-
HTTP 使用端口 80 作为默认端口进行通信。
-
HTTP 在应用层运行。它需要为数据传输创建多个连接,这增加了管理开销。
-
使用 HTTP 不需要加密/数字证书。
Http协议详情
为了深入了解 HTTP 协议,请单击以下每个链接。
安全测试 – HTTPS 协议基础
HTTPS(基于安全套接字层的超文本传输协议)或基于 SSL 的 HTTP 是 Netscape 开发的 Web 协议。它不是一个协议,而只是在 SSL/TLS(安全套接字层/传输层安全)之上分层 HTTP 的结果。
简而言之,HTTPS = HTTP + SSL
什么时候需要 HTTPS?
当我们浏览时,我们通常使用HTTP协议发送和接收信息。所以这会导致任何人窃听我们的计算机和网络服务器之间的对话。很多时候,我们需要交换需要保护的敏感信息并防止未经授权的访问。
在以下场景中使用的 Https 协议 –
- 银行网站
- 支付网关
- 购物网站
- 所有登录页面
- 电子邮件应用程序
HTTPS 的基本工作
-
HTTPS 协议中的服务器需要公钥和签名证书。
-
客户端请求 https:// 页面
-
使用 https 连接时,服务器通过提供网络服务器支持的加密方法列表来响应初始连接。
-
作为响应,客户端选择一种连接方法,客户端和服务器交换证书以验证他们的身份。
-
完成此操作后,网络服务器和客户端在确保使用相同密钥后交换加密信息,并关闭连接。
-
对于托管 https 连接,服务器必须具有公钥证书,其中嵌入了密钥信息以及密钥所有者身份验证。
-
几乎所有证书都由第三方验证,以便客户确信密钥始终是安全的。
安全测试 – 编码和解码
什么是编码和解码?
编码是将一系列字符(如字母、数字和其他特殊字符)放入特定格式以进行高效传输的过程。
解码是将编码格式转换回原始字符序列的过程。它与我们通常误解的加密完全不同。
编码和解码用于数据通信和存储。编码不应用于传输敏感信息。
网址编码
URL 只能使用 ASCII 字符集通过 Internet 发送,并且在某些情况下,当 URL 包含除 ASCII 字符之外的特殊字符时,需要对其进行编码。URL 不包含空格并替换为加号 (+) 或 %20。
ASCII 编码
浏览器(客户端)将根据网页中使用的字符集对输入进行编码,HTML5 中的默认字符集是 UTF-8。
下表显示了字符的 ASCII 符号及其相等的符号,最后是它的替换,可以在将其传递给服务器之前在 URL 中使用 –
ASCII | 象征 | 替代品 |
---|---|---|
< 32 | 用 %xx 编码,其中 xx 是字符的十六进制表示。 | |
32 | 空间 | &plus 或 %20 |
33 | ! | %21 |
34 | ” | %22 |
35 | # | %23 |
36 | $ | %24 |
37 | % | %25 |
38 | & | %26 |
39 | ‘ | %27 |
40 | ( | %28 |
41 | ) | %29 |
42 | * | * |
43 | + | %2B |
44 | , | %2C |
45 | —— | —— |
46 | . | . |
47 | / | %2F |
48 | 0 | 0 |
49 | 1 | 1 |
50 | 2 | 2 |
51 | 3 | 3 |
52 | 4 | 4 |
53 | 5 | 5 |
54 | 6 | 6 |
55 | 7 | 7 |
56 | 8 | 8 |
57 | 9 | 9 |
58 | : | %3A |
59 | ; | %3B |
60 | > | %3C |
61 | = | %3D |
62 | > | %3E |
63 | ? | %3F |
64 | @ | %40 |
65 | 一种 | 一种 |
66 | 乙 | 乙 |
67 | C | C |
68 | D | D |
69 | 乙 | 乙 |
70 | F | F |
71 | G | G |
72 | H | H |
73 | 一世 | 一世 |
74 | J | J |
75 | 钾 | 钾 |
76 | 升 | 升 |
77 | 米 | 米 |
78 | N | N |
79 | 哦 | 哦 |
80 | 磷 | 磷 |
81 | 问 | 问 |
82 | 电阻 | 电阻 |
83 | 秒 | 秒 |
84 | 吨 | 吨 |
85 | 你 | 你 |
86 | 伏 | 伏 |
87 | 宽 | 宽 |
88 | X | X |
89 | 是 | 是 |
90 | Z | Z |
91 | [ | %5B |
92 | \ | %5C |
93 | ] | %5D |
94 | ^ | %5E |
95 | _ | _ |
96 | ` | %60 |
97 | 一种 | 一种 |
98 | 乙 | 乙 |
99 | C | C |
100 | d | d |
101 | 电子 | 电子 |
102 | F | F |
103 | G | G |
104 | H | H |
105 | 一世 | 一世 |
106 | j | j |
107 | 克 | 克 |
108 | 升 | 升 |
109 | 米 | 米 |
110 | n | n |
111 | ○ | ○ |
112 | 磷 | 磷 |
113 | q | q |
114 | r | r |
115 | 秒 | 秒 |
116 | 吨 | 吨 |
117 | 你 | 你 |
118 | v | v |
119 | 瓦 | 瓦 |
120 | X | X |
121 | 是 | 是 |
122 | z | z |
123 | { | %7B |
124 | | | %7C |
125 | } | %7D |
126 | ~ | %7E |
127 | %7F | |
> 127 | 用 %xx 编码,其中 xx 是字符的十六进制表示 |
安全测试 – 密码学
什么是密码学?
密码学是加密和解密数据的科学,它使用户能够存储敏感信息或通过不安全的网络传输敏感信息,以便只能由预期接收者读取。
无需任何特殊措施即可读取和理解的数据称为明文,而将明文伪装以隐藏其内容的方法称为加密。
加密的明文称为密文,将加密数据恢复为明文的过程称为解密。
-
分析和破坏安全通信的科学被称为密码分析。执行相同操作的人也称为攻击者。
-
密码学可以强也可以弱,强度是通过恢复实际明文所需的时间和资源来衡量的。
-
因此需要适当的解码工具来破译强加密消息。
-
有一些可用的加密技术,即使是 10 亿台计算机每秒执行 10 亿次检查,也无法破译文本。
-
随着计算能力与日俱增,人们必须使加密算法非常强大,以保护数据和关键信息免受攻击者的侵害。
加密如何工作?
密码算法与密钥(可以是单词、数字或短语)结合使用以加密明文,并且相同的明文使用不同的密钥加密为不同的密文。
因此,加密数据完全取决于密码算法的强度和密钥的保密性等参数。
密码技术
对称加密– 传统密码学,也称为传统加密,是一种仅使用一个密钥进行加密和解密的技术。例如,DES、Triple DES 算法、IBM 的 MARS、RC2、RC4、RC5、RC6。
非对称加密– 它是使用一对密钥进行加密的公钥密码术:公钥用于加密数据,私钥用于解密。公钥公开给人们,而私钥保密。例如,RSA、数字签名算法(DSA)、Elgamal。
散列– 散列是一种单向加密,它创建一个无法逆转或至少无法轻易逆转的加扰输出。例如MD5算法。它用于创建数字证书、数字签名、密码存储、通信验证等。
安全测试 – 同源策略
同源策略 (SOP) 是 Web 应用程序安全模型中的一个重要概念。
什么是同源政策?
根据此政策,它允许在源自同一站点的页面上运行脚本,这些页面可以是以下内容的组合 –
- 领域
- 协议
- 港口
例子
这种行为背后的原因是安全性。如果您在一个窗口中有try.com而在另一个窗口中有gmail.com,那么您不希望 try.com 中的脚本代表您访问或修改 gmail.com 的内容或在 gmail 的上下文中运行操作。
以下是来自同一来源的网页。如前所述,同源考虑域/协议/端口。
- http://website.com
- http://website.com/
- http://website.com/my/contact.html
以下是来自不同来源的网页。
- http://www.site.co.uk(另一个域)
- http://site.org(另一个域)
- https://site.com(另一种协议)
- http://site.com:8080(另一个端口)
IE 同源策略例外
Internet Explorer 有两个主要的 SOP 例外。
-
第一个与“可信区域”有关。如果两个域都在高度信任的区域中,则同源策略不完全适用。
-
IE 中的第二个异常与端口有关。IE 没有将端口包含在同源策略中,因此 http://website.com 和 http://wesite.com:4444 被认为是同源的,并且没有应用任何限制。
安全测试 – Cookies
什么是饼干?
cookie 是网络服务器发送的一小段信息,用于存储在网络浏览器上,以便浏览器以后可以读取。这样,浏览器就会记住一些特定的个人信息。如果黑客掌握了 cookie 信息,则可能会导致安全问题。
Cookie 的属性
以下是 cookie 的一些重要属性 –
-
它们通常是小的文本文件,给定存储在计算机浏览器目录中的 ID 标签。
-
Web 开发人员使用它们来帮助用户有效地浏览他们的网站并执行某些功能。
-
当用户再次浏览同一个网站时,存储在 cookie 中的数据会被发送回网络服务器,以通知网站用户之前的活动。
-
对于拥有庞大数据库、需要登录、具有可自定义主题的网站,Cookie 是不可避免的。
饼干内容
cookie 包含以下信息 –
- 发送 cookie 的服务器的名称。
- cookie 的生命周期。
- 一个值 – 通常是随机生成的唯一数字。
Cookie 的类型
-
会话 Cookies – 这些 cookie 是临时的,当用户关闭浏览器时会被删除。即使用户再次登录,也会为该会话创建一个新的 cookie。
-
持久性 cookie – 这些 cookie 会保留在硬盘驱动器上,除非用户将其擦除或过期。Cookie 的有效期取决于它们可以持续多长时间。
测试 Cookie
以下是测试 cookie 的方法 –
-
禁用 Cookies – 作为测试人员,我们需要在禁用 cookie 后验证网站的访问权限并检查页面是否正常工作。导航到网站的所有页面并注意应用程序崩溃。还需要通知用户使用网站需要 cookie。
-
Corrupting Cookies – 要执行的另一个测试是通过破坏 cookie。为了做到这一点,人们必须找到站点 cookie 的位置,并使用虚假/无效数据对其进行手动编辑,这些数据可用于访问域中的内部信息,进而可用于入侵站点。
-
删除 Cookies – 删除网站的所有 cookie 并检查网站对它的反应。
-
跨浏览器兼容性– 检查是否在所有支持的浏览器上从写入 cookie 的任何页面正确写入 cookie 也很重要。
-
编辑 Cookies – 如果应用程序使用 cookie 来存储登录信息,那么作为测试人员,我们应该尝试将 cookie 或地址栏中的用户更改为另一个有效用户。编辑 cookie 不应让您登录到不同的用户帐户。
查看和编辑 Cookie
现代浏览器支持在浏览器本身内查看/编辑 cookie 通知。有用于 mozilla/chrome 的插件,我们可以使用它们成功执行编辑。
- 为 Firefox 编辑 cookie 插件
- 为 chrome 编辑此 cookie 插件
应该执行这些步骤来编辑 cookie –
-
从这里下载 Chrome 插件
-
只需从 chrome 访问“编辑此 cookie”插件即可编辑 cookie 值,如下所示。
安全测试 – 黑客网络应用程序
我们可以将各种方法论/方法用作执行攻击的参考。
Web 应用程序 – 渗透测试方法
在开发攻击模型时,可以考虑以下标准。
在以下列表中,OWASP 是最活跃的,并且有许多贡献者。我们将专注于每个开发团队在设计 Web 应用程序之前考虑的 OWASP 技术。
OWASP 前 10 名
开放式 Web 应用安全协议团队发布了近年来 Web 中较为普遍的 10 大漏洞。以下是在基于 Web 的应用程序中更为普遍的安全漏洞列表。
应用程序 – 动手
为了理解每一种技术,让我们使用一个示例应用程序。我们将对“WebGoat”执行攻击,该 J2EE 应用程序是为了学习目的而明确开发的具有安全缺陷的应用程序。
有关 webgoat 项目的完整详细信息可以位于https://www.owasp.org/index.php/Category:OWASP_WebGoat_Project。要下载 WebGoat 应用程序,请导航到https://github.com/WebGoat/WebGoat/wiki/Installation-(WebGoat-6.0)并转到下载部分。
要安装下载的应用程序,首先确保您没有在端口 8080 上运行任何应用程序。只需使用一个命令即可安装它 – java -jar WebGoat-6.0.1-war-exec.jar。更多详情,请访问WebGoat 安装
安装后,我们应该能够通过导航到http://localhost:8080/WebGoat/attack来访问应用程序,页面将显示如下。
我们可以使用登录页面中显示的访客或管理员凭据。
网络代理
为了拦截客户端(浏览器)和服务器(在我们的案例中托管 Webgoat 应用程序的系统)之间的流量,我们需要使用 Web 代理。我们将使用可以从https://portswigger.net/burp/download.html下载的 Burp 代理
如果您下载 burp 套件的免费版本就足够了,如下所示。
配置 Burp 套件
Burp Suite 是一个网络代理,它可以拦截浏览器和网络服务器发送和接收的每个信息包。这有助于我们在客户端将信息发送到 Web 服务器之前修改内容。
步骤 1 – 应用程序安装在端口 8080 上,Burp 安装在端口 8181 上,如下所示。启动 Burp 套件并进行以下设置,以便在端口 8181 中启动它,如下所示。
第 2 步– 我们应该确保 Burp 正在侦听安装应用程序的端口#8080,以便 Burp 套件可以拦截流量。此设置应在 Burp Suite 的范围选项卡上完成,如下所示。
步骤 3 – 然后进行浏览器代理设置以侦听端口 8181(Burp Suite 端口)。因此,我们配置了 Web 代理来拦截客户端(浏览器)和服务器(Webserver)之间的流量,如下所示 –
步骤 4 – 借助简单的工作流程图,配置的快照如下所示
安全测试 – 注入
注入技术包括使用应用程序的输入字段注入 SQL 查询或命令。
Web 应用程序 – 注入
成功的 SQL 注入可以从数据库中读取、修改敏感数据,也可以从数据库中删除数据。它还使黑客能够对数据库执行管理操作,例如关闭 DBMS/删除数据库。
让我们借助简单的图表了解此漏洞的威胁代理、攻击向量、安全弱点、技术影响和业务影响。
例子
该应用程序在构建以下易受攻击的 SQL 调用时使用不受信任的数据 –
String query = "SELECT * FROM EMP WHERE EMPID = '" &plus request.getParameter("id") &plus "'";
动手
步骤 1 – 导航到应用程序的 SQL 注入区域,如下所示。
第 2 步– 如练习中所述,我们使用字符串 SQL 注入来绕过身份验证。使用 SQL 注入以老板 (‘Neville’) 的身份登录,而无需使用正确的密码。确认可以查看 Neville 的个人资料并且所有功能都可用(包括搜索、创建和删除)。
第 3 步– 我们将注入一条 SQL,以便我们能够通过将参数作为 ‘a’ = ‘a’ 或 1 = 1 发送来绕过密码
Step 4 – Post Exploitation,我们能够以管理员身份登录,如下所示。
防止 SQL 注入
有很多方法可以防止 SQL 注入。开发人员在编写代码时,应确保相应地处理特殊字符。OWASP 提供了备忘单/预防技术,这绝对是开发人员的指南。
- 使用参数化查询
- 转义所有用户提供的输入
- 为最终用户的数据库启用最低权限
测试损坏的身份验证
当与应用程序相关的身份验证功能未正确实施时,它允许黑客破坏密码或会话 ID 或使用其他用户凭据利用其他实施缺陷。
让我们借助简单的图表了解此漏洞的威胁代理、攻击向量、安全弱点、技术影响和业务影响。
例子
An e-commerce application supports URL rewriting, putting session IDs in the URL − http://example.com/sale/saleitems/jsessionid=2P0OC2JSNDLPSKHCJUN2JV/?item=laptop
该站点的经过身份验证的用户将 URL 转发给他们的朋友以了解折扣销售。他在不知道用户也在泄露会话 ID 的情况下通过电子邮件发送了上述链接。当他的朋友使用该链接时,他们会使用他的会话和信用卡。
动手
第 1 步– 登录 Webgoat 并导航到“会话管理缺陷”部分。让我们通过欺骗 cookie 来绕过身份验证。下面是场景截图。
第 2 步– 当我们使用凭证 webgoat/webgoat 登录时,我们从 Burp Suite 中发现 JSESSION ID 为 C8F3177CCAFF380441ABF71090748F2E,而 AuthCookie = 65432ubphcfx 成功验证后。
第 3 步– 当我们使用凭据方面/方面登录时,我们从 Burp Suite 中发现 JSESSION ID 是 C8F3177CCAFF380441ABF71090748F2E,而 AuthCookie = 65432udfqtb 成功认证后。
第 4 步– 现在我们需要分析 AuthCookie 模式。前半部分“65432”对于两种身份验证都是通用的。因此,我们现在有兴趣分析 authcookie 值的最后一部分,例如分别用于 webgoat 用户的 ubphcfx 和用于方面用户的 udfqtb。
第 5 步– 如果我们深入研究 AuthCookie 值,最后一部分的长度与用户名的长度相同。因此很明显,用户名与某种加密方法一起使用。经过反复试验/蛮力机制,我们发现在反转用户名后,webgoat;我们最终得到 taogbew,然后前面的字母字符被用作 AuthCookie。即 ubphcfx。
第 6 步– 如果我们传递这个 cookie 值并让我们看看会发生什么。在作为用户 webgoat 进行身份验证后,通过执行步骤#4 和步骤#5 找到相同的 AuthCookie,更改 AuthCookie 值以模拟用户 Alice。
预防机制
-
开发强大的身份验证和会话管理控制,使其满足 OWASP 应用程序安全验证标准中定义的所有身份验证和会话管理要求。
-
开发人员应确保避免可用于窃取会话 ID 的 XSS 缺陷。
测试跨站脚本
每当应用程序获取不受信任的数据并将其发送到客户端(浏览器)而未经验证时,就会发生跨站点脚本 (XSS)。这允许攻击者在受害者的浏览器中执行恶意脚本,从而导致用户会话劫持、破坏网站或将用户重定向到恶意站点。
让我们借助简单的图表了解此漏洞的威胁代理、攻击向量、安全弱点、技术影响和业务影响。
XSS 的类型
-
存储型 XSS – 存储型 XSS 也称为持久型 XSS,当用户输入存储在目标服务器(例如数据库/消息论坛/评论字段等)上时,就会发生存储型 XSS。然后受害者能够从 Web 应用程序检索存储的数据。
-
反射型 XSS – 反射型 XSS 也称为非持久型 XSS,当 Web 应用程序在错误消息/搜索结果中立即返回用户输入或用户作为请求的一部分提供的输入并且没有永久存储用户提供的数据时,就会发生反射型 XSS .
-
基于 DOM 的 XSS – 基于 DOM 的 XSS 是一种 XSS,当数据源在 DOM 中,接收器也在 DOM 中,并且数据流永远不会离开浏览器。
例子
应用程序在未验证的情况下在构造中使用不受信任的数据。特殊字符应该被转义。
http://www.webpage.org/task/Rule1?query=try
攻击者将浏览器中的查询参数修改为 –
http://www.webpage.org/task/Rule1?query=<h3>Hello from XSS"</h3>
动手
步骤 1 – 登录 Webgoat 并导航到跨站点脚本 (XSS) 部分。让我们执行存储跨站点脚本 (XSS) 攻击。下面是场景截图。
第 2 步– 根据场景,让我们以 Tom 身份登录,密码为“tom”,如场景本身所述。单击“查看个人资料”并进入编辑模式。由于 tom 是攻击者,让我们将 Java 脚本注入到这些编辑框中。
<script> alert("HACKED") </script>
第 3 步– 更新结束后,tom 会收到一个带有“hacked”消息的警告框,这意味着该应用程序易受攻击。
第 4 步– 现在根据场景,我们需要以 jerry (HR) 身份登录并检查 jerry 是否受到注入脚本的影响。
第 5 步– 以 Jerry 身份登录后,选择“Tom”并单击“查看个人资料”,如下所示。
从 Jerry 的帐户查看 tom 的个人资料时,他能够获得相同的消息框。
第 6 步– 此消息框只是一个示例,但实际攻击者可以执行的不仅仅是显示消息框。
预防机制
-
开发人员必须确保他们根据 HTML 上下文(例如正文、属性、JavaScript、CSS 或数据所在的 URL)转义所有不受信任的数据。
-
对于那些需要特殊字符作为输入的应用程序,在接受它们作为有效输入之前,应该有强大的验证机制。
不安全的直接对象引用
当开发人员公开对内部实现对象(例如文件、目录或数据库密钥)的引用而没有任何允许攻击者操纵这些引用以访问未经授权的数据的验证机制时,很可能会发生直接对象引用。
让我们借助简单的图表了解此漏洞的威胁代理、攻击向量、安全弱点、技术影响和业务影响。
例子
该应用程序在访问帐户信息的 SQL 调用中使用未经验证的数据。
String sqlquery = "SELECT * FROM useraccounts WHERE account = ?"; PreparedStatement st = connection.prepareStatement(sqlquery, ??); st.setString( 1, request.getParameter("acct")); ResultSet results = st.executeQuery( );
攻击者修改浏览器中的查询参数以指向 Admin。
http://webapp.com/app/accountInfo?acct=admin
动手
步骤 1 – 登录 Webgoat 并导航到访问控制缺陷部分。目标是通过导航到它所在的路径来检索 tomcat-users.xml。下面是场景截图。
第 2 步– 文件的路径显示在“当前目录是”字段中 – C:\Users\userName$\.extract\webapps\WebGoat\lesson_plans\en 我们也知道 tomcat-users.xml 文件是保存在 C:\xampp\tomcat\conf
第 3 步– 我们需要一直遍历当前目录并从 C:\ Drive 导航。我们可以通过使用 Burp Suite 拦截流量来执行相同的操作。
第 4 步– 如果尝试成功,它会显示 tomcat-users.xml 并显示消息“恭喜。您已成功完成本课。”
预防机制
开发人员可以使用以下资源/要点作为指导,以防止在开发阶段本身发生不安全的直接对象引用。
-
开发人员应仅使用一个用户或会话进行间接对象引用。
-
还建议在使用来自不受信任来源的直接对象引用之前检查访问。
安全配置错误
当安全设置被定义、实施和维护为默认值时,就会出现安全配置错误。良好的安全性需要为应用程序、Web 服务器、数据库服务器和平台定义和部署的安全配置。使软件保持最新也同样重要。
例子
给出了一些安全配置错误的经典示例 –
-
如果服务器上没有禁用目录列表,并且如果攻击者发现相同,那么攻击者可以简单地列出目录以查找任何文件并执行它。还可以获取包含所有自定义代码的实际代码库,然后找到应用程序中的严重缺陷。
-
应用服务器配置允许将堆栈跟踪返回给用户,这可能会暴露潜在的缺陷。攻击者获取错误消息提供的那些足以让他们渗透的额外信息。
-
应用服务器通常带有安全性不高的示例应用。如果不从生产服务器中删除将导致损害您的服务器。
动手
步骤 1 – 启动 Webgoat 并导航到不安全的配置部分,让我们尝试解决该挑战。下面提供了相同的快照 –
第 2 步– 我们可以尝试尽可能多的选项。我们只需要找到配置文件的 URL,我们就知道开发人员遵循配置文件的命名约定。它可以是下面列出的任何内容。它通常是通过蛮力技术来完成的。
- 网页配置
- 配置
- 应用名.config
- 配置文件
第 3 步– 在尝试各种选项后,我们发现 ‘ http://localhost:8080/WebGoat/conf ‘ 成功。如果尝试成功,将显示以下页面 –
预防机制
-
所有环境(例如开发、QA 和生产环境)都应使用在每个环境中使用的不同密码进行相同配置,这些密码不易被黑客入侵。
-
确保采用强大的应用程序架构,在组件之间提供有效、安全的分离。
-
它还可以通过运行自动扫描和定期进行审计来最大限度地减少这种攻击的可能性。
安全测试 – 敏感数据暴露
随着在线应用程序日益涌入互联网,并非所有应用程序都是安全的。许多 Web 应用程序没有正确保护敏感的用户数据,例如信用卡信息/银行帐户信息/身份验证凭据。黑客最终可能会窃取那些保护不力的数据,以进行信用卡欺诈、身份盗用或其他犯罪活动。
让我们借助简单的图表了解此漏洞的威胁代理、攻击向量、安全弱点、技术影响和业务影响。
例子
给出了一些安全配置错误的经典示例 –
-
站点根本不会对所有经过身份验证的页面使用 SSL。这使攻击者能够监控网络流量并窃取用户的会话 cookie 以劫持用户会话或访问他们的私人数据。
-
应用程序将信用卡号以加密格式存储在数据库中。检索后,它们被解密,允许黑客执行 SQL 注入攻击,以明文形式检索所有敏感信息。这可以通过使用公钥加密信用卡号并允许后端应用程序使用私钥解密来避免。
动手
步骤 1 – 启动 WebGoat 并导航到“不安全存储”部分。下面显示了相同的快照。
步骤 2 – 输入用户名和密码。是时候学习我们之前讨论过的不同类型的编码和加密方法了。
预防机制
-
建议不要存储不必要的敏感数据,如果不再需要,应尽快抓取。
-
确保我们采用了强大的标准加密算法并实施了适当的密钥管理,这一点很重要。
-
还可以通过在收集敏感数据(例如密码)的表单上禁用自动完成功能并禁用包含敏感数据的页面的缓存来避免这种情况。
缺少功能级访问控制
大多数 Web 应用程序在使用户可以访问该功能之前验证功能级别的访问权限。但是,如果不在服务器上执行相同的访问控制检查,黑客就可以在未经适当授权的情况下渗透到应用程序中。
让我们借助简单的图表了解此漏洞的威胁代理、攻击向量、安全弱点、技术影响和业务影响。
例子
这是缺少功能级别访问控制的经典示例 –
黑客只是强制使用目标 URL。通常管理员访问需要身份验证,但是,如果应用程序访问未经验证,则未经身份验证的用户可以访问管理页面。
' Below URL might be accessible to an authenticated user http://website.com/app/standarduserpage ' A NON Admin user is able to access admin page without authorization. http://website.com/app/admin_page
动手
第 1 步– 让我们首先浏览用户列表及其访问权限,以客户经理身份登录。
第 2 步– 在尝试各种组合后,我们可以发现 Larry 可以访问资源帐户管理器。
预防机制
-
默认情况下,身份验证机制应拒绝所有访问,并为每个功能提供对特定角色的访问。
-
在基于工作流的应用程序中,在允许用户访问任何资源之前验证用户的状态。
跨站请求伪造(CSRF)
CSRF 攻击迫使经过身份验证的用户(受害者)向易受攻击的 Web 应用程序发送伪造的 HTTP 请求,包括受害者的会话 cookie,这允许攻击者强制受害者的浏览器生成请求,以便易受攻击的应用程序将其视为来自受害者。
让我们借助简单的图表了解此漏洞的威胁代理、攻击向量、安全弱点、技术影响和业务影响。
例子
这是CSRF的一个经典例子 –
步骤 1 – 让我们说,易受攻击的应用程序以纯文本形式发送状态更改请求,没有任何加密。
http://bankx.com/app?action=transferFund&amount=3500&destinationAccount=4673243243
第 2 步– 现在黑客构建一个请求,通过将请求嵌入到存储在攻击者控制下的各个站点上的图像中,将资金从受害者的帐户转移到攻击者的帐户 –
<img src = "http://bankx.com/app?action=transferFunds&amount=14000&destinationAccount=attackersAcct#" width = "0" height = "0" />
动手
第 1 步– 让我们通过将 Java 脚本嵌入到图像中来执行 CSRF 伪造。下面列出了问题的快照。
第 2 步– 现在我们需要将传输模拟为 1×1 图像,并让受害者点击相同的图像。
步骤 3 – 提交消息后,该消息将如下突出显示。
第 4 步– 现在,如果受害者单击以下 URL,则执行传输,可以发现使用 burp suite 拦截用户操作。我们可以通过在 Get 消息中发现转移来查看转移,如下所示 –
第 5 步– 现在单击刷新后,将显示课程完成标记。
预防机制
-
可以通过在隐藏字段中创建唯一令牌来避免 CSRF,该令牌将在 HTTP 请求正文中发送,而不是在更容易暴露的 URL 中发送。
-
强制用户重新认证或证明他们是用户以保护CSRF。例如,验证码。
有漏洞的组件
当应用程序中使用的库和框架等组件几乎总是以完全权限执行时,就会发生这种威胁。如果一个易受攻击的组件被利用,它会使黑客的工作更容易造成严重的数据丢失或服务器接管。
让我们借助简单的图表了解此漏洞的威胁代理、攻击向量、安全弱点、技术影响和业务影响。
例子
以下示例使用具有已知漏洞的组件 –
-
攻击者可以通过不提供身份令牌来调用具有完全权限的任何 Web 服务。
-
带有表达式语言注入漏洞的远程代码执行是通过基于 Java 的应用程序的 Spring 框架引入的。
预防机制
-
识别 Web 应用程序中使用的所有组件和版本,而不仅限于数据库/框架。
-
保持所有组件如公共数据库、项目邮件列表等都是最新的。
-
在本质上易受攻击的组件周围添加安全包装器。
未经验证的重定向和转发
互联网上的大多数 Web 应用程序经常将用户重定向和转发到其他页面或其他外部网站。但是,在不验证这些页面的可信度的情况下,黑客可以将受害者重定向到网络钓鱼或恶意软件站点,或使用转发访问未经授权的页面。
让我们借助简单的图表了解此漏洞的威胁代理、攻击向量、安全弱点、技术影响和业务影响。
例子
给出了一些未经验证的重定向和转发的经典示例 –
-
假设应用程序有一个页面 – redirect.jsp,它接受一个参数redirectrul。黑客添加了一个恶意 URL,用于重定向执行网络钓鱼/安装恶意软件的用户。
http://www.mywebapp.com/redirect.jsp?redirectrul=hacker.com
-
所有用于将用户转发到站点不同部分的 Web 应用程序。为了达到同样的目的,一些页面使用一个参数来指示如果操作成功应该将用户重定向到哪里。攻击者制作一个 URL,通过应用程序的访问控制检查,然后将攻击者转发到攻击者没有访问权限的管理功能。
http://www.mywebapp.com/checkstatus.jsp?fwd=appadmin.jsp
预防机制
-
最好避免使用重定向和转发。
-
如果不可避免,则应该在重定向目的地时不涉及用户参数的情况下完成。
AJAX 安全
异步 Javascript 和 XML (AJAX) 是用于开发 Web 应用程序以提供丰富用户体验的最新技术之一。由于它是一项新技术,因此还有许多安全问题尚未完成,以下是 AJAX 中为数不多的安全问题。
-
攻击面更多,因为有更多的输入需要保护。
-
它还公开了应用程序的内部功能。
-
未能保护身份验证信息和会话。
-
客户端和服务器端之间的界限非常狭窄,因此存在犯安全错误的可能性。
例子
这是 AJAX 安全的示例 –
2006 年,一种蠕虫利用 Yahoo Mail 的 onload 事件处理中的漏洞,使用 XSS 和 AJAX 感染了雅虎邮件服务。当打开受感染的电子邮件时,该蠕虫会执行其 JavaScript,向受感染用户的所有雅虎联系人发送一份副本。
动手
第 1 步– 我们需要尝试使用 XML 注入为您允许的奖励集添加更多奖励。下面是场景截图。
第 2 步– 确保我们使用 Burp Suite 拦截请求和响应。设置与下图相同。
步骤 3 – 输入场景中给出的帐号。我们将能够获得我们有资格获得的所有奖励的列表。我们有资格获得 5 个奖励中的 3 个。
第 4 步– 现在让我们点击“提交”,看看我们在响应 XML 中得到了什么。如下所示,我们符合条件的三个奖励以 XML 的形式传递给我们。
第 5 步– 现在让我们编辑这些 XML 并添加其他两个奖励。
第 6 步– 现在所有奖励都将显示给用户供他们选择。选择我们添加的那些,然后单击“提交”。
第 7 步– 出现以下消息,“* 恭喜。您已成功完成本课。”
预防机制
客户端 –
- 使用 .innerText 而不是 .innerHtml。
- 不要使用评估。
- 不要依赖客户端逻辑来确保安全。
- 避免编写序列化代码。
- 避免动态构建 XML。
- 永远不要向客户传输秘密。
- 不要在客户端代码中执行加密。
- 不要在客户端执行影响安全的逻辑。
服务器端 –
- 使用 CSRF 保护。
- 避免编写序列化代码。
- 用户可以直接调用服务。
- 避免手动构建 XML,使用框架。
- 避免手动构建 JSON,使用现有框架。
安全测试 – 网络服务
在现代基于 Web 的应用程序中,Web 服务的使用是不可避免的,并且它们也容易受到攻击。由于 Web 服务请求从多个网站获取,开发人员必须采取一些额外的措施来避免黑客的任何形式的渗透。
动手
步骤 1 – 导航到 Webgoat 的 Web 服务区域并转到 WSDL 扫描。我们现在需要获取一些其他帐号的信用卡详细信息。该场景的快照如下所述。
第 2 步– 如果我们选择名字,则通过 SOAP 请求 xml 进行“getFirstName”函数调用。
第 3 步– 通过打开 WSDL,我们可以看到有一种方法可以检索信用卡信息以及“getCreditCard”。现在让我们使用 Burp 套件篡改输入,如下所示 –
第 4 步– 现在让我们使用 Burp 套件修改输入,如下所示 –
第 5 步– 我们可以获取其他用户的信用卡信息。
预防机制
-
由于 SOAP 消息是基于 XML 的,因此所有传递的凭据都必须转换为文本格式。因此,在传递必须始终加密的敏感信息时必须非常小心。
-
通过实施校验和等机制来保护消息完整性,以确保数据包的完整性。
-
保护消息机密性 – 应用非对称加密来保护对称会话密钥,在许多实现中,这些密钥仅对一次通信有效,随后被丢弃。
安全测试 – 缓冲区溢出
当程序试图在临时数据存储区(缓冲区)中存储的数据多于预期的数据时,就会发生缓冲区溢出。由于缓冲区被创建来包含有限数量的数据,额外的信息可能会溢出到相邻的缓冲区中,从而破坏其中保存的有效数据。
例子
下面是一个缓冲区溢出的经典例子。它演示了一个简单的缓冲区溢出,它是由依赖外部数据来控制其行为的第一种情况引起的。没有办法限制用户输入的数据量,程序的行为取决于用户输入的字符数。
... char bufr[BUFSIZE]; gets(bufr); ...
动手
第 1 步– 我们需要使用姓名和房间号登录才能访问互联网。这是场景快照。
第 2 步– 我们还将在 Burp Suite 中启用“取消隐藏隐藏的表单字段”,如下所示 –
第 3 步– 现在我们在姓名和房间号字段中发送一个输入。我们还尝试在房间号字段中注入一个相当大的数字。
步骤 4 – 隐藏字段显示如下。我们点击接受条款。
Step 5 – 攻击成功,由于缓冲区溢出,它开始读取相邻的内存位置并显示给用户,如下所示。
第 6 步– 现在让我们使用显示的数据登录。登录后,将显示以下消息 –
预防机制
- 代码审查
- 开发人员培训
- 编译工具
- 开发安全功能
- 定期扫描
安全测试 – 拒绝服务
拒绝服务 (DoS) 攻击是黑客试图使网络资源不可用的一种尝试。它通常会暂时或无限期地中断连接到 Internet 的主机。这些攻击通常针对托管在任务关键型 Web 服务器上的服务,例如银行、信用卡支付网关。
DoS 的症状
- 网络性能异常缓慢。
- 特定网站不可用。
- 无法访问任何网站。
- 收到的垃圾邮件数量急剧增加。
- 长期拒绝访问网络或任何互联网服务。
- 特定网站不可用。
动手
步骤 1 – 启动 WebGoat 并导航到“拒绝服务”部分。下面给出了该场景的快照。我们需要通过违反最大数据库线程池大小来多次登录。
第 2 步– 首先,我们需要获取有效登录的列表。在这种情况下,我们使用 SQL 注入。
步骤 3 – 如果尝试成功,则会向用户显示所有有效凭据。
第 4 步– 现在在至少 3 个不同的会话中使用这些用户中的每一个登录,以使 DoS 攻击成功。我们知道数据库连接只能处理两个线程,通过使用所有登录,它将创建三个线程,从而使攻击成功。
预防机制
-
执行彻底的输入验证。
-
避免高 CPU 消耗操作。
-
最好将数据盘和系统盘分开。
安全测试 – 恶意文件执行
开发人员通常直接使用或将潜在易受攻击的输入与文件连接起来,或者假设输入文件是真实的。如果未正确检查数据,这可能会导致 Web 服务器处理或调用易受攻击的内容。
例子
一些经典的例子包括 –
- 将 .jsp 文件上传到网络树中。
- 上传要调整大小的 .gif。
- 上传大文件。
- 上传包含标签的文件。
- 将 .exe 文件上传到网络树中。
动手
步骤 1 – 启动 WebGoat 并导航到恶意文件执行部分。该场景的快照如下 –
第 2 步– 为了完成本课,我们需要在上述位置上传 guest.txt。
第 3 步– 让我们创建一个 jsp 文件,以便在执行 jsp 时创建 guest.txt 文件。在我们执行 jsp 文件的内容时,jsp 的命名在此上下文中没有任何作用。
<HTML> <% java.io.File file = new java.io.File("C:\\Users\\username$\\.extract\\webapps\\WebGoat\\mfe_target\\guest.txt"); file.createNewFile(); %> </HTML>
Step 4 – 现在上传jsp文件并在上传后复制相同的链接位置。上传需要一个图像,但我们正在上传一个jsp。
第 5 步– 通过导航到 jsp 文件,将不会向用户发送任何消息。
第 6 步– 现在刷新您上传 jsp 文件的会话,您将收到消息,“* 恭喜。您已成功完成课程”。
预防机制
- 使用网站权限保护网站。
- 采取应对 Web 应用程序安全的措施。
- 了解 IIS 7.0 中的内置用户和组帐户。
安全测试 – 自动化工具
有多种工具可用于执行应用程序的安全测试。很少有工具可以执行端到端安全测试,而有些工具专门用于发现系统中的特定类型的缺陷。
开源工具
给出了一些开源安全测试工具 –
S.No. | 工具名称 |
---|---|
1 |
Zed Attack Proxy 提供自动扫描器和其他用于发现安全漏洞的工具。 |
2 |
OWASP WebScarab 用 Java 开发,用于分析 Http 和 Https 请求。 |
3 |
OWASP Mantra 支持多语言安全测试框架 https://www.owasp.org/index.php/OWASP_Mantra_-_Security_Framework |
4 |
Burp Proxy 拦截和修改流量的工具,可与自定义 SSL 证书一起使用。 |
5 |
Firefox Tamper Data 使用篡改数据查看和修改 HTTP/HTTPS 标头和发布参数 |
6 |
Firefox Web Developer Tools Web Developer 扩展向浏览器添加了各种 Web 开发者工具。 |
7 |
Cookie Editor 允许用户添加、删除、编辑、搜索、保护和阻止 cookie |
特定工具集
以下工具可以帮助我们发现系统中特定类型的漏洞 –
S.No. | 关联 |
---|---|
1 |
DOMinator Pro − Testing for DOM XSS |
2 |
OWASP SQLiX − SQL Injection |
3 |
Sqlninja − SQL Injection |
4 |
SQLInjector − SQL Injection |
5 |
sqlpowerinjector − SQL Injection |
6 |
SSL Digger − Testing SSL |
7 |
THC-Hydra − Brute Force Password |
8 |
Brutus − Brute Force Password |
9 |
Ncat − Brute Force Password |
10 |
OllyDbg − Testing Buffer Overflow |
11 |
Spike − Testing Buffer Overflow |
12 |
Metasploit − Testing Buffer Overflow |
商业黑盒测试工具
以下是一些商业黑盒测试工具,可帮助我们发现我们开发的应用程序中的安全问题。
S.No | 工具 |
---|---|
1 |
NGSSQuirreL |
2 |
IBM AppScan |
3 |
Acunetix Web Vulnerability Scanner |
4 |
NTOSpider |
5 |
SOAP UI |
6 |
Netsparker |
7 |
HP WebInspect |
免费源代码分析器
S.No | 工具 |
---|---|
1 |
OWASP Orizon |
2 |
OWASP O2 |
3 |
SearchDiggity |
4 |
FXCOP |
5 |
Splint |
6 |
Boon |
7 |
W3af |
8 |
FlawFinder |
9 |
FindBugs |
商业源代码分析器
这些分析器检查、检测和报告源代码中容易出现漏洞的弱点 –
S.No | 工具 |
---|---|
1 |
Parasoft C/C++ test |
2 |
HP Fortify |
3 |
Appscan |
4 |
Veracode |
5 |
Armorize CodeSecure |
6 |
GrammaTech |