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:

现在我们将使用每个 arack 向量发送请求 -

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