与访问控制相关的安全问题

  • A+
所属分类:安全文章

学习打卡计划是信安之路知识星球开启的 “每天读书一小时,挑战打卡一百天” 主题活动,能够坚持学习打卡 100 天的同学可以获得信安之路提供的百分成就徽章和证书,学习书籍可以自选,主要目的是养成每日读书学习的好习惯,并将自己的学习心得分享出来供大家学习。

下图为目前星球成员的最新打卡内容,还有目前打卡活动的排行榜,坚持学习是一件非常难的事情,随着时间的推移,坚持的人越来越少,但这就是真实的情况,能够坚持到最后的一定是少数。

与访问控制相关的安全问题

打卡一:web 实战 P336-345

不知不觉已经到第八章访问控制的学习了,首先关于访问控制有几个分类:垂直访问控制(比如普通用户和管理员)、水平访问控制(比如不同用户之间)、上下文相关的访问控制(比如改密码的流程,先验证后改密码,而不是直接绕过验证改密码,是有前后执行顺序的);前面讲了登录(验证身份)、会话(保持身份),到这里权限控制,根据不同用户的身份来确定不同的权限控制,这个是一体化的流程。

关于权限方面的漏洞主要有水平越权、垂直越权和未授权访问,比如下面的场景:

1、一个管理后台,任何人访问 admin 目录都可以使用其功能,只需要找到管理后台地址就可以进行操作,这就属于未授权访问

2、一个查询个人用户信息的页面,参数是一串数字,我们通过变换数字来查看他人的信息,这就属于水平越权加用户ID可遍历的问题

3、忘记密码的功能通常分两步:一、验证当前用户身份;二、密码修改;往往很多程序员在写密码修改代码时忘记验证用户身份,从而导致越权修改任意用户密码的问题,这就属于之前说的多阶段越权问题

4、对于网站上的静态资源,比如 pdf、doc 等直接可供下载,经常会存在被人批量下载的问题,不过这种要配合文件名可以预测的效果更好利用,这种属于未授权访问

其他可能造成访问控制问题的原因有很多,比如配置问题、验证方式问题、验证不全面等,具体情况还要具体分析。

打卡二:web 实战 P346-372

了解完访问控制相关的安全问题之后,我们该如何测试呢?

测试越权问题,最好准备多个不同权限的账号进行测试,访问不同账号下的正常资源,来验证是否存在越权的问题。

对于测试方法书中讲的比较详细,关于权限方面的问题该如何防御呢?首先是对开发者说的几点建议:

1、不能抱用户不知道页面地址,而不对页面做权限检查

2、不能相信用户提交的任何参数

3、不要认为用户会按照程序流程进行操作

4、不要相信用户不会篡改客户端自动提交的数据

以下是一些有效解决访问控制问题的方法:

1、详细记录每个功能单元的访问控制要求

2、根据用户会话做完整权限验证

3、使用中间组件来做访问控制检查

4、确定所有功能都使用了这个组件

5、对于敏感功能进行访问限制,比如:来源 IP

6、对于静态资源的保护,使用间接访问的方式

7、只信任服务端的数据

8、记录每一个敏感操作的事件

对于越权的问题还是挺多的,因为业务系统非常复杂,开发者众多,难免会有功能没有做权限检查,对于这部分内容留两个实践的作业:

作业一:通过互联网找一个可以注册登录的网址,测试其忘记密码的过程,将过程中涉及的页面记录下来,然后尝试是否可以绕过验证阶段来直接访问重置密码页,进行任意用户密码重置,记录详细操作过程。

作业二:通过互联网找一个论坛类网站,收集只允许自己访问的页面地址,尝试发现页面请求中可以修改的与用户相关的参数,验证是否存在水平越权/垂直越权,记录详细操作过程。

打卡三:web 实战 P373-377

从这里开始开启了注入的旅程,注入分几种,比如:数据库注入、操作系统命令注入、应用程序代码注入等,其核心是将用户输入的参数内容当成脚本、数据库查询语句、系统命令等执行之后的结果,原理很好理解,但是深入下去需要对其中涉及的各个组件进行研究。

这部分内容是攻击数据存储,内容最多的是 sql 注入的问题,与 sql 注入相关的组件包括:解释性语言(PHP、asp.net、java 等)、数据库组件(mysql、mssql、oracle、postgres、redis、mongo、ldap 等);对于数据库的操作和认识是这部分内容的基础,在成长平台有几个关于数据库学习的任务,先完成这几个任务再来学习 sql 注入相关的内容会比较容易理解。

sql 注入问题是所有 web 漏洞中危害最大的,也是最直接产生数据泄漏的原因,也是备受大家关注的漏洞,sqlmap 是在 sql 注入利用工具中最成熟、最强大的工具,通过研究它的原理可以大大提升我们对数据库的理解,对各种防御措施绕过技巧。

可以测试注入的入口,所有用户参数会被带入数据库查询的都有可能是存在注入问题的入口,不光是正常的应用功能,还包括客户端自带的信息,比如 UA、Referer、x-forword-for 等。

总结

建议大家在学习后续内容的时候,可以先去学习数据库使用的内容,补补数据库的基础,知道数据库是什么、怎么使用数据库、数据库语句怎么写、数据库自带哪些功能函数、数据库除了数据库操作还能做什么等等。

与访问控制相关的安全问题

本文始发于微信公众号(信安之路):与访问控制相关的安全问题

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: