Web攻防作业 | 越权访问漏洞全解析
2022-11-24 08:2:33 Author: Ms08067安全实验室(查看原文) 阅读量:37 收藏

文章来源 | 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进行抓包判断参数含义并重放

在修改页面中使用useid进行区分用户,将useid修改未管理员的名字

⑦、使用修改后的密码登录管理员账户

后台登录路径:http://127.0.0.1:8003/admin/login/login.php
2、seacmsV7.0越权漏洞复现

①、下载metinfoV4.0CMS源码进行网站搭建

  • 源码:seacms7.0.rar

②、使用phpstudy搭建该网站 ③、web访问网站地址进入安装目录

④、创建两个普通用户进行登录

会员注册路径: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  \\关闭该靶场

③、使用浏览器访问

访问路径:http://180.76.161.10:5984/

④、使用burp抓包流量并修改数据尝试创建用户

  • 该数据包创建一个用户,字段type的值对应用户,字段name的值代表账号,字段roles的值代表用户权限,字段password的值对应密码。
  • 创建admin权限用户提示只有admin才能进行设置。

⑤、利用漏洞进行创建用户

  • 字段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"

⑥、利用创建管理员登陆后台

后台登陆路径:http://180.76.161.10:5984/_utils/#login

—  实验室旗下直播培训课程  —


来和20000+位同学加入MS08067一起学习吧!


文章来源: http://mp.weixin.qq.com/s?__biz=MzU1NjgzOTAyMg==&mid=2247504492&idx=2&sn=0ac18c99218aca11c7322b784ffda4ca&chksm=fc3c6b6dcb4be27b7aecc46896fc3dda44b90efbe48c88c3d34544fb5cc4a8958923a4569328#rd
如有侵权请联系:admin#unsafe.sh