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有回显,命令成功被执行
