当前位置: 首页 > news >正文

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 连接,把结果写入到别的文件里,再访问。

相关文章:

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

目录 emlog-文件上传&文件删除 emlog-模板文件上传 emlog-插件文件上传 emlog-任意文件删除 通达OA-文件上传&文件包含 知识点&#xff1a; PHP审计-原生开发-文件上传&文件删除-Emlog PHP审计-原生开发-文件上传&文件包含-通达OA emlog-文件上传&文件…...

数码视讯Q7盒子刷armbian遇到的坑之二

继续&#xff0c;nand的q7 搜遍全网&#xff0c;这个盒子能用的安卓映像有两个&#xff0c;一个本站付费下载的那个&#xff0c;另一个是20191218-Q7-nand-4.4.2-root-twrp-Milton这个映像&#xff08;具体地址自己搜索吧&#xff09;。第一个需要license&#xff0c;需要自己…...

vue2 使用vue-org-tree demo

1.安装 npm i vue2-org-tree npm install -D less-loader less安装 less-loader出错解决办法&#xff0c;直接在package.json》devDependencies下面加入less和less-loader版本&#xff0c;然后执行npm i &#xff0c;我用的nodejs版本是 16.18.0&#xff0c;“webpack”: “^4…...

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

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

【数仓】DataX 通过SpringBoot项目自动生成 job.json 文件

相关文章 【数仓】基本概念、知识普及、核心技术【数仓】数据分层概念以及相关逻辑【数仓】Hadoop软件安装及使用&#xff08;集群配置&#xff09;【数仓】Hadoop集群配置常用参数说明【数仓】zookeeper软件安装及集群配置【数仓】kafka软件安装及集群配置【数仓】flume软件安…...

注解式 WebSocket - 构建 群聊、单聊 系统

目录 前言 注解式 WebSocket 构建聊天系统 群聊系统&#xff08;基本框架&#xff09; 群聊系统&#xff08;添加昵称&#xff09; 单聊系统 WebSocket 作用域下无法注入 Spring Bean 对象&#xff1f; 考虑离线消息 前言 很久之前&#xff0c;咱们聊过 WebSocket 编程式…...

无线游戏手柄的测试(Windows11系统手柄调试方法)

实物 1、把游戏手柄的无线接收器插入到电脑usb接口中 2、【控制面板】----【查看设备和打印机】 3、【蓝牙和其它设备】--【更多设备和打印机设置】 4、鼠标右键【游戏控制器设置】 5、【属性】 6、【测试】&#xff08;每个按键是否正常&#xff09; 7、【校准】&#xff08;…...

计算机的各种转换

一、存量容量的转换 特别注意&#xff1a;1 B 8 bit 转换为&#xff1a;1024 2&#xff08;10&#xff09; 括号中的数字为2的指数(即多少次方) 1KB2(10)B1024B&#xff1b; 括号中的数字为2的指数(即多少次方) 1MB2(10)KB1024KB2(20)B&#xff1b; 1GB2(10)MB1024MB2(3…...

Git分布式版本控制系统——Git常用命令(一)

一、获取Git仓库--在本地初始化仓库 执行步骤如下&#xff1a; 1.在任意目录下创建一个空目录&#xff08;例如GitRepos&#xff09;作为我们的本地仓库 2.进入这个目录中&#xff0c;点击右键打开Git bash窗口 3.执行命令git init 如果在当前目录中看到.git文件夹&#x…...

【Node.js】短链接

原文链接&#xff1a;Nodejs 第六十二章&#xff08;短链接&#xff09; - 掘金 (juejin.cn) 短链接是一种缩短长网址的方法&#xff0c;将原始的长网址转换为更短的形式。短链接的主要用途之一是在社交媒体平台进行链接分享。由于这些平台对字符数量有限制&#xff0c;长网址可…...

详解 Redis 在 Centos 系统上的安装

文章目录 详解 Redis 在 Centos 系统上的安装1. 使用 yum 安装 Redis 52. 创建符号链接3. 修改配置文件4. 启动和停止 Redis 详解 Redis 在 Centos 系统上的安装 1. 使用 yum 安装 Redis 5 如果是Centos8&#xff0c;yum 仓库中默认的 redis 版本就是5&#xff0c;直接 yum i…...

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…...

wordpress全站开发指南-面向开发者及深度用户(全中文实操)--wordpress中的著名循环

wordpress中的著名循环 首先&#xff0c;在深入研究任何代码之前&#xff0c;我们首先要确保我们有不止一篇博客文章可以工作。因此&#xff0c;我们要去自己的wordpress站点&#xff0c;从侧边栏单机Posts(文章)&#xff0c;进行创建 在执行代码的时候会优先执行single.php如…...

libVLC 提取视频帧使用QGraphicsView渲染

在前面章节中&#xff0c;我们讲解了如何使用QWidget渲染每一帧视频数据&#xff0c;这种方法对 CPU 负荷较高。 libVLC 提取视频帧使用QWidget渲染-CSDN博客 后面又讲解了使用OpenGL渲染每一帧视频数据&#xff0c;使用 OpenGL去绘制&#xff0c;利用 GPU 减轻 CPU 计算负荷…...

大厂Java笔试题之判断字母大小写

/*** 题目&#xff1a;如果一个由字母组成的字符串&#xff0c;首字母是大写&#xff0c;那么就统计该字符串中大写字母的数量&#xff0c;并输出该字符串中所有的大写字母。否则&#xff0c;就输出* 该字符串不是首字母大写*/ public class Demo2 {public static void main(St…...

场景文本检测识别学习 day02(AlexNet论文阅读、ResNet论文精读)

怎么读论文 在第一遍阅读的时候&#xff0c;只需要看题目&#xff0c;摘要和结论&#xff0c;先看题目是不是跟我的方向有关&#xff0c;看摘要是不是用到了我感兴趣的方法&#xff0c;看结论他是怎么解决摘要中提出的问题&#xff0c;或者怎么实现摘要中的方法&#xff0c;然…...

4.9日总结

1.MySQL概述 1.数据库基本概念&#xff1a;存储数据的仓库&#xff0c;数据是有组织的进行存储 2.数据库管理系统&#xff1a;操纵和管理数据库的大型软件 3.SQL&#xff1a;操作关系型数据库的编程语言&#xff0c;定义了一套操作型数据库统一标准 2.MySQL数据库 关系型数…...

python第四次作业

1、找出10000以内能被5或6整除&#xff0c;但不能被两者同时整除的数&#xff08;函数&#xff09; def func():for i in range(10001):if (i % 5 0 or i % 6 0) and i % 30 ! 0:print(i,end " ")func() 2、写一个方法&#xff0c;计算列表所有偶数下标元素的…...

工业通信原理——Modbus-TCP通信规约定义

工业通信原理——Modbus-TCP通信规约定义 前言 Modbus TCP是一种基于TCP/IP协议的通信规约&#xff0c;用于在客户机和服务器之间进行数据通信。 Modbus-TCP通信规约定义 Modbus TCP通信规约的定义&#xff0c;包括客户机请求和服务器响应的基本流程&#xff1a; 连接建立…...

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&…...

5.118 BCC工具之xfsslower.py解读

一,工具简介 xfsslower显示了XFS的读取、写入、打开和fsync操作,这些操作慢于一个阈值。 二,代码示例 #!/usr/bin/env pythonfrom __future__ import print_function from bcc import BPF import argparse from time import strftime# arguments examples = ""…...

Spark编程基础

一、RDD入门 1.RDD是什么&#xff1f; RDD是一个容错的、只读的、可进行并行操作的数据结构&#xff0c;是一个分布在集群各个节点中的存放元素的集合&#xff0c;即弹性分布式数据集。 2.RDD的三种创建方式 第一种是将程序中已存在的集合&#xff08;如集合、列表、数组&a…...

React 状态管理:高效处理数组数据的5种方法

1.原因 为什么在 React 中,状态(state)如果是数组类型,需要单独处理&#xff1f;主要有以下几个原因: 不可变性(Immutability): React 中的状态是不可变的,意味着我们不能直接修改状态,而是要创建一个新的状态对象。对于数组来说,直接修改数组元素是不符合 React 的设计原则的…...

SSH和交换机端口安全概述

交换机的安全是一个很重要的问题&#xff0c;因为它可能会遭受到一些恶意的攻击&#xff0c;例如MAC泛洪攻击、DHCP欺骗和耗竭攻击、中间人攻击、CDP 攻击和Telnet DoS 攻击等&#xff0c;为了防止交换机被攻击者探测或者控制&#xff0c;必须采取相应的措施来确保交换机的安全…...

K-means聚类算法的原理、应用与实例

文章目录 K-means 聚类算法&#xff1a;原理K-means 聚类算法的应用K-means 聚类算法的优化与改进 一个使用 K-means 聚类算法进行客户细分的简单实例 K-means 聚类算法&#xff1a;原理 K-means 算法是一种经典的无监督学习方法&#xff0c;用于对未标记的数据集进行分群&…...

使用SquareLine Studio创建LVGL项目到IMX6uLL平台

文章目录 前言一、SquareLine Studio是什么&#xff1f;二、下载安装三、工程配置四、交叉编译 前言 遇到的问题&#xff1a;#error LV_COLOR_DEPTH should be 16bit to match SquareLine Studios settings&#xff0c;解决方法见# 四、交叉编译 一、SquareLine Studio是什么…...

MATLAB计算投资组合的cVaR和VaR

计算条件风险价值 (Conditional Value-at-Risk, cVaR) 是一种衡量投资组合风险的方法&#xff0c;它关注的是损失分布的尾部风险。 MATLAB代码如下: clc;close all;clear all;warning off;%清除变量 rand(seed, 100); randn(seed, 100); format long g;% 随机产生数据&#x…...

YOLOv7全网独家改进: 卷积魔改 | 变形条状卷积,魔改DCNv3二次创新

💡💡💡本文独家改进: 变形条状卷积,DCNv3改进版本,不降低精度的前提下相比较DCNv3大幅度运算速度 💡💡💡强烈推荐:先到先得,paper级创新,直接使用; 💡💡💡创新点:1)去掉DCNv3中的Mask;2)空间域上的双线性插值转改为轴上的线性插值; 💡💡💡…...

使用vue3搭建一个CRM(客户关系管理)系统

目录 1. 需求分析 2. 设计 3. 技术选型 4. 开发环境搭建 5. 前端开发 6. 后端开发 7. 数据库搭建 8. 测试 9. 部署 10. 维护和迭代 总结 搭建一个CRM&#xff08;客户关系管理&#xff09;系统是一个复杂的项目&#xff0c;涉及到需求分析、设计、开发、测试和部署等…...

Linux虚拟内存简介

Linux&#xff0c;像多数现代内核一样&#xff0c;采用了虚拟内存管理技术。该技术利用了大多数程序的一个典型特征&#xff0c;即访问局部性&#xff08;locality of reference&#xff09;&#xff0c;以求高效使用CPU和RAM&#xff08;物理内存&#xff09;资源。大多数程序…...