[代码审计]JavaEE论坛V2.0#通杀全版本

00×1 前言

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

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

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

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

00×2 前台存储xss

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

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

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

这里是因为输出的时候没过滤。导致的xss。先讲利用方法:
修改个人资料处,修改真实姓名为payload

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

后台管理员再次触发

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

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

eclipse跟踪一下方法

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

没有进行任何过滤。

然后看下sql语句

确实是没做啥过滤,直接入库了。然后从从数据库把内容拿出来渲染到页面上,也没做任何过滤,所以造成了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中看到了这处,其实还有很多处

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

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

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

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

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

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

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

点击查询,抓包。

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

SQL日志:

打个单引号,看看~

看下SQL日志:

根本就没进库。

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

构造payload

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

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

跑出了user():root@localhost

 

00×5 总结

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

 


发表评论

电子邮件地址不会被公开。 必填项已用*标注