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

fd2e8f467e591256771a8e53e6304860.png

传参一个1过去成功输入了,那么再来传一个xss的payload试试。

http://localhost:8080/untitled3_war_exploded/demo?content=

bf4ad63984e3559b24247741b648d9e1.png

成功的弹出了一个框

在审计中需要关注的是参数是否可控,如果可控传入的参数是否会被过滤后共享到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

102dcf9fa15d50aa4575daa46ecbe651.png

这里就来找一下存储型xss,反射的xss意义并不大。

95a465a1a5923a7936494c967c0425cb.png

点击选择一个文件来看看他的代码,这里直接就给共享到request域中了,但是这里只是我们的一个查询方法,我们需要找到他输入值的地方, 看到下面的addComment方法正好对应上了一个输出xss ,一个插入xss的地方。

7f45a4e6ea1066392f607fb53a39a0ed.png

查看该方法 commentService.addComment(comment); 调用addComment方法将值传入,不出意外的话传入的comment参数就是接收过来的一个实体类。我们来Ctrl+左键点击 Comment类进行跳转到该类去。

48ce25c03020bb924ab1068d76b1e52d.png

主要关注变量为 String类型的变量,因为Java是强类型的语言。

等会对这几个变量的地方进行插入xss代码。

回到刚才的控制器代码

87e2cb31651eef9f6b3db438ade18a7c.png

点击ctrl+左键点击addComment 追溯到CommentService 的接口

948ab0dc5c05d46cd2cbf252067804c3.png

同样的方式再追溯到CommentService的实现类

6037d47e9d4b8671003841fc18a317bf.png

使用的是commentDao调用addComment 传入参数进行添加数据。继续追溯上去

392208bdb960207fc96a418a0b776451.png

在这里我们就看到了dao接口中的addcomment方法,dao接口中并没有myabtis的注解,说明是xml配置文件配置的。

后面的直接开启全局搜索,搜索addComment指定xml文件。

0f46754528e32ddb37bb6746fb705113.png

点击进去看到,我们的提交的内容会被插入数据库里面,也就是说这是个存储型xss

fc2e2561f396cfa20191117349c017e0.png

1a3b9f6059f5da31a6ac96b0f6987b1b.png

逻辑这里其实已经很清晰了。

具体的还得看实操,查看Controller获取路径。

f94538f6b4e51ba4c8322b4fdfc5222f.png

4b6a8207b2c36e55baadde88188e9f87.png

漏洞位置:

http://127.0.0.1:82/web/comment/ajax/addcomment

结合刚刚查看的Comment实体类,我们已经找到哪些地方可以去插xss了。

访问一下漏洞地址

f113049735e7da6f6dec70a1f076b32e.png

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

cea53094537b8fa2043261947b3a4667.png

1ccbea445017a9b59ae84f97fbd597d9.png

系统错误,我。。。。。肯定又是上次那张表的问题,那几张表没建立好。

算了,洗洗睡吧!!!

0x03 结尾

Java的xss审计都是自己琢磨,结合一下网上的文章,复现一下,很快就熟悉了。

标签:审计,XSS,Java,xss,request,content,jsp,response

来源: https://www.cnblogs.com/nice0e3/p/13655552.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值