来源:
https://www.anquanke.com/vul/id/1436256
http://www.iwantacve.cn/index.php/archives/88/
漏洞触发点在:
include/dialog/select_images.php
即选择图片文件处。
提交点请求是向这个文件:
include/dialog/select_images_post.php
该文件的第一个有效行:
require_once(dirname(__FILE__)."/config.php");
config.php
第一个有效行:
require_once(dirname(__FILE__)."/../common.inc.php");
common.inc.php
中的148行:
再来看uploadsafe.inc.php
这个处理上传文件的脚本。
这里会跟$cfg_not_allowall
这个变量进行匹配,匹配成功,则说明文件名存在不允许的字符,然后输出Not Admin Upload filetype not allow !
修改文件后缀名
然后修改文件后缀名为:ico-sadd.png.p*hp
,调试时发现绕过来那个敏感字符列表,跳到来下一个if。
这样就绕过来检查,然后回到select_images_post.php
的36行。
$imgfile_name = trim(preg_replace("#[ \r\n\t\*\%\\\/\?><\|\":]{1,}#", '', $imgfile_name));
这里将$imgfile_name中的*去掉了!
在38行时,发现已经变成了ico-sadd.png.php
。
然后返回给前端是:
路径为:
/DedeCMS-V5.7-UTF8-SP2/uploads/190124/1-1Z1241P55W43.php
直接访问得到:
根据select_images_post.php
的36行,可知,可将文件名改为:ico-sadd.png.p%<>?:hp
,依然可以上传成功。