先来看一道题。
攻防世界——bug
一个登录框:
下面有注册页面和找回密码页面,我们先注册:
注册成功,记住这个UID:5。进入:
上面的Manage页面只有管理员能用,Personal页面进去后是你的信息
可用来找回密码。此时我们抓个包看看:
发现包中有uid,cookie中有一个user,这个user应该是用户名的md5值或uid:用户名的MD5值,我们验证一下 格式是 UID:用户名
那么如果我们把uid和user改为admin的呢?那不就可以查看admin的信息了吗:
点一下forward:
得知了admin的生日和地址。
我们再来看一下之前那个找回密码页面:
输入基本信息后才能进入修改密码
然后,我们利用刚才得到的admin的生日和地址,就可以修改admin的密码了
修改成功。
登录admin账号:
越权成功。
在这里,还有一个越权漏洞点,就是进去忘记密码页面后输入新密码的地方:
我们输入一个新密码,抓包:
将username改成admin,即可修改admin的密码了:
基础知识
我们再来看看越权漏洞,在一些系统当中如果存在着多种用户角色,每一种角色有不同的权限。操作业务适合如果权限不严格可能会发生越权漏洞。越权分为垂直越权和平行越权,其产生原因包括:
1)业务系统存在用户权限验证
2)对用于的权限验证不严谨
3)用户能操作不属于自己权限的操作
越权漏洞是我们在测试过程中遇到比较多的漏洞,我们可以这样来理解越权漏洞,一个用户A一般只能够对自己本身的信息进行增删改查,然而由于后台开发人员的疏忽,没有在信息进行增删改查时候进行用户判断,从而导致用户A可以对其他用户进行增删改查等等操作。
平行越权
也可以把其称作访问控制攻击漏洞。Web应用程序在接收到用户的请求时,我们在增删改查某条数据时候,没有判断数据所对应的用户,或者在判断数据所属的用户时是通过从用户表单参数中获取userid来实现的,这里的话我们可以修改userid来实现水平越权。
在WEB系统中有商城,这个商城中必不可少的就有订单,订单肯定有一个店铺ID,我们通常把它设置为一个自增长的ID,这个ID是一个数字类型。在URL上面如果有一个订单ID就是100,攻击者会尝试100+1,当它ID等于101或者99的时候能否访问到。
如果能访问到并且这个订单信息不是我的,这个地方就存在着一个漏洞。 张三可以看到李四的订单信息,这个时候就存在着越权。张三和李四是平级的用户,他们两个权限是一样,互相可以看到平台信息这叫做平行越权。
这个有什么危害呢?
比如说这个网站有漏洞,如果是竞争对手他就可以知道用户在我的平台上下过订单的行为,然后去营销。如果把这个订单ID直接暴露出来,还有一种可能就是竞争对手会根据我们的订单IP的增长量,判断我们的增长量,就知道我们一天到底有多少订单。
平行越权防御方法:我们查询的时候必须加上当前用户的ID,就是orderID加上UID(UID必须从服务器取,而不是用户所传入的),这样不会出现张三可以看到李四的订单了。
垂直越权
接下来我们再看一下垂直越权,这是一个普通用户进入到后台管理系统中,他的权限就扩大化了。通常这种情况下,后台会集成到更多的控制器来统一管理,但依然有一些邮件会漏掉并没有集成到,就会发生这种情况。
黑客不会一个一个找,会通过一些扫描器发现漏洞进去。建议不要把自增长ID暴露出来,可以做对称加密或者非对称加密,先转换为一个字母类型,让别人看不到你的数字型的ID是多少。别人就没有办法通过这个加一减一的方式越权,也看不到你的一天业务增长量。
建议尽量把前台的方法和后台的方法区分开来。越权,其实不仅仅限于展示,我们刚刚看到了这个订单,张三可以看到李四的订单信息是查看,但是有的时候我们修改订单的时候也会出现这个问题,所以在读写的时候都需要注意一下这个越权的问题。