| 
                             
                              | 
                                   
                                    | 编辑推荐: |   
                                    | 本文来自于csdn,本文章主要介绍了如何通过了解整个应用的业务逻辑,逆向回溯的方式只能对通用漏洞进行快速审计。 |  |  按照业务类型正向审计  逆向回溯的审计方式针对特征明显的安全漏洞挖掘是非常有效的,但是同样会有很多弊端,通过逆向回溯的方式只能对通用漏洞进行快速审计,不能全面挖掘更有价值的漏洞,如果在时间允许的情况下,企业中安全运营对自身产品进行代码审计,就需要了解整个应用的业务逻辑,比如越权类漏洞,需要了解应用中权限划分,每一级别用户的功能,这样才能很好的发现并确定哪些操作是非法的。 
                            1、某系统越权查看任意用户个人资料 
                            业务类型的正向审计通常从前端页面开始,因为页面会有系统中大部分功能展示,找出功能所对应的URL就是我们所审计数据流的输入点,某系统修改个人资料处存在平行越权。  在客户现场审计大部分情况是没有测试环境的,也就是只能通过前端的展示页面对每一个功能进行审计。客户会直接将项目代码交过来,首先要将它导入编辑器,如果属于Eclipse导出的项目直接导入就可以,但是相对来说没有这么理想的情况,那么可以使用代码编辑器,例如SublimeText,如下图: 
 可以直接将文件夹拖拽左边目录树,拿到4个代码包,沟通了解到coreServer为核心业务代码属于model层,apiServer为前端的API代码属于controller层,jspxcms为CMS核心和后端管理代码属于view层,cas为单独的单点登录服务包暂时不在此漏洞的审计范围内。  在进行审计之前我们要了解整个应用的架构,通过查看web.xml了解到项目采用SpingMVC架构,并且未在web.xml中配置安全过滤器、身份校验机制,如下图: 
 SpingMVC的常用@RequestMapping注解为控制器指定可以处理哪些 URL 请求,也就是说可以直接通过在控制层搜索URL请求,即可找到控制层所对应的业务逻辑代码。  通过查看jspxcms中html页面找到修改个人资料的功能页面user/profile.html(可以通过关键字去搜索相应功能页面,比如用户中心搜索user,修改密码搜索password),如下图: 
 请求的URL会在js文件中,也会在form表单中。  当找到查看个人资料请求的URL后,可以通过SublimeTxt的全局搜索找到apiserver中所对应的业务逻辑代码,如下图: 
 跟入coreServer中userService类中进行审计,如下图: 
 2、Jeebbs邮箱逻辑验证漏洞: 
                            注册的URL地址是:http://localhost/jeebbs/register.jspx, register.jspx很明显是控制层映射的URL,第一要务是找到它。然后看他的逻辑。  Tips:Eclipse全局搜索关键字方法: 
 根据搜索结果找到对应文件: 
 根据结果找到对应的public class RegisterAct类,并查看对应逻辑代码: 
 找到控制层的入口后即可在对应的方法内设上断点,然后发送请求到控制层的URL进入Debug模式。 
                            注册发送数据包时用Tamper data拦截并修改请求当中的email为xss攻击代码。 
 
 
                            选择任意对象右键Watch即可查看对应的值(任意完整的,有效的对象包括方法执行)。  F6单步执行。 
 F5进入validateSubmit: 
 F6跟到125行注册调用: 
 F3可以先点开registerMember类看看: 
 找到接口实现类即最终的注册逻辑代码: 
 3、积分负充漏洞 
 积分兑换方法如下: 
                             
                              | @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都是我们可控的。所以这个等式不管在什么情况下我们都可以让它成立。 
 4、打招呼功能处XSS 
                            逻辑有做判断:1、用户名为空。2、不允许发送消息给自己。3、用户名不存在。  在控制层并没有做过滤: 
 在调用com.jeecms.bbs.manager.impl. BbsMessageMngImpl.java的sendMsg方法的时候依旧没有过滤。到最终的BbsMessageDaoImpl 
                            的save方法还是没有过滤就直接储存了; 
                            一般性的做法,关系到用户交互的地方最好做referer和xss过滤检测,控制层负责收集数据的同时最好处理下用户的请求,就算controller不处理起码在service层做下处理吧。 
 |