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代码:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
${requestScope.content}
</head>
<body>
</body>
</html>
启动tomcat,访问url:
http://localhost:8080/untitled3_war_exploded/demo?content=1

传参一个1过去成功输入了,那么再来传一个xss的payload试试。
http://localhost:8080/untitled3_war_exploded/demo?content=<script>alert("xss")</script>

成功的弹出了一个框
在审计中需要关注的是参数是否可控,如果可控传入的参数是否会被过滤后共享到request域中,如果在可控和不被过滤的情况下,就很有可能存在xss漏洞。
防御xss策略
我们需要防御xss漏洞的攻击,就需要添加一个方法,在传入前先调用该方法进行一次过滤,但是这样的方式比较繁琐,这时候就可以使用ESAPI来帮我们过滤。
ESAPI介绍:
企业安全API(ESAPI)项目是OWASP项目,可为每个Web平台创建简单的强大安全控件。安全控件并不容易构建。您可以在OWASP网站上了解无聊的开发人员的数百个陷阱。通过为开发人员提供一组强大的控件,我们旨在消除创建安全Web应用程序的某些复杂性。这可以在整个SDLC中节省大量成本。
据说可以应付大部分的web攻击漏洞。
在pom.xml导入ESAPI坐标
<!-- https://mvnrepository.com/artifact/org.owasp.esapi/esapi -->
<dependency>
<groupId>org.owasp.esapi</groupId>
<artifactId>esapi</artifactId>
<version>2.2.1.1</version>
</dependency>
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了。
<script>alert("1")</script>
访问一下漏洞地址

这里还需要登录后才能访问,那就登录一下吧!


系统错误,我。。。。。肯定又是上次那张表的问题,那几张表没建立好。
算了,洗洗睡吧!!!
0x03 结尾
Java的xss审计都是自己琢磨,结合一下网上的文章,复现一下,很快就熟悉了。
Java审计之XSS篇的更多相关文章
- Java 审计之SSRF篇
Java 审计之SSRF篇 0x00 前言 本篇文章来记录一下Java SSRF的审计学习相关内容. 0x01 SSRF漏洞详解 原理: 服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过 ...
- Java 审计之XXE篇
Java 审计之XXE篇 0x00 前言 在以前XXE漏洞了解得并不多,只是有一个初步的认识和靶机里面遇到过.下面来 深入了解一下该漏洞的产生和利用. 0x01 XXE漏洞 当程序在解析XML输入时, ...
- Java审计之SQL注入篇
Java审计之SQL注入篇 0x00 前言 本篇文章作为Java Web 审计的一个入门文,也是我的第一篇审计文,后面打算更新一个小系列,来记录一下我的审计学习的成长. 0x01 JDBC 注入分析 ...
- Java审计之命令执行篇
Java审计之命令执行篇 0x00 前言 在Java中能执行命令的类其实并不多,不像php那样各种的命令执行函数.在Java中目前所知的能执行命令的类也就两种,分别是Runtime和 ProcessB ...
- 漏洞经验分享丨Java审计之XXE(下)
上篇内容我们介绍了XXE的基础概念和审计函数的相关内容,今天我们将继续分享Blind XXE与OOB-XXE的知识点以及XXE防御方法,希望对大家的学习有所帮助! 上期回顾 ◀漏洞经验分享丨Java ...
- 漏洞经验分享丨Java审计之XXE(上)
最近在审计公司的某个项目时(Java方面),发现了几个有意思的Blind XXE漏洞,我觉得有必要分享给大家,尤其是Java审计新手,了解这些内容可以让你少走一些弯路. Java总体常出现的审计漏洞如 ...
- Java审计之文件操作漏洞
Java审计之文件操作漏洞篇 0x00 前言 本篇内容打算把Java审计中会遇到的一些文件操作的漏洞,都给叙述一遍.比如一些任意文件上传,文件下载,文件读取,文件删除,这些操作文件的漏洞. 0x01 ...
- Java多线程系列--“基础篇”11之 生产消费者问题
概要 本章,会对“生产/消费者问题”进行讨论.涉及到的内容包括:1. 生产/消费者模型2. 生产/消费者实现 转载请注明出处:http://www.cnblogs.com/skywang12345/p ...
- Java多线程系列--“基础篇”04之 synchronized关键字
概要 本章,会对synchronized关键字进行介绍.涉及到的内容包括:1. synchronized原理2. synchronized基本规则3. synchronized方法 和 synchro ...
随机推荐
- 什么是XML? 什么是DTD?
XML XML称为Extensible Markup Language,意思是可扩展的标记语言.XML语法上和HTML比较相似,但HTML中的元素是固定的,而XML的标签是可以由用户自定义的. W3C ...
- java 封装与this关键字
一 封装 1.封装的概述 封装,它也是面向对象思想的特征之一.面向对象共有三个特征:封装,继承,多态. 封装表现: 1.方法就是一个最基本封装体. 2.类其实也是一个封装体. 从以上两点得出结论,封装 ...
- 01 Arduino-点亮一盏LED灯
01 硬件连接 图片比较丑 特别说明:一般默认为二极管灯的压降是 2V 均值电流为15ma,所以如果接在5V的电源上面,串联接的电阻值为200欧姆左右,可做适当调整 切记不允许把LED灯直接并联在5 ...
- Python对list操作的一些小技巧
Python对list操作的一些小技巧 由于要搞数学建模,于是从熟悉已久的C++转战Python.虽然才上手,但是Python的语法糖就让我大呼过瘾.不得不说相比于C/C++,Python对于数据的 ...
- GRE 协议 - 和 ISP 用的协议不一样怎么办
GRE 出现的背景: 随着网络(公司)规模的增大,越来越多的公司需要在跨区域之间建设自己的分公司.但随之也就出现了这样的问题,考虑这样一个场景.公司 A 在北京和上海间开设了两家公司,由于业务的需要, ...
- 旧 WCF 项目迁移到 asp.net core + gRPC 的尝试
一个月前,公司的运行WCF的windows服务器down掉了,由于 AWS 没有通知,没有能第一时间发现问题. 所以,客户提出将WCF服务由C#改为JAVA,在Linux上面运行:一方面,AWS对Li ...
- Salesforce学习笔记之Actions and Recommendations(续)
上次对这个Actions and Recommendations进行了初步研究,因为一些问题没有得到很好的解决,又花了很多时间,终于得到了一个比较好的解决方案.小结一下. 1. 生成Actions a ...
- three.js UV映射简述
今天郭先生来说一说uv映射,什么是uv映射?uv映射就是将二维的贴图映射到对象的一个面(或者多个面)上.说到这个问题,我们就不得不了解一下Geometry的点.面和uv的结构.我们以BoxGeomet ...
- 在.NET Core中使用MongoDB明细教程(3):Skip, Sort, Limit, Projections
到目前为止,我们已经讨论了创建文档, 检索文档,现在让我们来研究一下文档排序,指定要跳过或限制返回的文档数量,以及如何进行投影.此篇文章中的实例代码摘录自原文,未像前几篇文章一样进行实际代码的验证. ...
- Jmeter 常用函数(25)- 详解 __V
如果你想查看更多 Jmeter 常用函数可以在这篇文章找找哦 https://www.cnblogs.com/poloyy/p/13291704.html 作用 执行变量名表达式,并返回执行结果 它可 ...