成都网站设计制作工作室广州正规网站建设哪家好

bicheng/2026/1/19 12:52:27/文章来源:
成都网站设计制作工作室,广州正规网站建设哪家好,网站前台图片设置,ueditor编辑wordpress作者#xff1a;kw0ng开始通达OA上传到包含漏洞分析的文章已经有很多#xff0c;本文重点分析#xff0c;文件上传处决定路径信息是否回显的UPLOAD_MODE参数是怎么传递的。代码分析触发文件上传点位于/ispirit/im/upload.php中#xff0c;服务端在接收文件信息的同时还需要… 作者kw0ng开始通达OA上传到包含漏洞分析的文章已经有很多本文重点分析文件上传处决定路径信息是否回显的UPLOAD_MODE参数是怎么传递的。代码分析触发文件上传点位于/ispirit/im/upload.php中服务端在接收文件信息的同时还需要几个参数如不了解 multipart/form-data类型如何传递参数的可以先去学习下通达OA的PHP代码采用了Zend54加密但是我使用两个不同的工具解密却得到了不一致的代码这也导致了这篇文章差点难产。首先是第一段代码$P $_POST[P];if (isset($P) || $P ! ) { ob_start(); include_once inc/session.php; //如果P不为空 session_id($P); session_start(); session_write_close();} else { include_once ./auth.php;}这段代码需要一个POST传参获取P值且为空时将会包含auth.php进行重认证因为我们的POST包需要一个P值且不为空。$DEST_UID $_POST[DEST_UID]; $dataBack array();if ($DEST_UID ! !td_verify_ids($ids)) { $dataBack array(status 0, content -ERR . _(接收方ID无效)); echo json_encode(data2utf8($dataBack)); exit;}if (strpos($DEST_UID, ,) ! false) { } else { $DEST_UID intval($DEST_UID); }if ($DEST_UID 0) { if ($UPLOAD_MODE ! 2) { $dataBack array(status 0, content -ERR . _(接收方ID无效)); echo json_encode(data2utf8($dataBack)); exit; }}这段代码中我们需要提供DEST_UID参数且如果DEST_UID为0则触发判断UPLOAD_MODE是否等于2不等于2则报error并退出因此将DEST_UID不等于0可绕过。if (1 count($_FILES)) { //返回数组中元素的数目 if ($UPLOAD_MODE 1) { //如果UPLOAD_MODE 1 if (strlen(urldecode($_FILES[ATTACHMENT][name])) ! strlen($_FILES[ATTACHMENT][name])) { $_FILES[ATTACHMENT][name] urldecode($_FILES[ATTACHMENT][name]); } } $ATTACHMENTS upload(ATTACHMENT, $MODULE, false); if (!is_array($ATTACHMENTS)) { $dataBack array(status 0, content -ERR . $ATTACHMENTS); echo json_encode(data2utf8($dataBack)); exit; } ob_end_clean(); $ATTACHMENT_ID substr($ATTACHMENTS[ID], 0, -1); $ATTACHMENT_NAME substr($ATTACHMENTS[NAME], 0, -1); if ($TYPE mobile) { $ATTACHMENT_NAME td_iconv(urldecode($ATTACHMENT_NAME), utf-8, MYOA_CHARSET); }} else { $dataBack array(status 0, content -ERR . _(无文件上传)); echo json_encode(data2utf8($dataBack)); exit;}判断1 count($FILES) 就是$FILES是否取到上传数据。判断UPLOAD_MODE是否等于1如果等于1且文件名url解码后的长度不等于原长度则将文件名url解码。调用upload函数$ATTACHMENTS upload(ATTACHMENT, $MODULE, false);传入3个参数$MODULE im;。使用PHP的$FILES函数来获取我们上传的文件信息$FILES[ATTACHMENT][name] $_FILES的第一个下标必须是我们的input name值因此我们的POST包的Content-Disposition: form-data; nameATTACHMENT; filenamejpg中的name必须是ATTACHMENT。else if ($UPLOAD_MODE 2) { $DURATION intval($_POST[DURATION]); $CONTENT [vm] . $ATTACHMENT_ID . | . $ATTACHMENT_NAME . | . $DURATION . [/vm]; $query INSERT INTO WEIXUN_SHARE (UID, CONTENT, ADDTIME) VALUES ( . $_SESSION[LOGIN_UID] . , . $CONTENT . , . time() . ); $cursor exequery(TD::conn(), $query); echo OK . $CONTENT;}else if ($UPLOAD_MODE 3) { if (is_thumbable($ATTACHMENT_NAME)) { $FILE_PATH attach_real_path($ATTACHMENT_ID, $ATTACHMENT_NAME, $MODULE); $THUMB_FILE_PATH substr($FILE_PATH, 0, strlen($FILE_PATH) - strlen($ATTACHMENT_NAME)) . thumb_ . $ATTACHMENT_NAME; CreateThumb($FILE_PATH, 320, 240, $THUMB_FILE_PATH); } echo OK . $ATTACHMENT_ID;}本段代码说明了UPLOAD_MODE等于2或3的时候会返回$CONTENT或$ATTACHMENT_ID变量的值(1也可以)且返回值与最终文件上传所在的路径、文件名是相关的。综上所述我们得到了3个信息存在P值且不为空 ($_POST[P]获取)DEST_UID不为0 ($POST[DEST_UID]获取)UPLOAD_MODE 1或2或3 (非$POST[UPLOAD_MODE]获取)Content-Disposition中name值为ATTACHMENT流程图变量覆盖由于在upload.php中未找到取UPLOAD_MODE值的方法,但在实际测试中POST的UPLOAD_MODE值可以被正常带入且影响文件上传走向,因此判断接收UPLOAD_MODE值的方法存在于被包含的文件中,在解密后使用搜索工具也仅发现UPLOAD_MODE这个参数名仅存在于upload.php中,开始追溯之旅最后在common.inc.php文件中发现了UPLOAD_MODE的源头.具体调用为upload.php - session.php - coon.php - td_config.php - common.inc.php漏洞代码为:if (0 count($_POST)) { $arr_html_fields array(); foreach ($_POST as $s_key $s_value) { if (substr($s_key, 0, 7) _SERVER) { continue; } if (substr($s_key, 0, 15) ! TD_HTML_EDITOR_) { if (!is_array($s_value)) { $_POST[$s_key] addslashes(strip_tags($s_value)); } ${$s_key} $_POST[$s_key]; } else { if ($s_key TD_HTML_EDITOR_FORM_HTML_DATA || $s_key TD_HTML_EDITOR_PRCS_IN || $s_key TD_HTML_EDITOR_PRCS_OUT || $s_key TD_HTML_EDITOR_QTPL_PRCS_SET || isset($_POST[ACTION_TYPE]) ($_POST[ACTION_TYPE] approve_center || $_POST[ACTION_TYPE] workflow || $_POST[ACTION_TYPE] sms || $_POST[ACTION_TYPE] wiki) ($s_key CONTENT || $s_key TD_HTML_EDITOR_CONTENT || $s_key TD_HTML_EDITOR_TPT_CONTENT)) { unset($_POST[$s_key]); $s_key $s_key CONTENT ? $s_key : substr($s_key, 15); ${$s_key} addslashes($s_value); $arr_html_fields[$s_key] ${$s_key}; } else { $encoding mb_detect_encoding($s_value, GBK,UTF-8); unset($_POST[$s_key]); $s_key substr($s_key, 15); ${$s_key} addslashes(rich_text_clean($s_value, $encoding)); $arr_html_fields[$s_key] ${$s_key}; } } } reset($_POST); $_POST array_merge($_POST, $arr_html_fields);}首先一开始对$_POST长度进行了判断,这里$_POST实际是一个数组,存储了客户端传递的参数与值,接着使用foreach函数对数组进行遍历,foreach函数也是CTF变量覆盖漏洞经常考察的知识点,在这里我们假设$_POST数组中key为UPLOAD_MODE,value为2,那么我们将会最终进入这段代码中:if (substr($s_key, 0, 15) ! TD_HTML_EDITOR_) { if (!is_array($s_value)) { $_POST[$s_key] addslashes(strip_tags($s_value)); } ${$s_key} $_POST[$s_key];关键代码:${$s_key}$_POST[$s_key];方便大家理解我使用IDE将这段代码运行下.可以看到最终数组键名UPLOAD_MODE成了了变量名,而他的对应键值成为了变量值.这也就是upload.php未直接接收UPLOAD_MODE值,而我们仍可以传递此参数影响函数走向的原因.RCE在明白了上传流程后,我们还需要配合本次的包含漏洞来包含我们上传的代码实现RCE,文件包含利用点在/ispirit/interface/gateway.php文件中. 首先if ($P ! ) { if (preg_match(/[^a-z0-9;]/i, $P)) { echo _(非法参数); exit(); }参数P要为空值.接着if ($json) { $json stripcslashes($json); $json (array) json_decode($json); foreach ($json as $key $val ) { if ($key data) { $val (array) $val; foreach ($val as $keys $value ) { $keys $value; } } if ($key url) { $url $val; } } if ($url ! ) { if (substr($url, 0, 1) /) { $url substr($url, 1); } if ((strpos($url, general/) ! false) || (strpos($url, ispirit/) ! false) || (strpos($url, module/) ! false)) { include_once $url; } } exit();}由于存在json_decode($json);因此我们需要构造一个json,以及一个key为url且含有general/或ispirit/或module/的值,让函数走到include_once $url;处就完成了文件包含,至于$json从哪来,我想看到这你就明白了.include_once inc/session.php;include_once inc/conn.php关于我们   蛇獴攻防实验室成立于2019年11月专注网络攻防技术。地点吉林·长春

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

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

相关文章

免费网站开发框架wordpress活动召集插件

今年苹果手机发布的新机自发布以来就受到了热烈的追捧,销量一直都处于只增不减的趋势。苹果手机为何如此之火?除了本身自带的IOS系统之外,手机自带很多小技巧,你知道不?今天就来为大家介绍苹果手机中的三种截屏小技巧&…

织梦茶叶网站模板免费下载外贸网站使用攻略

四个问题: 一,Jarvis March算法借鉴了什么算法? 二,如何确定初始点 三,如何获取凸包的边? 四,Jarvis March算法的好处在哪里? 首先看第一个问题, 一,Jarvis …

河北省建设厅网站首页平台网站模板素材图片下载

🔥博客主页: 小羊失眠啦. 🔖系列专栏: C语言、Linux、Cpolar ❤️感谢大家点赞👍收藏⭐评论✍️ 文章目录 前言1.安装MariaDB2.安装cpolar内网穿透工具3. 创建安全隧道映射mysql4. 公网远程连接5. 固定远程连接地址 前…

做集装箱的网站建应用网站

Spire.PDF for .NET 是一款独立 PDF 控件,用于 .NET 程序中创建、编辑和操作 PDF 文档。使用 Spire.PDF 类库,开发人员可以新建一个 PDF 文档或者对现有的 PDF 文档进行处理,且无需安装 Adobe Acrobat。 E-iceblue 功能类库Spire 系列文档处…

第三方网站建设平台山东省住房和城乡建设厅政务服务

【SA8295P 源码分析】32 - QNX Ethernet Phy_Switch 驱动初始化 源码分析 一、使用现有的库配置 emac 和 phy_switch功能二、phy_switch 驱动初始化流程分析2.1 emac_mdio_register() 函数分析2.2 emac_mdio_callback() 函数分析系列文章汇总见:《【SA8295P 源码分析 (四)】网…

360网站推广官网怎么优化网站平台开发要注意什么问题

这是我的课程作业,用了 Eigen 库,最后的输出是 latex 的表格的一部分 具体内容就是 梯度下降法 精确线搜索(单峰区间搜索 黄金分割) 从书本的 Matlab 代码转译过来的其实,所以应该是一看就懂了 这里定义了两个测试…

如何使用框架来建设网站一份完整的营销策划书

ChatGPT的诞生使Excel公式变得过时。通过使用 ChatGPT 的代码解释器你可以做到: 分析数据创建图表 这就像用自然语言与电子表格交谈一样。我将向大家展示如何使用 ChatGPT 执行此操作并将结果导出为Excel格式: 作为示例,我将分析并创建美国…

单位网站建设服务区块链插件wordpress

clone() 方法是Object类中定义的一个方法,用于创建并返回一个对象的拷贝。但是,需要注意的是,clone() 方法是浅拷贝,即它只会复制对象的字段值,而不会复制对象引用的其他对象。 要使用clone()方法,需要满足…

网页设计与网站开发期末4399小游戏电脑版页面

一、评论爬取 以百度贴吧中“美团骑手吧”为例,对页面中的帖子评论进行爬取,并将结果以json的格式保存到本地中。 from lxml import etree import requests import json# 根据网页url获取评论 def GetComments(url):# 使用requests库发送GET请求&#…

网站建设软文模板外贸有哪些网站

本文将通过学生信息管理来介绍asp.net ajax的综合应用实例,包括“浏览”、“查询”、“添加”和“多选删除”功能,以及其它相关设计。 本示例源代码下载地址:http://down.51cto.com/data/220541 本示例中,程序架构参考Petshop&…

河北优化网站获客qq网站 内部搜索引擎

记 今天闲来无事,不想刷codeforces了,到洛谷提高组训练营找几道水题刷着玩玩(虽然自己早已过了打OI的年纪)~ 简单博弈论专题 P1199 三国游戏 这么考虑,由于电脑总是不能让我搭配出当前能搭配出的最大的…

跨境浏览网站wordpress导航如何优化

博主介绍:✌全网粉丝5W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌ 博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+…

常见的有利于seo的网站系统聊城手机网站建设服务

启动类去掉RibbonClient注解 10 50 100 1 权重优先调用 注意:启动类加RibbonClient注解 2 集群优先调用 3 元数据基于版本优先调用

建设银行网站安全分析自己做淘宝优惠券网站

[小学语文]计算机在小学写字教学中的运用之我见随着经济的快速发展,教育也出现了加快发展、加快改革的势态。随着教育技术的不断增加,教学设备得以不断更新,教学手段变得更加现代化。特别是我们火星小学,计算机辅助教学已成为学校…

wordpress 主题 打包陕西关键词优化推荐

文章目录 写在前面Panda3D程序设计程序分析运行结果系列文章写在后面 写在前面 本期内容 基于panda3d的迷宫中的小球游戏 所需环境 pythonpycharm或anacondapanda3d 下载地址 https://download.csdn.net/download/m0_68111267/88792121 Panda3D Panda3D是一种开放源代码…

攀枝花 网站建设微信视频网站怎么做

参考引用 STM32 入门教程-江科协 1. STM32 简介 1.1 STM32 套件介绍 1.2 STM32 简介 STM32 是 ST 公司基于 ARM Cortex-M 内核开发的 32 位微控制器 应用:嵌入式领域,如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等 1.3 ARM …

免费海报在线制作网站科技公司网站设计欣赏

来源于fullstack,绿色为重点 1. Go语言是什么 Go 是一种通用编程语言,设计初衷是为了进行系统编程。它最初是由 Google 的 Robert Griesemer、Rob Pike 和 Ken Thompson 在 2007 年开发的。Go 语言是强类型且静态类型的,它内置了对垃圾回收…

民宿可以在哪些网站做推广外贸平台公司

模型,请求数据 使用记录模型响应模型减少代码量任意 dict 构成的响应 请求附加信息Header信息 其他的请求信息表单数据文件数据基本使用多文件 表单文件 使用记录 模型 响应模型 有的时候一个post接口,请求模型和响应模型我们需要的字段是不一样的&am…

常州网站建设开发上海企业建站公司排名

查看可安装的版本 dnf module list nodejs选择需要版本安装 dnf module install nodejs:<stream>查看版本

佛山企业网站开发网站手机版方案

知识点 数组是一种用连续空间来存储相同数据类型的线性数据结构。 ArrayList 的底层是使用动态的数组实现的。 ArrayList 的初始化容量是0&#xff0c;只有第一次添加的时候才会为10. ArrayList 在进行扩容的时候都是上一次大小的1.5倍&#xff0c;每次扩容都需要拷贝数组。…