Python Penetration Testing 简明教程

Python Penetration Testing - XSS Web Attack

跨站点脚本攻击是一种注入攻击,也称为客户端代码注入攻击。此攻击中,恶意代码会被注入到合法网站中。同源策略 (SOP) 的概念对于了解跨站点脚本攻击的概念非常有用。SOP 是每个网络浏览器中最重要安全原则。它禁止网站从其他来源的页面中检索内容。例如,网页 www.tutorialspoint.com/index.html 可以访问 www.tutorialspoint.com/contact.html 中的内容,但 www.virus.com/index.html 无法访问 www.tutorialspoint.com/contact.html 中的内容。从这个方面来说,我们可以称跨站点脚本攻击是绕过 SOP 安全策略的一种方式。

Types of XSS Attack

在本节中,我们将了解不同类型的 XSS 攻击。该攻击可以归类到以下几个主要类别 −

  1. Persistent or stored XSS

  2. Non-persistent or reflected XSS

Persistent or stored XSS

在这种类型的 XSS 攻击中,攻击者会注入一个脚本(称为有效负载),该脚本永久存储在目标 Web 应用程序中,例如数据库中。这就是它被称为持续性 XSS 攻击的原因。它实际上是最具破坏性的 XSS 攻击类型。例如,攻击者在博客或论坛帖子的评论字段中插入恶意代码。

Non-persistent or reflected XSS

这是最常见的 XSS 攻击类型,其中攻击者的有效载荷必须是请求的一部分,该请求被发送到 Web 服务器并以这样的方式反射回来,即 HTTP 响应中包含 HTTP 请求中的有效载荷。这是一种非持久攻击,因为攻击者需要将有效载荷传递给每个受害者。此类 XSS 攻击最常见的例子是网络钓鱼邮件,攻击者借助此类邮件吸引受害者向包含 XSS 有效载荷的服务器发出请求,并最终执行在浏览器中被反射和执行的脚本。

Example

与 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:

现在,我们将用每个攻击媒介发送请求 -

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 攻击的可能性很大。