越权漏洞原理
浏览器对用户提交的数据请求没有经过严格的权限设置,导致用户可以拥有观察或更改其他用户信息的功能。
越权漏洞被分为两类
一类是水平越权,一类是垂直越权。
水平越权 :用户在权限相同级别下的组,可以进行越权访问、修改、删除数据。
垂直越权 :用户在不同权限下的组,可以进行高级别的权限使用。
漏洞成因
前端原因:
只对页面进行更高权限的隐藏
实际上并没有对后端的进行一个权限过滤,只是对前端进行隐藏。根据用户权限的判断,进行选择显示,但是功能点还是可以触发。
正确的做法应该是用户权限与功能点进行绑定。
后端原因:
1.没有进行权限设置(通常来说我们是判断用户组编号、用户等级、用户组来确定权限)
2.没有进行参数过滤
3.数据库中同组成员不同权限
拿pikachu靶场的垂直越权源码举例
靶场验证
1.水平越权
进入靶场随便创一个新用户,查看信息,并进行抓包观察。是否有可以利用的点。
这里可以看到我们的用户名是可以修改的。我们随便改一个用户的名称,观察是否可以进行数据读取。
可以看到,我们改变username就能查看其他用户的信息。(我们这里有个问题就是怎么获取其他用户的username。其实是由很多办法的,比如相同账号名不能创建、在网页中浏览用户、在url中进行uid遍历)
漏洞成因
没有进行session验证。
2.垂直越权
我们先抓取一下添加用户的数据包
我们退出admin账户,进入pikachu账户。在pikachu账户这里进行用户添加。
在这里呢我们使用admin的seesion明显是不行的。我们将seesion改为pikachu的。
可以看到已经成功创建。
漏洞成因
他只验证了一个登录的状态,没有对权限进行一个验证。
注入条件
1.获取数据包
在前端中有提交新用户系统,但是对等级有限制,这时我们就可以根据这个数据包进行修改。
有网站源码,可以自己搭一个本地环境进行测试。
猜测添加用户的数据包。
2.对用户等级没有限制
墨者实例靶场
他这里是想让我们通过test这个用户进行越权访问马春生这个用户的信息。
我们先登录账号再抓一只下包看看利用点。
像这里的uid和card_id一看就是可以进行修改的地方。
我们将uid改为machunsheng试试,发现不能进行访问,应该是uid改为了其他值。
查看页面的源代码,发现和card_id结构相似,我们尝试一下。
这里把编号为20128880317的username和passwd爆出来了。
根据观察尾号16就是马春生。这里的passwd应该是md5加密的,我们用在线解密一下就可以了。
到这里就完成了。
在没有提示的情况下可以使用burpsuit的爆破功能。