文章来源 | MS08067 Web高级攻防第3期作业
本文作者:xiaobai05050505
越权访问漏洞
一、越权漏洞概述
1、概述
通常情况下,一个 Web 程序功能流程是登录 - 提交请求 - 验证权限 - 数据库查询 - 返回结果。在验证权限阶段逻辑不够缜密,便会导致越权。(常见的程序都会认为通过登录后即可验证用户的身份,从而不会做下一步验证,最后导致越权。)
2、分类
①、未授权访问:没有某个功能权限,通过越权操作,获取了某个功能权限;②、水平越权:本来只能操作自己的数据,比如增删改查,通过越权操作,能操作其他同等权限账号的数据。③、垂直越权:本来有个账号只有低权限,通过越权操作,获取了高权限。
3、原因
①、通过隐藏 URL实现验证权限:
有些程序的管理页面只有管理员才会显示,普通用户无法看不到,程序开发人员利用 URL 实现访问控制。(但若URL 泄露或被恶意攻击者猜到后,这会导致普通用户访问导致出现越权攻击。)
②、直接对象引用实现验证权限:
这种通过修改验证参数就可以模拟成其他用户进行访问。(例如查看用户信息页面 URL 后加上自己的 id 便可查看,当修改为他人的 ID 号时会返回他人的信息,便产生了水平越权。)
③、多阶段功能处疏忽验证权限:
多阶段功能是一个功能由多个阶段来进行实现。(例如修改密码,可能第一步是验证用户身份信息,号码验证码类的。当验证成功后,跳到第二步,输入新密码,很多程序会在这一步不再验证用户身份,导致恶意攻击者抓包直接修改标识身份参数值,导致可修改其他用户密码。)
④、静态文件下载疏忽验证权限:
很多网站的下载功能,一些被下载的静态文件,可能只有付费用户或会员可下载。(但当这些文件的 URL 地址泄露后,导致任何人可下载,如果知道 URL 命名规则,则会便利服务器的收费文档进行批量下载。)
⑤、平台验证权限配置错误:
一些程序会通过控件来限制用户的访问。(例如后台地址,普通用户不属于管理员组,则不能访问。但当配置平台或配置控件错误时,就会出现越权访问。)
二、越权漏洞发现
思路:①、使用已登陆账户访问页面的URL让未登录用户直接访问,根据是否能访问判断是否由未授权访问 ②、使用普通账户标识信息去替换管理员账户标识,根据是否能进行访问判断是否有垂直越权漏洞 ③、使用普通账户标识信息去替换其他普通账户标识,根据是否能进行访问判断是否有水平越权漏洞
三、越权漏洞复现
1、metinfoV4.0越权漏洞复现
①、下载metinfoV4.0CMS源码进行网站搭建
下载地址:https://www.metinfo.cn/upload/file/update/MetInfo4.0.zip
其他版本下载地址:http://www.metinfo.cn/upload/file/update/MetInfox.x.x.zip(将x.x.x改成对应版本即可)
源码:MetInfo4.0.zip
②、使用phpstudy搭建该网站 ③、web访问网站地址进入安装目录 ④、创建普通用户进行登录
(:/0fc4a4ce23144741bffd5808ae208522)
会员注册路径:http://127.0.0.1:8003/member/login.php?lang=cn
⑤、进入会员中心页面修改用户信息 ⑥、使用burp进行抓包判断参数含义并重放
![5e1899947912fc057269715813f50716.png](https://i-blog.csdnimg.cn/blog_migrate/a9efbf3ea178cb30dda31b5465d8a310.png)
在修改页面中使用useid进行区分用户,将useid修改未管理员的名字
⑦、使用修改后的密码登录管理员账户
![63533861eeb32f997af728642346b8a1.png](https://i-blog.csdnimg.cn/blog_migrate/45e3f91cbe98556aa0d83c2e0a442d62.png)
后台登录路径:http://127.0.0.1:8003/admin/login/login.php
2、seacmsV7.0越权漏洞复现
①、下载metinfoV4.0CMS源码进行网站搭建
源码:seacms7.0.rar
②、使用phpstudy搭建该网站 ③、web访问网站地址进入安装目录
![1258262325c091df94af108bede7eac0.png](https://i-blog.csdnimg.cn/blog_migrate/2044cd29642479c2b480ec133c27f6dc.png)
④、创建两个普通用户进行登录
会员注册路径:http://127.0.0.1:8004/reg.php
⑤、使用其中一个进入会员中心页面修改用户信息 ⑥、使用burp进行抓包判断参数含义并重放
抓包分析:
在普通用户与管理用户修改信息时,所有的cookie信息一致
普通用户修改密码时,决定修改账号的为email参数,在修改信息时将email参数改为其他普通用户邮箱即可登陆其他账户
管理员用户使用需改信息时,决定修改账号的为username参数,将该参数修改可直接修改其他管理员密码或者直接创建管理员用户
后台登陆路径:http://127.0.0.1:8004/847pno/login.php?gotopage=%2F847pno%2F \\该路径为系统创建时自动生成
⑦、使用修改后的密码登录另一个账号
3、CouchDB(CVE-2017-12635)越权漏洞复现
概述: Apache CouchDB是一个开源数据库,专注于易用性和成为”完全拥抱web的数据库”。CouchDB 会默认会在 5984 端口开放 Restful 的 API 接口,用于数据库的管理功能。它是一个使用JSON作为存储格式,JavaScript作为查询语言,MapReduce和HTTP作为API的NoSQL数据库。
影响版本:小于 1.7.0 以及 小于 2.1.1
原理: Erlang和JavaScript,对JSON解析方式的不同,对于重复的键Erlang会存储两个值,而JavaScript只存储第二个值。
复现:①、使用docker搭建vulhub靶场 ②、进入靶场进行启动靶场
路径:vulhub/couchdb/CVE-2017-12635
命令:
docker-compose up -d \\下载启用该靶场
docker ps \\查看docker运行
docker-compose down -v \\关闭该靶场
③、使用浏览器访问
![6cbdbf196a4f1cadae49b063548f8c6f.png](https://i-blog.csdnimg.cn/blog_migrate/1951414a47a8a73a53a165aa561b402f.png)
访问路径:http://180.76.161.10:5984/
④、使用burp抓包流量并修改数据尝试创建用户
![2b954dd3436ba206d18814e3cd33fa56.png](https://i-blog.csdnimg.cn/blog_migrate/3a9aee1276471f8e648494bee06df867.png)
该数据包创建一个用户,字段type的值对应用户,字段name的值代表账号,字段roles的值代表用户权限,字段password的值对应密码。
创建admin权限用户提示只有admin才能进行设置。
⑤、利用漏洞进行创建用户
![2ab9a9c4a30824816f309f1c34884e53.png](https://i-blog.csdnimg.cn/blog_migrate/a843aef068e29d2921ca2cc29f3d7168.png)
字段roles的值代表用户权限,使用两个值进行设置,在JavaScript在检测时,检测的值为第二个[],代表无权限,系统判定为安全。在CouchDB的Erlang部分实现身份验证和授权时,检测的值为"roles": ["_admin"],代表为管理员权限,故创建具有管理员权限账户。
payload:
PUT /_users/org.couchdb.user:xiaobai HTTP/1.1
{
"type": "user",
"name": "xiaobai",
"roles": ["_admin"],
"roles": [],
"password": "xiaobai"
⑥、利用创建管理员登陆后台
![2d180afe58968e96ae131bdafddb6754.png](https://i-blog.csdnimg.cn/blog_migrate/56b741639575fecd8d7035ede1241a05.png)
后台登陆路径:http://180.76.161.10:5984/_utils/#login
— 实验室旗下直播培训课程 —
来和20000+位同学加入MS08067一起学习吧!