php search file content 漏洞,Web漏洞分析之——顺瓜摸藤

2024-01-01 21:40

本文主要是介绍php search file content 漏洞,Web漏洞分析之——顺瓜摸藤,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

阅读:

1,358

在分析一些漏洞时,能从相关的漏洞预警和描述中获取的情报往往很少。

很多时候,只能通过漏洞描述或者补丁中找到漏洞触发点,然而如何利用,如何找到从入口贯通到漏洞触发点的利用链,这时候就需要我们顺瓜摸藤了。

有时候,顺着一个瓜(漏洞触发点),还能摸到很多条藤(利用链)。

前言

近日在PacketStorm看到一个关于国产cms的cve

https://packetstormsecurity.com/files/151824/ZZZPHP-CMS-1.6.1-Remote-Code-Execution.html

cve编号:

CVE-2019-9041

cve描述

d0ee05fec88fde5ab07364b0d3161501.png

再看看packetstormsecurity上关于exploit的介绍

ab6266d1415c6b1ba90e9f625e0b1d42.png

根据描述,猜测该漏洞应为SSTI类

如果有升级补丁参照看一下,这个漏洞就很明朗了。

然而官网上最新版本只是2019-1-28更新的1.6.1,而1.6.1版本,正是存在漏洞的版本。

之前完全没有听说过这个cms,这个漏洞又有cve。

因此拿着个来举个例子,看看怎么顺瓜摸藤。

分析

从漏洞发现者所提供的exploit来看,这个漏洞的触发应该是需要后台权限。漏洞触发点位于inc/zzz_template.php中的parserIfLabel方法中,并且需要修改search模板并通过搜索功能执行该利用点。

首先先看下inc/zzz_template.php中的parserIfLabel方法

a0c0363003086aaf3e6636d707a3d99d.png

可以看到有一处eval方法,这个应该是最终代码执行触发的地方。

既然触发点已经找到了,那继续往上跟,找到可用的调用链

parserIfLabel方法只在两处被调用

dd0af61bf7bf3f386053e8c3f77d312d.png

先看位于第2238行的第二处调用

ef0eb519b6579cd03f6b96440a1b5cc7.png

这处在parserIfLabel方法自身内部,递归调用来解析嵌套。此处虽然调用了parserIfLabel方法,但是并不处于parserIfLabel方法的调用链的上层,因此排除。

再看第一处:位于23行这处

affe1628a42d019a3f6d22ab7f065978.png

parserCommom方法调用parserIfLabel方法并将$zcontent传入其中。

再看看parserCommom方法在何处被调用

跟入zzz_client.php中

zzz_client.php中一共四处调用了parserCommom方法,每一处都将名为$zcontent的参数传入其中。

这四处parserCommom分别位于四个ifelse条件中。

3d93e90caca9dc4baedd343207c9e568.png

先一处处来看,首先选个短的看起来容易触发的条件分支先来。

先看第二处,这里elseif中的条件最短,为 $conf[‘iscache’]==1

3b09bfb478a62ae1eb0af140cf5533f3.png

只要$conf[‘iscache’]==1,就可以顺利的进入这个条件分支,parserCommom就能有机会被调用

查看配置文件,此处默认为0

fcda4cb53c9d85193955e60f59668561.png

但是由于漏洞介绍,这是个后台漏洞,那默认我们可以有后台的操作权限

于是我在后台管理那把缓存开启了

55112355f2b50a05ffc3efe9b1cef27d.png

现在zzz_config.php中

553e0f24f73db224908954e0b241bb8a.png

可见iscache现在为1了。

现在的思路:

1、$conf[‘iscache’] 目前已经是1,稳稳的进入这个elseif分支

2、由于此处执行点位于zzz_client.php中,而zzz_client.php文件中没有定义任何函数,代码逐行执行,一马平川。

3、只有找到zzz_client.php被加载的地方,才能进入该elseif分支执行我们的parserCommom

4、找到控制传入parserCommom方法中$zcontent值的方法,将构造好的$zcontent传入我们的eval中执行。

首先要找zzz_client.php被加载的地方

b26fd4ec35a81cfa95c71a1c17bf632d.png

看起来这四处都可以加载zzz_client.php

我们首先选主入口index.php

不出意外,直接执行到断点处

此时传入load_file方法中$tplfile值为

C:/wamp64/www/analysis/zzzphp/template/pc/cn2016/html/index.html

加载的是index.html模板

036b5f0903f2eea17b942ae4c320f069.png

也就是说,我们只要在index.html中加入payload,就可以触发底层的eval执行任意代码。

找到后台编辑模板处

2fbdd8504d9c15bf5057cbc9ccfa289f.png

编辑index.html,插入payload

0e34013171bf710978a71b404b3c8fa3.png

成功执行

55f2951e410e644be2577ca5ccfa4aa5.png

337830a2e8c2c2d620819854841a5143.png

但是需要注意的是 如下图

5fbd3ba4d96dca09de0148d0e842850f.png

当cachefile在第一次执行create_file后,就会被成功创建

0c7d2621c26791b0a17e4f2d5e087601.png

下一次再进入elseif($conf[‘iscache’]==1)分支后,

由于

661eb2a909d08807c0062d638cd8c1dc.png

这个if条件不满足

不会再次调用$parser->parserCommom($zcontent)的。

总结来说,此处可以远程代码执行,但是当cachefile被创建后,此处调用链失效。

到此为止,我们找到了一处不同于原作者的利用链。但仅仅zzz_client中就有四个分支调用了存在漏洞的函数。

也就是说,同一个漏洞触发点所生产的利用链远远不止两处,有兴趣的朋友也可以自己试试。

总结

在分析一个漏洞时,当找到存在漏洞的部位时,不妨仔细的检查下这个存在漏洞的方法在何处被调用,为什么被调用,实现了什么功能。不拘泥于漏洞作者给出的poc,也许可以找到其他的利用链进行利用。

这篇关于php search file content 漏洞,Web漏洞分析之——顺瓜摸藤的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/560598

相关文章

MySQL表锁、页面锁和行锁的作用及其优缺点对比分析

《MySQL表锁、页面锁和行锁的作用及其优缺点对比分析》MySQL中的表锁、页面锁和行锁各有特点,适用于不同的场景,表锁锁定整个表,适用于批量操作和MyISAM存储引擎,页面锁锁定数据页,适用于旧版本... 目录1. 表锁(Table Lock)2. 页面锁(Page Lock)3. 行锁(Row Lock

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

解决JavaWeb-file.isDirectory()遇到的坑问题

《解决JavaWeb-file.isDirectory()遇到的坑问题》JavaWeb开发中,使用`file.isDirectory()`判断路径是否为文件夹时,需要特别注意:该方法只能判断已存在的文... 目录Jahttp://www.chinasem.cnvaWeb-file.isDirectory()遇

JavaWeb-WebSocket浏览器服务器双向通信方式

《JavaWeb-WebSocket浏览器服务器双向通信方式》文章介绍了WebSocket协议的工作原理和应用场景,包括与HTTP的对比,接着,详细介绍了如何在Java中使用WebSocket,包括配... 目录一、概述二、入门2.1 POM依赖2.2 编写配置类2.3 编写WebSocket服务2.4 浏

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep

SQL注入漏洞扫描之sqlmap详解

《SQL注入漏洞扫描之sqlmap详解》SQLMap是一款自动执行SQL注入的审计工具,支持多种SQL注入技术,包括布尔型盲注、时间型盲注、报错型注入、联合查询注入和堆叠查询注入... 目录what支持类型how---less-1为例1.检测网站是否存在sql注入漏洞的注入点2.列举可用数据库3.列举数据库

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维