OWASP-Top1-(Broken Access Control 失效的访问控制)
Top1 --失效的访问控制
这是21年最新的排名,失效的访问控制排到了第一,
简单来说它包括哪些问题:
-
文件包含/目录遍历
-
权限绕过(水平越权)
-
权限提升(垂直越权)
-
不安全直接对象的引用
文件包含/目录遍历
随着网站业务的需求,程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,但是正是这种灵活性通过动态变
量的方式引入需要包含的文件时,用户对这个变量可控而且服务端又没有做合理的校验或者校验被绕过就造成了文件包含漏洞。
这里以dvwa为例子:
这里原本是去包含解析file1.php,这个文件,因为没有做防护,加入../遍历目录这里导致报错就暴露了文件的绝对路径
然后就可以尝试遍历其他目录,比如这里访问php.ini
如果是linux系统存在遍历,那么可以试试,查看喜闻乐见的存储密码的文件,/etc/shadow等
http://127.0.0.1/dvwa/vulnerabilities/fi/?page=../../../../../../../etc/passwd
常见敏感信息路径: Windows系统 c:\boot.ini // 查看系统版本 c:\windows\system32\inetsrv\MetaBase.xml // IIS配置文件 c:\windows\repair\sam // 存储Windows系统初次安装的密码 c:\ProgramFiles\mysql\my.ini // MySQL配置 c:\ProgramFiles\mysql\data\mysql\user.MYD // MySQL root密码 c:\windows\php.ini // php 配置信息 Linux系统常见目录 /etc/passwd // 账户信息 /etc/shadow // 账户密码文件 /usr/local/app/apache2/conf/httpd.conf // Apache2默认配置文件 /usr/local/app/apache2/conf/extra/httpd-vhost.conf // 虚拟网站配置 /usr/local/app/php5/lib/php.ini // PHP相关配置 /etc/httpd/conf/httpd.conf // Apache配置文件 /etc/my.conf // mysql 配置文件
这种情况是最理想的,一般都会做的有防护,
常见的绕过姿势有:
文件截断绕过
在php版本小于5.3.4的服务器中,当Magic_quote_gpc选项为off时,我们可以在文件名中使用%00进行截断,也就是说文件名中%00后的内容不会被识别
这种适用与低版本的php,已经很少见了 文件截断
黑名单绕过
这种适用与不完全的黑名单过滤,比如http https ../ ..\等
可以双写构造绕过
Unicode/UTF-8编码绕过
..%c0%af 表示 ../
..%c1%9c 代表 .. \
等等。
权限绕过(水平越权)
通过某权限的用户去访问了类型相似权限相同的用户资源等,称之为水平越权。
就比如一个数据包提交是查询某用户订单的,通过修改参数后发回给服务器端
如果能正确返回修改后参数的查询结果,那么就存在水平越权了
https://127.0.0.1/admin/addUser.jsp
数据包为
POST /admin/addUser.jsp HTTP/1.1 Host: 127.0.0.1 ...
.... userID=otherID&role=3&group=grp001
通过修改用户ID查询到不属于本用户的订单
权限提升(垂直越权)
通过用户权限去访问到了高一级甚至管理员权限的资源,可以执行对应权限操作称之为垂直越权。
权限提升一般是由于应用程序自身的缺陷引起的,最后导致程序执行的操作拥有比开发人员或系统管理员预期更多的权限。
比如操纵条件值:在服务器发送错误消息时,该消息包含在一组相应代码中的特定响应码参数中,如
@0`1`3`3``0`UC`1`Status`OK`SEC`5`1`0`ResultSet`0`PVValid`-1`0`0` Notifications`0`0`3`Command Manager`0`0`0` StateToolsBar`0`0`0`
StateExecToolBar`0`0`0`FlagsToolBar`0
如果我们将“PVValid”从-1改为0,那可能代表没有错误,从而可能通过管理员身份验证。
操纵用户配置权限:下面服务器的响应显示校验成功后返回给用户的HTML中的隐藏字段。
HTTP/1.1 200 OK Server: Netscape-Enterprise/6.0 Date: Wed, 1 Apr 2006 13:51:20 GMT Set-Cookie: USER=aW78ryrGrTWs4MnOd32Fs51yDqp; path=/; domain=www.example.com Set-Cookie: SESSION=k+KmKeHXTgDi1J5fT7Zz; path=/; domain= www.example.com Cache-Control: no-cache Pragma: No-cache Content-length: 247 Content-Type: text/html Expires: Thu, 01 Jan 1970 00:00:00 GMT Connection: close <form name="autoriz" method="POST" action = "visual.jsp"> <input type="hidden" name="profile" value="SysAdmin"> <body onload="document.forms.autoriz.submit()"> </td> </tr>
就比如进行一些操作的时候数据包里面有一些标识 user,更改这些标识为admin 、 SysAdmin等,某些不规范的网页就能绕过,
将你识别为管理员身份,然后就能以管理员身份进行操作了。
这个例子就是把 name="profile"改成SysAdminn,可能越权。
不安全直接对象的引用
不安全的对象直接引用,指一个已经授权的用户,通过更改访问时的一个参数,从而访问到了原本其并没有得到授权的对象。
注意下面的两点原因:
-
Web应用往往在生成Web页面时会用它的真实名字,且并不会对所有的目标对象访问时来检查用户权限,所以这就造成了不安全的对象直接引用的漏洞。
-
服务器上的具体文件名、路径或数据库关键字等内部资源被暴露在URL或网页中,攻击者可以尝试直接访问其他资源。
比如某网站:http://example.test/online/news.php?item=28Jan2016.html
那么可以尝试访问http://example.test/online/news.php?item=../../../../winnt/win.ini
目录遍历和开放重定向都属于不安全直接对象的引用,比如302跳转这些。
302跳转漏洞:
比如下面这个链接,咪咕阅读的访问会跳转到某个apk的下载,
https://wap.cmread.com/r/p/lkym.jsp?ln=20678_303112__0_1_&tgu=?layout=3&fr=1&purl=/r/p/dlAndriod.jsp&vt=3
可以通过抓包来修改他的访问路径
改成dnslog来看看,重发后,看到dnslog有记录,代表着构造跳转成功:
具体绕过姿势可参考:
https://www.cnblogs.com/happystudyhuan/p/11767395.html
curl
https://www.freebuf.com/articles/web/265646.html ssrf的利用