当前位置:WooYun(白帽子技术社区) >> java >> j2ee框架使用中,框架特点及不良习惯容易引发的安全问题:越权操作!
//一个简单的问题,在乌云也留个底本!
越权操作:是个很常见的安全问题,应用开发或设计者对访问权限没有考虑或考虑不全。他们即希望于用个未知的访问URL来打发不熟悉开发的攻击者,但如果熟悉就很容易被猜解了。
MVC模式的框架,如:Struts2(其他常规框架或自己写的框架同理,这里框架优点我们就不去讨论了!),它对访问控制弄了个类似默认的规范,对于同一业务对象或者叫DTO的操作都可以(注意这里的“可以”之词,是不强迫你,但默认要你按这个流程开发了,由开发者决定的问题。)放在一个类里面实现,而不同的操作(无非:C(增)R(查)U(改)D(删)等操作,)通过类里面的不同方法实现,但就是这个规范的引导加上一些开发时对实现方法的命名不良习惯及诸多因素的影响,可能导致安全问题的发生,如:
对于有权限考虑的应用,如果是个注册型的网站,简单拆分一下CRUD操作权限(在这里我们只讨论越权,平行权限之类等问题不考虑了!),C(增加即注册),及U(修改)用户是可以触及;而R(查询)、D(删除)只有管理员才能操作的,实例代码:import com.opensymphony.xwork2.ActionSupport;
public class MemberAction extends ActionSupport {
public String register() {
//注册用户,实例代码略...
return REGISTER;
}
public String add() {
//保存用户,实例代码略...
return ADD;
}
public String getList() {
//查询用户,实例代码略...
return LIST;
}
//其他方法省略...
public String execute() {
return SUCCESS;
}
}
当用户注册时,先访问:http://xxx.xxx.xxx/member.do?method=register注册,再通过:http://xxx.xxx.xxx/member.do?method=add保存数据。如果是一个了解j2ee开发流程的攻击者,马上就会猜解到method=xxx其他方法名(如关键字:list、getList)来访问管理员权限:http://xxx.xxx.xxx/member.do?method=getList。
在这里绝对不是偶然,在实际开发中,也不会将方法名称搞得很复杂,而且开发者在对框架学习之初对add、getList、delete等,这样类似枚举类型的关键字选词产生依赖,形成习惯,熟悉的攻击者就很容易猜解它。
值的注意的是,这里越权问题的产生,有一个很大因素:框架提供一个业务对象操作的类似规范(在同一个Action类中操作,框架不强迫,但结合上下文容易出现安全问题。主要是说这个问题,哈哈!)!
乌云案例:WooYun: 苏宁易购某站点应用设计缺陷!
//问题太简单,都无力去描述了,但发现你们做安全的人当前就是反复在做这些事情!
原文地址