浅谈JSP安全开发之XSS
时间:2016-11-25 09:36 来源:i春秋社区 作者:0nise 点击:次
作者:0nise 首发:i春秋社区 注明:转载请务必注明i春秋社区(bbs.ichunqiu.com) 前言 大家好,好男人就是我,我就是好男人,我就是-0nise。在各大漏洞举报平台,我们时常会看到XSS漏洞。那么问题来了,为何会出现这种漏洞?出现这种漏洞应该怎么修复? 目录 1.XSS?XSS?XSS是什么鬼? 2.XSS的危害有多大? 3.如何避免XSS漏洞的出现 正文 1.XSS?XSS?XSS是什么鬼? XSS又叫跨站脚本攻击(Cross Site Scripting),我不会告诉他原本是叫CSS的,但是为了不和我们所用的层叠样式表(Cascading Style Sheets)CSS搞混。CSS(跨站脚本攻击),CSS(层叠样式表)傻傻分不清。所以就叫XSS咯。 2.XSS的危害是什么? 实验一: 0x00构造代码
[Java] 纯文本查看 复制代码
0x01环境布局 ![]() 0x02漏洞演练 我们访问:http://localhost:8080/XSS/index.jsp?opr=i%E6%98%A5%E7%A7%8B ![]() 然后访问:http://localhost:8080/XSS/index.jsp?opr=0nise ![]() 最后我们发现了一个“伟大的规律”: opr参数等于什么页面就打印什么。(好像是废话) 我们接着来加载一个图片看看 访问:http://localhost:8080/XSS/index.jsp?opr=%3Cimg%20src=%221.png%22%3E%3C/img%3E ![]() 既然图片都可以加载,那么我们JS文件是不是也阔以加载呢? 访问:http://localhost:8080/XSS/index.jsp?opr=%3Cscript%3Ealert(/i%E6%98%A5%E7%A7%8B%E7%A4%BE%E5%8C%BA%E6%AC%A2%E8%BF%8E%E5%A4%A7%E5%AE%B6/)%3C/script%3E ![]() Js?Js?那么是不是可以来改变跳转后地址? 访问:http://localhost:8080/XSS/index.jsp?opr=%3Cscript%3Elocation.href=%27http://bbs.ichunqiu.com%27%3C/script%3E ![]() 既然xss都可以加载js,那么,我们是不是通过js来打开本地的某些东西? ![]() 提前放了一个MD5.exe文件 访问:http://localhost:8080/XSS/index.jsp?opr=<script> var objShell = new ActiveXObject("wscript.shell");objShell.Run("G:/work/XSS/WebRoot/Md5.exe");</script> ![]() 既然连本地文件都可以打开那么远程文件木马?来个电脑恶搞?这个自己慢慢象限。我可没说啊。。。。。 文件都可以打开,那么写一些文件呢? 访问:http://localhost:8080/XSS/index.jsp?opr=%3Cscript%3Evar%20fso,tf;fso%20=%20new%20ActiveXObject(%22Scripting.FileSystemObject%22);tf%20=%20fso.CreateTextFile(%22d:\\test.txt%22,true);tf.WriteLine(%22i%E6%98%A5%E7%A7%8B%E7%A4%BE%E5%8C%BA%E6%AC%A2%E8%BF%8E%E6%82%A8%22);tf.Close();alert(%22%E6%96%87%E4%BB%B6%E5%86%99%E5%85%A5%E6%88%90%E5%8A%9F%EF%BC%81%22);%3C/script%3E ![]() ![]() 通过以上实验我们可以看出opr参数赋值操作。如果opr参数没有值的话,就无法执行执行,被攻击者必须访问攻击者提前设计好的才能攻击。这种XSS攻击方式叫做:存储型XSS 如果你想看到更给力的实验,请接着往下看。 实验二: 前言: 大部分网站都会和数据打交道那么,XSS漏洞出现这些网站是什么样子的? 0x00构造代码 数据库部分 ![]() BaseDao.java
[Java] 纯文本查看 复制代码
CommentDao.java
[Java] 纯文本查看 复制代码
CommentServlvet
[Java] 纯文本查看 复制代码
Comment.jsp
[Java] 纯文本查看 复制代码
0x01漏洞实验 root@1~# 我们在留言板留言:
[JavaScript] 纯文本查看 复制代码
![]() 然后访问:http://localhost:8080/XSS/comment.jsp ![]() 这样只要访问这个页面,软件就自动打开了,来个远程文件?慢慢领悟。 root@2~# 我们在留言板留言:
[JavaScript] 纯文本查看 复制代码
![]() 然后访问: http://localhost:8080/XSS/comment.jsp ![]() 文件写入成功。 root@3~# 留言内容:
[JavaScript] 纯文本查看 复制代码
访问页面:http://localhost:8080/XSS/comment.jsp ![]() 访问留言页面自动跳转到攻击者特定的网站。难道这就是传说中的劫持吗? 3.XSS防御方案 正所谓哪里有攻击,哪里就有防御。XSS一样,有攻击的方式,也有防御的方案。 EL表达式+JSTL标签库 EL(Expression Language):[size=12.0000pt]为了使JSP写起来更简单。表达式语言的灵感来自于ECMAScript和XPath表达式语语言,他提供了JSP中简化表达式的方法,让jsp代码更简单。 JSTL(JSP Standard Tag Library):开放源代码的JSP标签库。 实验一防御代码:
[Java] 纯文本查看 复制代码
![]() 实验二防御代码:
[Java] 纯文本查看 复制代码
[Java] 纯文本查看 复制代码
![]() 结束语 技术无黑白,专研甚好。 (责任编辑:蜗蜗侠) |