xss漏洞的网站源码分享 xss漏洞实战文章

大家好,今天给各位分享xss漏洞的网站源码分享的一些知识,其中也会对xss漏洞实战文章进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!

前言

在了解xss漏洞之前,先了解同源策略,同源要求的是同协议、同域名、同端口才能算作同一个源站,才可以互相访问资源获取资源内容,但是现代互联网中,有很多第三方的js需要加载到自己的站点下,比如百度统计、访问分析等,这些都有成熟的资源可以使用,比如我的站点是nosec.win,想使用百度的站点统计功能,就需要把baidu.com的资源加载到我的站点下面,这样加载的不是同域名的就出现了同源绕过的问题,存在同源绕过就能利用该特性产生安全风险

同源绕过

资源加载上述问题是通过加载第三方js绕过了同源策略的限制,这个是通过标签<script>脚本文件js绕过的,除此之外,还有:图片资源样式资源iframe框架A标签多媒体资源form表单资源。。。。请求配置另一个绕过同源的方案是通过CORS策略来进行访问配置,这个同样配置错了也会造成安全风险,这个在下一篇文章中会详解,这个发现和利用起来也比较有意思PostMassage()方法这个本身就是为了跨域传递资源使用的,这个漏洞的查找和分析也很有意思,后面会详细说到,这个大家注意比较少jsonp这个很多人认为是get型的CSRF漏洞,这里本人抱怀疑态度,CSRF是利用了同源策略,Jsonp是绕过同源策略获取到了第三方的咨询信息,本身是互斥的flash跨域这个很老了,现在flash都成古董了,不过当时这个flash跨域真的好用。

既然本章介绍XSS的漏洞,那就从第一种开始说起,资源加载

XSS

资源加载的内容很多,包括了图片、css、链接等等,为啥单独加载js会被认为是xss漏洞了?xss漏洞到底是啥?

XSS来源

xss本身名称是跨站脚本攻击漏洞,英文名称是:Cross-sitescripting,缩写起来是CSS,这个和样式列表重合了,为了区分,叫做了xss。

XSS的产生

首先看一段代码:

<inputtype=&34;value=&34;username&34;>\n<button>点击</button>\n<div>\n您的名字是:<%=getParameter(&34;)%>\n</div>\n

很简单的一段代码,输入名字、输出名字,对于研发来说,功能实现了,但是参考资源加载这块,要是输入的是一段资源会是怎么样呢?

例如:http://xxx/name?username=&34;http://xxxx/a.jpg&34;<imgsrc=&34;>\n</div>\n

那么直接加载js代码呢?

http://xxx/name?username=&34;http://xxxx/a.js&34;http://xxxx/a.js&34;<script>alert(&39;)</script>

这样直接插入到页面里面,页面访问就会触发js代码执行alert(&39;),这样页面就会弹出一个xss的对话框

说到这里很多人对于xss的理解是就在我的页面上弹框有啥用,通过上面分析知道了,弹框是为了好展示,其实关键的因素在于插入了js代码,js代码能做啥,这个就多了去了,前段时间chrome的0day,js还能拿到电脑操作权限呢,现在nodejs很流行,本身也是用js来写的

XSS的分类

XSS根据触发的不同分为:反射xss、存储xss以及domXSS

反射就是点击之后才能触发,例如上述代码,把

http://xxx/name?username=&34;http://xxxx/a.js&34;<scriptsrc=&34;>\n

若是没有做任何处理的话,js加载到html中解析后,留在这个页面上了,可以认为是进入数据库存储起来了,只要有人访问到我这个带有大家好的页面,就触发xss,

dom呢,这个是不经过服务器的,通过前端直接解析出来,这个很多时候和反射有点类似,只是构造点在于前端页面上面

XSS的预防

通过上面分析可知,要想利用成功,需要两个条件:

攻击者可以提交恶意代码浏览器可以执行恶意代码

那么就可以从这两个方面做处理

禁止提交恶意代码这个的话可以通过输入过滤和转义完成,根据经验来说,一般情况下把以下特殊字符过滤掉可以干掉80%的xss漏洞

&39;/<>

在java工程中,有很多可以转义的函数存在帮助解决xss问题

下面是一些:

<!–HTML标签内文字内容–>\n<div><%=Encode.forHtml(UNTRUSTED)%></div>\n\n<!–HTML标签属性值–>\n<inputvalue=&34;/>\n\n<!–CSS属性值–>\n<divstyle=&34;>\n\n<!–CSSURL–>\n<divstyle=&34;>\n\n<!–JavaScript内联代码块–>\n<script>\nvarmsg=&34;;\nalert(msg);\n</script>\n\n<!–JavaScript内联代码块内嵌JSON–>\n<script>\nvar__INITIAL_STATE__=JSON.parse(&39;);\n</script>\n\n<!–HTML标签内联监听器–>\n<button\nonclick=&39;<%=Encode.forJavaScript(UNTRUSTED)%>&34;>\nclickme\n</button>\n\n<!–URL参数–>\n<ahref=&top&34;/page/<%=Encode.forUriComponent(UNTRUSTED)%>&34;javascript:&39;<%=\nurlValidator.isValid(UNTRUSTED)?\nEncode.forHtml(UNTRUSTED):\n&34;\n%>'>\nlink\n</a>\n

对于富文本的xss是相当复杂的,几乎不可能完全杜绝

禁止执行恶意代码

这个的话除了过滤参数值之外,还有其他控制措施进行防范控制

CSP策略

禁止加载外域代码,防止复杂的攻击逻辑。禁止外域提交,网站被攻击后,用户的数据不会泄露到外域。禁止内联脚本执行(规则较严格,目前发现GitHub使用)。禁止未授权的脚本执行(新特性,GoogleMap移动版在使用)。合理使用上报可以及时发现XSS,利于尽快修复问题。

输入长度控制

这个能避免加载js代码,可以增加xss的利用难度

其他安全措施

使用httponly属性禁止js读取敏感cookie,使得存在xss也无法泄露cookie信息验证码,这个是事后处理,防止脚本冒充用户提交危险操作

XSS的发现

这个对于发现来说,比较通用的方式是采用探针方式,例如替换不同的参数值为“‘/</1234>,在页面中搜索1234看看符号是否被替换或者转义即可,没有的话肯定存在xss问题了

xss漏洞的网站源码分享的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于xss漏洞实战文章、xss漏洞的网站源码分享的信息别忘了在本站进行查找哦。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平