Java接口xss,Java审计之XSS篇
Java审计之XSS篇
0x00 前言
继续 学习一波Java审计的XSS漏洞的产生过程和代码。
0x01 Java 中XSS漏洞代码分析
xss原理
xss产生过程:
后台未对用户输入进行检查或过滤,直接把用户输入返回至前端。导致javascript代码在客户端任意执行。
XSS代码分析
在php里面会使用echo对用户输入的参数进行直接输出,导致了xss漏洞的产生。而在Java里面会将接收到的未经过滤的参数共享到request域中,在jsp的页面里面使用EL表达式进行输出。
这里编写一个serlvet来做一个演示
xssservlet代码:
@WebServlet("/demo")
public class xssServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");// 设置响应类型
String content = request.getParameter("content"); //获取content传参数据
request.setAttribute("content", content); //content共享到request域
request.getRequestDispatcher("/WEB-INF/pages/xss.jsp").forward(request, response); //转发到xxs.jsp页面中
}
}
xss.jsp代码:
Title
${requestScope.content}
启动tomcat,访问url:
http://localhost:8080/untitled3_war_exploded/demo?content=1
传参一个1过去成功输入了,那么再来传一个xss的payload试试。
http://localhost:8080/untitled3_war_exploded/demo?content=
成功的弹出了一个框
在审计中需要关注的是参数是否可控,如果可控传入的参数是否会被过滤后共享到request域中,如果在可控和不被过滤的情况下,就很有可能存在xss漏洞。
防御xss策略
我们需要防御xss漏洞的攻击,就需要添加一个方法,在传入前先调用该方法进行一次过滤,但是这样的方式比较繁琐,这时候就可以使用ESAPI来帮我们过滤。
ESAPI介绍:
企业安全API(ESAPI)项目是OWASP项目,可为每个Web平台创建简单的强大安全控件。安全控件并不容易构建。您可以在OWASP网站上了解无聊的开发人员的数百个陷阱。通过为开发人员提供一组强大的控件,我们旨在消除创建安全Web应用程序的某些复杂性。这可以在整个SDLC中节省大量成本。
据说可以应付大部分的web攻击漏洞。
在pom.xml导入ESAPI坐标
org.owasp.esapi
esapi
2.2.1.1
servlet代码:
@WebServlet("/demo")
class xssServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, ServletException, IOException {
response.setContentType("text/html");// 设置响应类型
String content = request.getParameter("content"); //获取content传参数据
String s = ESAPI.encoder().encodeForJavaScript(content); //进行实体编码
request.setAttribute("content", s); //content共享到request域
request.getRequestDispatcher("/WEB-INF/pages/xss.jsp").forward(request, response); //转发到xxs.jsp页面中
}
}
参考该博客
https://blog.csdn.net/CHS007chs/article/details/86645450
0x02 CMS 审计
这次还是拿上次搭建的环境来做一个演示。
那么结合前面的内容,知道了xss的产生过程是使用request.setAttribute方法将请求到的数据未经过滤存储到request域中,然后在jsp页面里使用el表达式进行输出。
在审计的时候我们可以直接来全局搜索 快捷键 `Ctrl+Shift+F
这里就来找一下存储型xss,反射的xss意义并不大。
点击选择一个文件来看看他的代码,这里直接就给共享到request域中了,但是这里只是我们的一个查询方法,我们需要找到他输入值的地方, 看到下面的addComment方法正好对应上了一个输出xss ,一个插入xss的地方。
查看该方法 commentService.addComment(comment); 调用addComment方法将值传入,不出意外的话传入的comment参数就是接收过来的一个实体类。我们来Ctrl+左键点击 Comment类进行跳转到该类去。
主要关注变量为 String类型的变量,因为Java是强类型的语言。
等会对这几个变量的地方进行插入xss代码。
回到刚才的控制器代码
点击ctrl+左键点击addComment 追溯到CommentService 的接口
同样的方式再追溯到CommentService的实现类
使用的是commentDao调用addComment 传入参数进行添加数据。继续追溯上去
在这里我们就看到了dao接口中的addcomment方法,dao接口中并没有myabtis的注解,说明是xml配置文件配置的。
后面的直接开启全局搜索,搜索addComment指定xml文件。
点击进去看到,我们的提交的内容会被插入数据库里面,也就是说这是个存储型xss
逻辑这里其实已经很清晰了。
具体的还得看实操,查看Controller获取路径。
漏洞位置:
http://127.0.0.1:82/web/comment/ajax/addcomment
结合刚刚查看的Comment实体类,我们已经找到哪些地方可以去插xss了。
访问一下漏洞地址
这里还需要登录后才能访问,那就登录一下吧!
系统错误,我。。。。。肯定又是上次那张表的问题,那几张表没建立好。
算了,洗洗睡吧!!!
0x03 结尾
Java的xss审计都是自己琢磨,结合一下网上的文章,复现一下,很快就熟悉了。
标签:审计,XSS,Java,xss,request,content,jsp,response
来源: https://www.cnblogs.com/nice0e3/p/13655552.html
Java接口xss,Java审计之XSS篇相关推荐
- Java接口和Java抽象类(转,原文已被删除)
1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法 ...
- Java接口和Java抽象类
Java接口和Java抽象类有太多相似的地方,又有太多特别的地方,究竟在什么地方,才是它们的最佳位置呢?把它们比较一下,你就可以发现了. 1.Java接口和Java抽象类最大的一个区别,就在于Java ...
- Java接口和Java抽象类的认识
在没有好好地研习面向对象设计的设计模式之前,我对Java接口和Java抽象类的认识还是很模糊,很不可理解. 刚学Java语言时,就很难理解为什么要有接口这个概念,虽说是可以实现所谓的多继承,可一个只有 ...
- Java接口–历年来Java 9之旅–默认和私有方法
介绍 Java接口已经比Java版本进行了更多的演变,而Java 8和Java 9则有所发展.在本文中,我们将探讨接口在Java 8之前的样子以及如何在Java 8和Java 9中得到增强. Java ...
- java 接口入门,Java接口入门教程解读
Java接口入门教程解读,学习Java技术开发是一个长期的过程,今天小编介绍Java接口相关知识内容 接口 是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量.构造方法和成员方法 ...
- beetl调用java方法_Beetl通过JAVA接口获取JAVA中的变量
标签: 模板语言绑定变量都是程序主动绑定到beetl,经过努力现在在beetl上实现了模板语言主动发出请求,来执行绑定. 最近做项目用到beetl,因为模板需要用到的变量很多,如果直接绑定,系统消耗很 ...
- lambda java 接口_lambda – Java 8中的功能接口是什么“功能形状”?
在 Java 8中,新包java.util.function包含许多功能接口.该软件包的文档( http://docs.oracle.com/javase/8/docs/api/java/util/f ...
- Java接口和Java抽象类有什么不同
abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力. abstract class和inte ...
- java接口 运动员,JAVA面向对象进阶实例【教练和运动员日常安排】
编程目标 分别执行乒乓球和篮球的教练和学生行为,如下: 乒乓球教练|乒乓球学生|篮球教练|篮球学生 工作内容|教学 |练乒乓球 | 教学|练篮球 餐饮|教练餐 |学生餐 |教练餐 |学生餐 额外内容| ...
- java 接口与抽象类的区别
1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法 ...
最新文章
- 符号主义对深度学习的意义浅谈
- 应用服务攻击工具clusterd
- T-SQL游标学习总结
- Python-语句执行
- js visibility和display区别(附代码实例)
- create-react-app教程-源码篇
- java leader 选举_简述ZK的fastleaderelection选举leader的算法
- Idea加快开发的10个技巧
- NHibernate之映射文件配置说明(转载1)
- RTCM3.3电文信号,消息类型GPS MSM4的解码
- Photoshop 深度学习 数据集标签制作 、注意事项 以及标签颜色的编码、统计和快速像素颜色替换(python)
- 资深架构师推荐 21 本技术好书
- Android Q Data Setup for Short Connection
- 某医院门诊预约系统/医院预约挂号系统
- C++ 数学与算法系列之高斯消元法求解线性方程组
- 某阿里大神想和java程序员说的话
- 怀念王选,怀念北大计算机研究所
- NOJ1635看望朋友
- 使Activity关闭后不执行onDestroy()
- 历史上康熙皇帝真的很喜欢微服私访吗?
热门文章
- Linux 命令(63)—— nm 命令
- GNU C getopt()、getopt_long() 与 getopt_long_only() 获取命令行参数
- Linux 命令(10)—— split 命令
- 给定入栈序列,判断出栈序列是否合法
- C++ 关于 main 函数的几点说明
- packmol建模流程-计算
- 组合查询--表单对象转化为json数组
- 杭电OJ(HDU)-ACMSteps-Chapter Three-《FatMouse#39; Trade》《今年暑假不AC》《排名》《开门人和关门人》...
- 【Android UI设计与开发】9:滑动菜单栏(一)开源项目SlidingMenu的使用和示例-转...
- hoj 1640 Mobile phones //poj 1195 Mobile phones 二维树状数组