Python渗透测试 - XSS网页攻击



跨站脚本攻击是一种注入类型,也称为客户端代码注入攻击。在这种攻击中,恶意代码被注入到合法网站中。同源策略(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攻击中,攻击者注入一个称为payload的脚本,该脚本永久存储在目标Web应用程序上,例如数据库中。这就是它被称为持久性XSS攻击的原因。它实际上是最具破坏性的XSS攻击类型。例如,攻击者在博客的评论字段或论坛帖子中插入恶意代码。

非持久性或反射型XSS

这是最常见的XSS攻击类型,其中攻击者的payload必须是发送到Web服务器并反射回的请求的一部分,以使HTTP响应包含来自HTTP请求的payload。这是一种非持久性攻击,因为攻击者需要向每个受害者传递payload。此类XSS攻击最常见的示例是网络钓鱼邮件,攻击者利用这些邮件吸引受害者向服务器发出包含XSS payload的请求,并最终执行在浏览器内部反射并执行的脚本。

示例

与SQLi相同,XSS网页攻击可以通过操纵应用程序的输入数据来实现。在以下示例中,我们正在修改上一节中完成的SQLi攻击向量以测试XSS网页攻击。下面给出的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攻击。

广告