转载

JavaEE论坛2.0审计记录

00×1 前言

毕业设计临近啊~ 要检查了~ 赶紧去网上扣了几套SSM的论坛程序。顺手就审计了一下。

源程序下载地址: http://www.mycodes.net/143/9369.htm

官网: http://bbs.javaee.cc/

审计出来之后就赶紧跑去官网测试。谁知道,不能注册。于是找了其他的站点进行了复现~

00×2 前台存储xss

这个是黑盒测试出来的,因为用了Ueditor的富文本编辑器。然后直接构造了payload,导致帖子正文xss

直接发帖->将富文本切换为HTML源代码编辑->发帖->查看帖子->触发正文xss

JavaEE论坛2.0审计记录

JavaEE论坛2.0审计记录

00×3 后台存储型xss#直打管理员

这里是因为输出的时候没过滤。导致的xss。先讲利用方法:

修改个人资料处,修改真实姓名为payload

JavaEE论坛2.0审计记录

前台访问会员个人资料处,触发

JavaEE论坛2.0审计记录

后台管理员再次触发

JavaEE论坛2.0审计记录

我们再来看一下更新的SQL语句

JavaEE论坛2.0审计记录

在入库的时候完全没做任何过滤,我们跟踪一下更新的方法。

JavaEE论坛2.0审计记录

eclipse跟踪一下方法

JavaEE论坛2.0审计记录

直接把前端表单传入的值放到了user这个类中,然后执行update方法,在跟一下service层

JavaEE论坛2.0审计记录

没有进行任何过滤。

然后看下sql语句

JavaEE论坛2.0审计记录

JavaEE论坛2.0审计记录

确实是没做啥过滤,直接入库了。然后从从数据库把内容拿出来渲染到页面上,也没做任何过滤,所以造成了xss

00×4 前台SQL盲注

触发的原因主要还是因为拼接了SQL语句。在mybatis框架中用了“#”符号才会预编译,用“$”符号就会拼接SQL语句了,如果这部分用户可控,那么就会造成SQL注入了,有人可能会问那我写SQL语句的时候全部用“#”号不就行了吗,这种想法是错误的。因为在某些常见场景下你必须要用”$”符号来进行SQL拼接,不然mybatis框架会报错。例如 like,in此类查询的时候就必须要用到“$”符号。详细可以看看这篇文章

https://mp.weixin.qq.com/s?__biz=MjM5OTk2MTMxOQ==&mid=2727827368&idx=1&sn=765d0835f0069b5145523c31e8229850&mpshare=1&scene=1&srcid=0926a6QC3pGbQ3Pznszb4n2q

这里的话,我们先来看下程序员对于所有的语句是怎么写的,查找一下用到了$符号的场景。

在JifenMapper.xml中看到了这处,其实还有很多处

JavaEE论坛2.0审计记录

然后全局搜索调用这个方法的类,因为大部分程序员是有规范的。我就发现了在JifenContriller这个类中调用了findpage这个方法

JavaEE论坛2.0审计记录

我们再来看下代码层,有没有做过滤。

JavaEE论坛2.0审计记录

还是直接一步传入,然后在入库的。

现在我们来分析入口在哪,

JavaEE论坛2.0审计记录

我们可以看到,从方法的定义来看,访问链接为 /user/jifen/index.do ,传入的参数是来自jifen,page两个类。那么,我们来看下jifen跟page这两个类有什么属性。

JavaEE论坛2.0审计记录

JavaEE论坛2.0审计记录

在Jifen这个类中,我们可以看到有着跟前面SQL语句中对应的字段,也就是说,starttime跟endtime这两个字段是用户可控的。

然后我们把它跑起来,查看这个请求是在哪个点触发的。经过测试之后,发现触发点是在积分搜索处触发的。

JavaEE论坛2.0审计记录

点击查询,抓包。

JavaEE论坛2.0审计记录

经过上面的分析,我们能确定是这个入口点了。然后先走一遍正常请求。

JavaEE论坛2.0审计记录

SQL日志:

JavaEE论坛2.0审计记录

打个单引号,看看~

JavaEE论坛2.0审计记录

看下SQL日志:

JavaEE论坛2.0审计记录

根本就没进库。

然后看下控制台,有我们熟悉的mysql语法报错了,确定了没过滤了。

JavaEE论坛2.0审计记录

构造payload

starttime=2018-09-13'or 1=1 or'&endtime=2018-09-20&type=1
跑出数据库

JavaEE论坛2.0审计记录

因为官网注册不了,于是找了其他站点做了测试。同样是成功注入出来的。

JavaEE论坛2.0审计记录

跑出了user():root@localhost

00×5 总结

对于注入这些的敏感点,还是要注重写代码层的防御。

原文  http://oldc.pro/代码审计javaee论坛v2-0通杀全版本/
正文到此结束
Loading...