用户
搜索
  • TA的每日心情
    开心
    5 小时前
  • 签到天数: 88 天

    连续签到: 3 天

    [LV.6]常住居民II

    i春秋作家

    Rank: 7Rank: 7Rank: 7

    9

    主题

    33

    帖子

    1578

    魔法币
    收听
    0
    粉丝
    4
    注册时间
    2018-6-2

    i春秋签约作者

    发表于 2020-9-23 10:47:00 58186
    本帖最后由 dll_s 于 2020-9-23 10:47 编辑

    0x30 访问控制与越权漏洞(一)

    在实验开始之前,我们先来介绍一下什么是访问控制:访问控制被破坏是一个常见的且严重的业务逻辑安全漏洞,由于访问控制的设计和管理是一个复杂的动态问题,它将业务、组织和法律约束应用到技术实现中,因此导致出现错误的可能性也增加了,访问控制的设计决策应该由人而不是技术来做出。

    BP学院中也对访问控制进行了详尽的分类:

    在实际的应用场景中,访问控制通过两个方式实现:身份验证会话管理

    以上两种又可以细分为三个方面:

    身份验证:识别用户并确认用户没有伪造自己的身份

    会话管理:识别同一用户正在发出哪些后续HTTP请求

    访问控制:决定是否允许用户执行他们试图执行的操作

    用户的角度来看,访问控制可以分为以下几类:

    垂直的访问控制:不同权限的用户可以访问不同的应用程序功能,例如管理员和普通用户

    水平的访问控制:将资源的访问限制为特定的用户,例如银行应用程序将允许用户从自己的帐户查看交易和付款,但不允许查看其他用户的帐户

    内容相关的访问控制:根据应用程序的状态或用户与它的交互来限制对功能和资源的访问,此种控制可以防止用户以错误的顺序执行操作。例如,零售网站可能阻止用户在付款后修改购物车的内容。

    此类漏洞往往与应用程序本身的业务逻辑密切相关,因此需要熟悉应用的各部分功能以进行详细测试,结合实验也更能方便我们理解访问控制中容易存在的问题。

    实验内容

    实验一:未受保护的管理功能页面

    实验要求:删除carlos账户

    实验提示:可以通过robots文件发现此实验环境存在一个不受保护的admin面板

    img

    robots文件相信大家都比较熟悉,这里再简单介绍一下:robots.txt文件中可以定义不允许搜索引擎爬取的网站路径,是一种协定的规则(君子协定),但这也往往存在敏感路径泄露的问题,所以在分析一些网站时可以从这入手

    https://ac0d1f5d1f239119801b550900ea0043.web-security-academy.net/robots.txt

    直接访问robots.txt文件就可以看到admin面板的路径

    img

    访问 /administrator-panel路径,删除carlos账户删除文件

    我们再来尝试一下通用的目录发现方法

    首先配置cookie jar,使用Burpsuite的Content Discovery功能,详细配置方式可以查看这一篇:https://bbs.ichunqiu.com/thread-58511-1-1.html

    爬了两分钟左右,发现并没有成功爬出admin面板路径,由此可以得出这一功能并不会主动优先请求robots.txt文件

    img

    所以我们可以使用BP新的扫描工具Crawl,这好像是新版才存在的功能,旧版只有Scan

    在Dashboard中选择New Scan

    img

    粘贴需要爬取的URL,并选择Crawl(仅进行爬取)

    img

    其实也可以看到在scan option里面可以配置是否需要爬取robots.txt

    img

    默认就会勾选,因此无需进行额外配置,点击OK直接开始

    img

    不用多少时间就可以看到已经成功爬取到了admin面板,相较于Content Discovery功能,crawl更为简易和快捷,因为其仅进行爬取而不进行爆破

    实验二:不受保护的不可预测的管理功能页面

    实验要求:删除carlos账户

    实验提示:网站的admin面板路径藏于javascript代码中

    img

    这一实验的admin路径位于首页的javascript代码中,也非常容易发现

    img

    同样我们可以尝试使用Content Discovery通用扫描法对路径进行扫描(使用Craw也可以,但是很慢才能爬到)

    img

    对了这里提一点,由于软件特性会自动传参导致执行删除账户功能,你会发现等你扫描完,实验也完成了。。。

    这在真实的环境中是非常危险,可能会破坏正常业务的运行,在配置面板也没有找到合适的设置选项,所以应该谨慎使用

    实验三:通过请求参数操纵用户角色

    实验要求:删除carlos账户

    实验提示:应用程序使用用户可操纵的字段保存用户角色信息

    img

    使用实验提供的账号进行登录

    同时使用Content Discovery进行目录扫描,注意cookie配置

    img

    得到admin面板路径

    直接访问可以发现被禁止了,根据提示我们发送到Repeater模块,尝试更改请求参数

    img

    可以看到原始请求的Cookie字段中存在参数Admin

    将其更改为true进行尝试

    img

    成功访问,使用show respond in browser在浏览器中打开

    img

    开启proxy拦截,点击删除carlos账户

    修改拦截报文点击发送完成实验

    img

    实验四:通过修改用户账户信息更改用户角色

    实验要求:删除carlos账户

    实验提示:此应用存在一个管理面板/admin,只有roleid为2的已登录用户才能访问

    img

    使用实验提供的wiener账户进行登录,访问各个网页功能

    在修改email账户处,观察报文流,可以看到响应报文存在一个roleid参数

    img

    修改参数尝试修改roleid为2 成功

    img

    之后即可访问/admin路径,删除carlos账户完成实验

    实验五:规避基于URL的访问控制

    实验要求:删除carlos账户

    实验提示:本网站存在一个未经身份验证的管理面板/admin,但前端系统已被配置为阻止外部访问该路径。不过后端应用程序构建在支持X-Original-URL头的框架上

    img

    这里我们来介绍两个非标准的HTTP报文头

    • X-Original-URL
    • X-Rewrite-URL

    其作用为使用该报文头的值中所指定的URL覆盖请求目标中的URL

    一些应用程序支持非标准的报头,如X-Original-URL或XRewrite-URL,以便。

    为什么说是非标准报文头,因为在相关的官方文档中查不到其定义

    https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers

    HTTP 消息头允许客户端和服务器通过 requestresponse传递附加信息。一个请求头由名称(不区分大小写)后跟一个冒号“:”,冒号后跟具体的值(不带换行符)组成。该值前面的引导空白会被忽略。

    自定专用消息头可通过'X-' 前缀来添加;但是这种用法被IETF在2012年6月发布的 RFC5548 中明确弃用,原因是其会在非标准字段成为标准时造成不便;其他的消息头在 IANA 注册表 中列出, 其原始内容在 RFC 4229 中定义。 此外,IANA 还维护着被提议的新HTTP 消息头注册表.

    Acunetix中将其定义为URL重写漏洞,受影响的相关组件可以看这个https://www.acunetix.com/vulnerabilities/web/url-rewrite-vulnerability/
    相关问答可以查看这个:https://security.stackexchange.com/questions/229928/x-original-url-and-x-rewrite-url-related-vulnerabilities ,感觉影响范围还是比较小的

    重新回到实验,理解了这两个报文头后实验就简单了,这是原先的对于/admin的请求报文

    img

    使用X-Original-URL字段对请求报文进行修改,将原先对于/的请求修改为了/admin并成功访问

    img

    使用删除功能时我们需要使用同样的方法,注意参数修改细节

    img

    发送报文完成实验

    实验六:规避基于请求方式的访问控制

    实验要求:使用提供的wiener账号进行登录,并利用访问控制漏洞提升为管理

    实验提示:网站使用HTTP请求方法进行访问控制

    img

    首先使用administrator账号进行登录,尝试访问网站各个功能,并分析报文流

    img

    之后更换wiener进行登录,尝试访问/admin和/admin-roles路径

    在使用GET方法访问/admin-roles时获得了返回信息

    "Missing parameter 'username'"

    根据提示,我们将username参数附加到GET请求中

    img

    发送报文 成功完成实验

    总结


    总结一下从这几个实验中可以获得一些在测试访问控制功能时的经验:

    • 使用Content discovery和crawl功能对网站路径进行爬取爆破,注意robots.txt文件
    • 观察请求和响应报文分析各个参数含义,尝试修改参数更改用户权限
    • 尝试使用存在风险的HTTP报文头修改应用程序逻辑,破坏访问控制
    • 注意HTTP请求方法对应用所产生的可能影响

    本帖被以下淘专辑推荐:

    • · sc|主题: 63, 订阅: 3
    大佬。写的这个系列的还真不错
    使用道具 举报 回复
    发表于 2020-9-23 14:28:18
    不哭不闹 发表于 2020-9-23 10:56
    大佬。写的这个系列的还真不错

    使用道具 举报 回复
    发表于 2020-9-23 18:19:43
    写的真不错,谢谢分享
    有一天他会突然觉得累了甚至忘了初衷 放弃了梦想也许因为年纪的关系奔波于现实 然后拉黑了网络认识的所有人或者说不用了一个号码换了一个QQ 那么记得他叫大叔 这个网络他曾来过
    使用道具 举报 回复
    发表于 2020-9-24 11:41:04
    Sir 7 发表于 2020-9-23 18:19
    写的真不错,谢谢分享

    哈哈 欢迎交流
    使用道具 举报 回复
    感谢分享
    剑未佩妥出门已是江湖
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册