### 简要描述: 两个两个一起发吧,凑一对。Jeebbs 一处逻辑漏洞和一处定向XSS。轻易的获取对方cookie...明文密码... ### 详细说明: Jeebbs基本上都没有判断referer,没有token,可造成csrf。 1、不科学的积分漏洞 积分兑换方法如下: ``` @RequestMapping(value = "/member/creditExchange.jspx") public void creditExchange(Integer creditIn, Integer creditOut, Integer creditOutType, Integer miniBalance, String password, HttpServletRequest request, HttpServletResponse response) { } ``` 可以看到这里直接用了SpringMvc注入参数,而这些参数恰恰是控制程序逻辑的关键。比如构建如下URL,通过GET或者POST方式都能恶意修改用户的积分: http://localhost/jeebbs/member/creditExchange.jspx?creditIn=26&creditOut=-27600&creditOutType=1&miniBalance=-10000000&password=wooyun 因为他的逻辑是这么写的: ``` if(user.getPoint()-creditOut>miniBalance){ balance=true; }else{ flag=1; } ``` 从User对象里面取出积分的数值,而积分兑换威望具体需要多少是在确定兑换关系后由ajax去后台计算出来的,提交的时候也没有验证计算的结果有没有被客户端改过。其中的creditOut和miniBalance都是我们可控的。所以这个等式不管在什么情况下我们都可以让它成立。 Cookie不加密我的明文密码又出来晒太阳了。 [<img src="https://images.seebug.org/upload/201307/312232480e1c2ff8f21c5aa65a03914d35db65c7.png" alt="1.png" width="600"...
### 简要描述: 两个两个一起发吧,凑一对。Jeebbs 一处逻辑漏洞和一处定向XSS。轻易的获取对方cookie...明文密码... ### 详细说明: Jeebbs基本上都没有判断referer,没有token,可造成csrf。 1、不科学的积分漏洞 积分兑换方法如下: ``` @RequestMapping(value = "/member/creditExchange.jspx") public void creditExchange(Integer creditIn, Integer creditOut, Integer creditOutType, Integer miniBalance, String password, HttpServletRequest request, HttpServletResponse response) { } ``` 可以看到这里直接用了SpringMvc注入参数,而这些参数恰恰是控制程序逻辑的关键。比如构建如下URL,通过GET或者POST方式都能恶意修改用户的积分: http://localhost/jeebbs/member/creditExchange.jspx?creditIn=26&creditOut=-27600&creditOutType=1&miniBalance=-10000000&password=wooyun 因为他的逻辑是这么写的: ``` if(user.getPoint()-creditOut>miniBalance){ balance=true; }else{ flag=1; } ``` 从User对象里面取出积分的数值,而积分兑换威望具体需要多少是在确定兑换关系后由ajax去后台计算出来的,提交的时候也没有验证计算的结果有没有被客户端改过。其中的creditOut和miniBalance都是我们可控的。所以这个等式不管在什么情况下我们都可以让它成立。 Cookie不加密我的明文密码又出来晒太阳了。 [<img src="https://images.seebug.org/upload/201307/312232480e1c2ff8f21c5aa65a03914d35db65c7.png" alt="1.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201307/312232480e1c2ff8f21c5aa65a03914d35db65c7.png) [<img src="https://images.seebug.org/upload/201307/31223533a63fea5fb05874c2558eadaeac5cd69a.png" alt="2.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201307/31223533a63fea5fb05874c2558eadaeac5cd69a.png) 2、打招呼XSS [<img src="https://images.seebug.org/upload/201307/312238591971c925b6a5089bd55d06579ec7317e.png" alt="3.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201307/312238591971c925b6a5089bd55d06579ec7317e.png) 逻辑有做判断:1、用户名为空。2、不允许发送消息给自己。3、用户名不存在。 在控制层并没有做过滤: [<img src="https://images.seebug.org/upload/201307/3122391158857af1e141f348de91a419e1eecffd.png" alt="4.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201307/3122391158857af1e141f348de91a419e1eecffd.png) 在调用com.jeecms.bbs.manager.impl. BbsMessageMngImpl.java的sendMsg方法的时候依旧没有过滤。到最终的BbsMessageDaoImpl 的save方法还是没有过滤就直接储存了; 一般性的做法,关系到用户交互的地方最好做referer和xss过滤检测,控制层负责收集数据的同时最好处理下用户的请求,就算controller不处理起码在service层做下处理吧。 [<img src="https://images.seebug.org/upload/201307/312239493839a280fbb712d2f56e9a74b6593acf.png" alt="5.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201307/312239493839a280fbb712d2f56e9a74b6593acf.png) ### 漏洞证明: [<img src="https://images.seebug.org/upload/201307/31223533a63fea5fb05874c2558eadaeac5cd69a.png" alt="2.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201307/31223533a63fea5fb05874c2558eadaeac5cd69a.png) [<img src="https://images.seebug.org/upload/201307/312239493839a280fbb712d2f56e9a74b6593acf.png" alt="5.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201307/312239493839a280fbb712d2f56e9a74b6593acf.png)