CVE-2021-32305 Websvn RCE 简单分析
简介
WebSVN是一个基于Web的Subversion Repository浏览器。它将Subverion的各种功能操作通过Web界面提供出来。通过它,可以看到任何给定版本的任何文件或者目录的日志,并且可看到所有文件改动、添加、删除的列表。
漏洞描述
该漏洞源于没有对search.php?search=
参数进行严格的过滤,导致参数被带入prox_open
中执行,造成命令注入
影响版本
|
|
环境搭建
本次测试是在vulfocus靶场上测试 可通过以下命令进行拉取docker
|
|
漏洞分析
WebSVN源码:https://github.com/websvnphp/websvn/releases/tag/2.6.0
我们在search.php
中搜索search
参数,如下:
会先判断search
是否为空值,否的话参数会传入showSearchResults
函数中,跟进该函数
变量$searchstring
即为原先的search
,发现会继续传入到getListSearch
函数中,然后继续跟进
在getListSearch
函数中,可以看出$searchstring
会在1085行中进行拼接,然后先传入svnCommandString
中进行操作,然后赋值给$cmd
,然后将$cmd
传入到_xmlParseCmdOutput
函数中,接下来先跟进到_xmlParseCmdOutput
函数中
发现$cmd
会传入到runCommand
函数中,然后继续跟进
变量$cmd
先会被进行检测是否有'>‘和’|',然后作为参数,放入到proc_open
中执行命令
proc_open
命令详解如下:
自此$_GET["search"]
会被当做命令执行,然后回过头来分析svnCommandString
函数,看对变量$searchstring
做了什么操作
发现只是对$command
变量进行了一下拼接,没有额外的过滤
最后进行一下简单的总结,$_GET["search"]
传入后,没有经过太严格的过滤,然后传入到proc_open
中去执行命令,导致命令注入。
漏洞复现
访问80端口,在url中输入以下内容去执行命令:
|
|
DNSLog有回显,命令成功被执行