一、什么是访问控制崩溃
当服务器的权限被绕过,即被人越权之后,就叫控制崩溃。
比如:当上某宝网的时候发现自己能修改别人的价格,能帮别人下单等等。
作为一般用户,能做一些未授权的事情,获取敏感信息、修改其他用户数据等等。
垂直越权:普通用户做特殊用户或者管理者的事情。
水平越权:能帮其他普通用户做事情。
二、可能存在的漏洞
1.通过修改URL、内部应用程序或HTML页面绕过访问检查,或简单地使用自定义的API攻击工具。
2.允许主键更改为其他用户的记录,例如查看或编辑他人的账户。
3.特权提升,在不登陆的情况下假扮用户,或以用户身份登录充当管理员。
4.以未通过身份验证的用户身份强制性浏览通过身份证验证才可以看到的页面、或作为标准用户具有相关权限的页面、或API没有对POST、PUT和DELET强制执行访问控制。
三、如何防范
1.访问控制只有在受信服务器端代码或没有服务器的API中有效,这样攻击者才无法访问控制检查或元数据。
2.除公有资源外,默认情况拒绝访问。
3.记录失败的访问控制,并在适当时向管理员告警。
4.对API的控制器的访问进行速率限制,以最大限度降低自动化攻击工具的危害。
5.当用户注销后,服务器上的JWT令牌失效。
四、DVWA靶场实现例子
来到靶场,点击左边命令注入
该功能是这个网址提供了能够ping对方一个机器的功能,正常用户会在此处输入ip。
那么,如果我们在此处输入一个IP,在拼接一个其他的命令,会发生什么?
输入一个正常的IP,没有任何问题(乱码是中文显示问题)
如果在此处拼接一个系统命令,127.0.0.1 && ipconfig
会发现居然能够查看服务器的IP。
输入查看当前账户也可以看到。
这就实现了一个越权管理。
现在,我们来看PHP源码:
该漏洞是根据拼接字符&&或者|| ;;等实现的,当你实现一个命令成功时,用拼接字符,系统会接着实现下一个命令。
PHP源码中对此没有进行任何的入参校验。