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 攻击。