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