Day106:代码审计-PHP原生开发篇文件安全上传监控功能定位关键搜索1day挖掘

目录

emlog-文件上传&文件删除

emlog-模板文件上传

emlog-插件文件上传

emlog-任意文件删除

通达OA-文件上传&文件包含


知识点:

PHP审计-原生开发-文件上传&文件删除-Emlog
PHP审计-原生开发-文件上传&文件包含-通达OA

emlog-文件上传&文件删除

文件安全挖掘点:

1、脚本文件名:upload.php、up.php、upfile.php、del.php、delfile.php、down.php、downfile.php 、read.php、readfile.php

2、应用功能点:下载,上传,读取,删除   --> URL路径 --> 文件地方代码 --> 分析

如果功能点可以作为漏洞的强特征,就可以通过找功能点来找漏洞

3、操作关键字:直接搜索操作类函数或变量:$_FILES  move_upload_file ; 还有 上传文件,删除文件,安装文件,上传成功,上传失败等

搜索不到:文件路径也可能写入数据库了

emlog-模板文件上传

搜索函数关键字或应用关键字:

流程:搜$_FILES->template.php->upload_zip->emUnZip

流程:搜安装或上传等->template.php->upload_zip->emUnZip

https://www.cnvd.org.cn/flaw/show/CNVD-2023-74536

这个路东并不是说文件里面存在上传漏洞,因为在软件、应用程序或网站的开发中,/templates 目录通常是用来存放模板文件的地方。模板文件用于定义数据显示的结构和布局,是一种将内容和表现分离的设计手段。

意思应该上传模板文件存在漏洞

修改参数 tpl 即可更换模板

模板文件存放路径 

搜$_FILES

搜索上传

定位到文件 /admin/template.php

搜索安装模板,在 /view/template.php,可以根据 MVC 架构特点,在 /admin/template.php 处理试图

MVC 架构是一种用于设计软件应用的模式,尤其是在图形用户界面(GUI)的应用程序开发中广泛采用。MVC 代表 Model-View-Controller,这三个组件是MVC架构的核心,它们各自承担着不同的职责,使得应用程序的开发、维护和扩展变得更加容易和清晰。

  1. Model(模型):模型代表的是应用程序的数据结构,通常模型对象负责在数据库中存取数据。它包含了数据的处理逻辑,例如计算或数据校验等。模型是独立于用户界面的,因此模型的改变通常不直接影响视图的显示。模型提供了一种方式来操作应用程序的数据,以及将这些数据转化为有用的信息。
  2. View(视图):视图是应用程序中用户界面的部分。它负责将数据(即模型)以图形界面的形式展现给用户。视图仅仅展示数据,不包含业务逻辑。换句话说,视图是模型的可视化表示。当模型的状态发生变化时,视图可以更新其展示的内容,反映最新的信息。
  3. Controller(控制器):控制器是模型与视图之间的协调者。它接收用户的输入(例如,鼠标点击和键盘输入),并决定如何处理这些输入。例如,控制器可以决定响应用户的某个动作来修改模型的状态或更新视图。控制器将用户的输入转化为模型的更新和视图的操作,确保模型和视图的同步。

进入 emDirect() 函数

$r = explode('/', $zip->getNameIndex(0), 2);

getNameIndex(0) 方法调用是ZipArchive类的一个功能,它接受一个整数作为参数(在这个例子中是0),这个参数指定了ZIP文件中条目的索引。此方法返回该索引对应的条目的名称,即ZIP文件中第一个文件或文件夹的名称。如果ZIP文件为空或指定的索引不存在,此方法将返回FALSE。

explode('/', $zip->getNameIndex(0), 2) 函数是PHP中用于将字符串拆分为数组的内置函数。这里,它被用来将getNameIndex(0)返回的第一个条目名称按照'/'(正斜杠)分隔符进行分割。参数2表示最多分割为两部分,这意味着如果存在多个'/',只分割第一个,将结果分为两个元素的数组。

$dir = isset($r[0]) ? $r[0] . '/' : '';

这行PHP代码是在处理由前一行代码$r = explode('/', $zip->getNameIndex(0), 2);生成的数组$r。具体来说,它在确定并构建一个表示目录路径的字符串。

代码解析如下:

  1. isset($r[0]):这个函数检查数组$r中是否有索引为0的元素。由于explode函数至少会返回一个元素的数组(除非传递的是空字符串),通常情况下索引0是存在的。如果$zip->getNameIndex(0)返回的是以/开头的路径,那么$r[0]将是一个空字符串。
  2. ? $r[0] . '/':这是三元运算符的中间部分。如果isset($r[0])为true(即$r[0]存在),那么取出数组$r中索引为0的元素,并在其后添加一个正斜杠'/'。这通常用来确保得到的路径是一个目录路径。
  3. : '':这是三元运算符的最后部分。如果isset($r[0])为false(即$r[0]不存在),则目录字符串设为一个空字符串。
  4. $dir:这是存储最终目录字符串的变量。如果数组$r中存在索引0,那么$dir将是该值加上一个尾随正斜杠(表示目录)。如果不存在,$dir就是空字符串。

综上所述,这行代码用于从ZIP压缩包中提取的第一个文件(或目录)的路径,获取它的目录部分,并确保这个目录字符串以正斜杠结束。这在处理ZIP文件中的条目时,用于构建路径、创建目录结构或进行路径检查时非常有用。

此处上传模板存在文件上传漏洞且没有过滤。

如何利用?

  1. 压缩默认模版目录
  2. 压缩一个带后门模版
  3. 上传带后门模版压缩包

制作模板压缩包,文件目录如下:

test.php内部是一个后门

上传常规,出现 test 模板

模板压缩包制作可知压缩一下defualt或者下载一个看看目录结构

emlog-插件文件上传

流程:搜$_FILES->plugin.php->upload_zip->emUnZip

流程:搜安装或上传等->plugin.php->upload_zip->emUnZip

https://www.cnvd.org.cn/flaw/show/CNVD-2023-74535

定位到 /admin/plugin.php

制作插件压缩包

上传成功

emlog-任意文件删除

流程:搜unlink->data.php->action=dell_all_bak->bak[]

https://www.cnvd.org.cn/flaw/show/CNVD-2021-41633

1、/admin/data.php?action=dell_all_bak

2、bak[1]=../xxx.php

删除成功!

通达OA-文件上传&文件包含

安装,双击运行即可

安装后的目录

控制中心在 /bin 目录下

Web目录

IDEA打开源码,发现源码加密

解决办法:

  1. 方法一:找关键字,如上图中,可能在前面,中间,后米娜,之后百度搜索,看看是什么加密,再看看能否解密
  2. 方法二:直接搜索该OA版本的加密

开始时使用Zend解密出现闪退,原因:(1) 内存不够   (2)代码资源被占用
退出IDEA即可解决
等待IDEA更新索引

流程:找文件名->绕验证P->DEST_UID,UPLOAD_MOD->构ATTACHMENT

文件上传(文件名称):/webroot/ispirit/im/upload.php

流程:搜include_once->gateway.php->$url->$key->$json

文件包含(include_once):/ispirit/interface/gateway.php

这个漏洞的挖掘时是艰难的,项目太大了,需要时间慢慢测试,才发现到upload.php,使用搜索的方式结果太多了。实战中,大型的程序挖掘需要时间。也可以使用动态分析的技术,配合使用。
接收参数 p 

经由上述分析,构造符合条件的文件上传:
  1. 设置P参数不为0
  2. 设置DEST_UID参数为1
  3. 设置UPLOAD_MODE参数为1,2,3
  4. 设置上传文件参数名为ATTACHMENT
<html>
<body>
<form action="http://127.0.0.1/ispirit/im/upload.php" method="post" enctype="multipart/form-data">
<input type="text"name="P" value=1></input>
<input type="text"name="UPLOAD_MODE" value=1></input>
<input type="text" name="DEST_UID" value=1></input>
<input type="file" name="ATTACHMENT"></input>
<input type="submit" ></input>
</body>
</html>

文件监控:file-jiankong.py,方便监控获取文件上传到什么地方

使用:直接放到文件的根目录下,就可以监视该文件夹下的文件变化,可以快速找到文件上传到那个目录了

txt 里面是后门代码 

这个文件是不可访问的,没有权限,因为再 Web 目录的外面

思路:配合文件包含后门代码,需要满足参数参数可控,没过滤

poc1:/ispirit/interface/gateway.php?json={}&url=/general/../../attach/im/2310/1600449966.1.txt
poc2:/ispirit/interface/gateway.php?json={}&url=/ispirit/../../attach/im/2310/1600449966.1.txt
poc3:/ispirit/interface/gateway.php?json={}&url=/module/../../attach/im/2310/1600449966.1.txt

但是又碰到一个问题

没有回显,解决办法:webshell 连接,把结果写入到别的文件里,再访问。

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

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

相关文章

基于YOLOv8的摄像头下铁路工人安全作业检测系统

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文摘要&#xff1a;基于YOLOv8的铁路工人安全作业检测系统&#xff0c;属于小目标检测范畴&#xff0c;并阐述了整个数据制作和训练可视化过程&#xff0c; 博主简介 AI小怪兽&#xff0c;YOLO骨灰级玩家&#xff0c;1&#xff0…

【计算机考研】408网课汇总+资源分享

王道的四件套无疑是大多数同学的首选。相比其他课程来说&#xff0c;也是属于市面上最好的408课程了。 从今年的难度来看选择题部分和计网&#xff0c;比起往年来看是有很多偏题&#xff0c;大题除了计网的冷门外&#xff0c;其他倒是中规中矩。总体来看24考研的408难度是非常…

Vue - 4( 8000 字 Vue 入门级教程)

一&#xff1a; Vue 初阶 1.1 关于不同版本的 Vue Vue.js 有不同版本&#xff0c;如 vue.js 与 vue.runtime.xxx.js&#xff0c;这些版本主要针对不同的使用场景和需求进行了优化&#xff0c;区别主要体现在以下几个方面&#xff1a; 完整版 vs 运行时版&#xff1a; vue.js&…

软件可靠性基本概念_1.定义和定量描述

1.软件可靠性定义 软件可靠性&#xff08;Software Reliability&#xff09;是软件产品在规定的条件下和规定的时间区间完成规定功能的能力。规定的条件是指直接与软件运行相关的使用该软件的计算机系统的状态和软件的输入条件&#xff0c;或统称为软件运行时的外部输入条件&am…

LeetCode-2529题:正整数和负整数的最大计数(原创)

【题目描述】 给你一个按 非递减顺序 排列的数组 nums &#xff0c;返回正整数数目和负整数数目中的最大值。换句话讲&#xff0c;如果 nums 中正整数的数目是 pos &#xff0c;而负整数的数目是 neg &#xff0c;返回 pos 和 neg二者中的最大值。注意&#xff1a;0 既不是正整…

开启RabbitMQ的WEB管理功能。

前言 今天讲下如何快速开启RabbitMQ的WEB管理功能&#xff0c;以及遇到的问题。 前期准备&#xff0c;需要安装好docker、docker-compose的运行环境。 一、安装RabbitMQ 1、创建相关目录&#xff0c;执行如下命令。 mkdir -p /docker/rabbitmq/data cd /docker/rabbitmq 2…

【数据结构】考研真题攻克与重点知识点剖析 - 第 7 篇:查找

前言 本文基础知识部分来自于b站&#xff1a;分享笔记的好人儿的思维导图与王道考研课程&#xff0c;感谢大佬的开源精神&#xff0c;习题来自老师划的重点以及考研真题。此前我尝试了完全使用Python或是结合大语言模型对考研真题进行数据清洗与可视化分析&#xff0c;本人技术…

无人机低空数字摄影测量系统

一、 系统概述 系统完全基于IDL设计实现&#xff0c;包括界面布局到人机交互再到底层核心函数功能。整体设计框架基于数字摄影测量的专业处理流程&#xff0c;实现了数据输入、数据预处理、影像信息检测、空间定向、地形三维建模、专题信息提取、成果输出与更新等功能。同时为…

【教程】App打包成IPA文件类型的四种方法

摘要 本教程总结了将App应用程序打包为IPA包的四种常用方法&#xff0c;包括Apple推荐的方式、iTunes拖入方法、自动编译脚本和解压改后缀名方法。每种方法都有其特点和适用场景&#xff0c;在实际开发中可以根据需求选择合适的方式进行打包。通过本教程&#xff0c;您将了解到…

Linux--进程的概念(二)

目录 一、进程的优先级1.1 基本概念1.2 查看进程优先级1.3 PRI&NI1.4 如何更改进程的优先级1.4.1 用top命令更改进程的nice1.4.2 用renice命令更改进程的nice 1.5 其他概念 二、环境变量2.1 基本概念2.2 常见的环境变量2.3 查看环境变量2.3.1 测试PATH2.3.2 测试HOME2.3.3 …

Adobe Photoshop 2024 v25.6强大的图形编辑工具

Adobe Photoshop 2024是一款非常强大的图像处理软件&#xff0c;具有丰富的功能和工具&#xff0c;可以满足各种图像处理需求。 软件下载&#xff1a;Adobe Photoshop 2024 v25.6中文激活版 它不仅支持基本的图像编辑和调整&#xff0c;还具有高级的特性&#xff0c;如智能对象…

自定义类型—结构体

目录 1 . 结构体类型的声明 1.1 结构的声明 1.2 结构体变量的创建与初始化 1.3 结构体的特殊声明 1.4 结构体的自引用 2. 结构体内存对齐 2.1 对齐规则 2.2 为什么存在内存对齐 2.3 修改默认对齐数 3. 结构体传参 4.结构体实现位段 4.1 位段的内存分配 1 . 结构体类…

idea中jdk版本的配置

配置JDK版本的步骤如下&#xff1a; 下载JDK安装文件&#xff1a;首先&#xff0c;需要从Oracle官方网站&#xff08;https://www.oracle.com/java/technologies/javase-jdk8-downloads.html&#xff09;下载适合您操作系统的JDK版本。 安装JDK&#xff1a;双击下载的安装文件…

LangChain-15 Manage Prompt Size 管理上下文大小,用Agent的方式询问问题,并去百科检索内容,总结后返回

背景描述 这一节内容比较复杂&#xff1a; 涉及到使用工具进行百科的检索&#xff08;有现成的插件&#xff09;有AgentExecutor来帮助我们执行后续由于上下文过大&#xff0c; 我们通过计算num_tokens&#xff0c;来控制我们的上下文 安装依赖 pip install --upgrade --qu…

Cherno CPP学习笔记-01-背景知识

0、工具网站收集 C语言版本特性 https://en.cppreference.com https://www.cplusplus.com https://www.tutorialspoint.com/cplusplus https://www.learncpp.com https://github.com/fffaraz/awesomecpp https://stackoverflow.com 网页CPP编译器 [C] gcc 12.1.0 - Wa…

SpringBoot集成Skywalking日志收集

在实际项目中&#xff0c;为了方便线上排查问题&#xff0c;尤其是微服务之间调用链路比较复杂的系统中&#xff0c;通过可视化日志的手段仍然是最直接也很方便的排查定位问题的手段&#xff0c;比如大家熟悉的ELK就是一种比较成熟的可视化日志展现方式&#xff0c;在skywalkin…

在Windows电脑上上传iOS应用至App Store

引言 &#x1f4f1; 使用UniApp开发iOS应用十分便捷&#xff0c;一套代码即可兼容多个平台。然而&#xff0c;UniApp开发iOS应用需要进行证书打包和将IPA文件上传至App Store&#xff0c;这两个步骤通常需要在Mac电脑上完成。那么&#xff0c;如果我们使用的是Windows开发环境…

Linux:gcc

Linux&#xff1a;gcc gcc概述语言发展史gcc的编译过程预处理编译汇编 gcc的链接过程动态库与静态库 gcc概述 GCC&#xff08;英文全拼&#xff1a;GNU Compiler Collection&#xff09;是 GNU 工具链的主要组成部分&#xff0c;是一套以 GPL 和 LGPL 许可证发布的程序语言编译…

C语言 | Leetcode C语言题解之第17题电话号码的字母组合

题目&#xff1a; 题解&#xff1a; char phoneMap[11][5] {"\0", "\0", "abc\0", "def\0", "ghi\0", "jkl\0", "mno\0", "pqrs\0", "tuv\0", "wxyz\0"};char* digits…

【算法】双指针算法

个人主页 &#xff1a; zxctscl 如有转载请先通知 题目 1. 283. 移动零1.1 分析1.2 代码 2. 1089. 复写零2.1 分析2.2 代码 3. 202. 快乐数3.1 分析3.2 代码 4. 11. 盛最多水的容器4.1 分析4.2 代码 5. LCR 179. 查找总价格为目标值的两个商品5.1 分析5.2 代码 6. 15. 三数之和…