Python 渗透测试 - XSS Web 攻击
跨站点脚本攻击是一种注入,也指客户端代码注入攻击。在这里,恶意代码被注入到合法网站中。同源策略 (SOP) 的概念对于理解跨站点脚本的概念非常有用。SOP 是每个 Web 浏览器中最重要的安全原则。它禁止网站从其他来源的页面检索内容。例如,网页 www.tutorialspoint.com/index.html 可以访问 www.tutorialspoint.com/contact.html 的内容,但 www.virus.com/index.html 无法访问 www.tutorialspoint.com/contact.html 的内容。这样,我们可以说跨站点脚本是一种绕过 SOP 安全策略的方法。
XSS 攻击的类型
在本节中,让我们了解不同类型的 XSS 攻击。攻击可分为以下主要类别 −
- 持久性或存储性 XSS
- 非持久性或反射性 XSS
持久性或存储性 XSS
在这种 XSS 攻击中,攻击者会注入一个脚本(称为有效负载),该脚本永久存储在目标 Web 应用程序中,例如在数据库中。这就是它被称为持久性 XSS 攻击的原因。它实际上是最具破坏性的 XSS 攻击类型。例如,攻击者在博客的评论字段或论坛帖子中插入恶意代码。
非持久性或反射型 XSS
这是最常见的 XSS 攻击类型,攻击者的有效载荷必须是请求的一部分,该请求被发送到 Web 服务器并反射回来,这样 HTTP 响应就包含来自 HTTP 请求的有效载荷。这是一种非持久性攻击,因为攻击者需要将有效载荷传递给每个受害者。此类 XSS 攻击最常见的例子是钓鱼电子邮件,攻击者借助这种电子邮件吸引受害者向包含 XSS 有效载荷的服务器发出请求,并最终执行在浏览器内反射和执行的脚本。
示例
与 SQLi 一样,XSS Web 攻击可以通过操纵应用程序的输入数据来实现。在以下示例中,我们将修改上一节中完成的 SQLi 攻击向量,以测试 XSS Web 攻击。下面给出的 Python 脚本有助于使用 mechanize −
分析 XSS 攻击首先,让我们导入 mechanize 模块。
import mechanize
现在,提供提交表单后获取响应的 URL 名称。
url = input("Enter the full url") attack_no = 1
我们需要从文件中读取攻击向量。
With open ('vectors_XSS.txt') as x:
现在我们将发送带有每个 arrack 向量的请求 −
For line in x: browser.open(url) browser.select_form(nr = 0) browser[“id”] = line res = browser.submit() content = res.read()
以下代码行将检查打印的攻击向量。
if content.find(line) > 0: print("Possible XSS")
以下代码行将响应写入输出文件。
output = open('response/' + str(attack_no) + '.txt', 'w') output.write(content) output.close() print attack_no attack_no += 1
当用户输入未经任何验证就打印到响应中时,就会发生 XSS。因此,要检查 XSS 攻击的可能性,我们可以检查响应文本中是否存在我们提供的攻击向量。如果响应中存在攻击向量而没有任何转义或验证,则很有可能发生 XSS 攻击。