通達OA的前台任意使用者登入漏洞

2021-10-22 10:22:42 字數 4015 閱讀 3587

提一下那個poc:

通達 oa 任意使用者登入漏洞

首先我們找到檔案根目錄的檔案logincheck_code.php,這個檔案是沒有許可權驗證的。

我們會發現在 180 行附近有兩行**:

$login_uid = $uid;

$login_user_id = $user_id;

...$_session["login_uid"] = $login_uid;

$_session["login_user_id"] = $login_user_id;

驗證登入時就是判斷的這兩個session

往上翻翻$uid哪來的:

可以發現是直接從$_post中獲取的,也就是任意控制即可。

但是15行附近有個判斷,如果快取裡沒有code_login.$codeuid$codeuid也是可以任意控制的) 就退出程式了,我們可以全域性搜尋一下這個快取在**設定了。

很快找到一處:ispirit\login_code.php

<?php 

include_once "inc/utility_all.php";

include_once "inc/utility_cache.php";

include_once "inc/phpqrcode.php";

$codeuid = $_get["codeuid"];

$login_codeuid = td::get_cache("code_login_pc" . $codeuid);

if (empty($login_codeuid))

$databack = array("codeuid" => $login_codeuid, "source" => "pc", "codetime" => time());

$datastr = td_authcode(json_encode($databack), "encode");

$datastr = "login_code" . $datastr;

$databacks = array("codeuid" => $login_codeuid, "authcode" => $datastr);

//將 codeuid 存入快取

td::set_cache("code_login_pc" . $login_codeuid, $login_codeuid, 120);

//輸出 codeuid

echo json_encode(td_iconv($databacks, myoa_charset, "utf-8"));

echo "\r\n\r\n\r\n";

?>

這裡給重要的三句話寫了注釋。我們只要直接訪問一次這個檔案就可以偽造了。

首先訪問一次/ispirit/login_code.php

存下這個codeuid。然後訪問/logincheck_code.php

uid設定成1,這個id預設是管理員。然後codeuid設定成:_pc+codeuid

隨便訪問個需要驗證的url/pda/main.php

一樣的思路,我們全域性搜尋會找到在檔案\ispirit\login_code_check.php處有類似的**:

我們往上翻:

會發現$uid來自$code_info$code_info又來自快取code_info_pc+$login_codeuid

這裡的$code_info[type]需要等於confirm.

再上面一點有這樣的**:

//$codeuid 可控

$login_codeuid = td::get_cache("code_login_pc" . $codeuid);

這裡和之前一樣得。

然後我找找**有設定code_info_pc的**,在檔案general\login_code_scan.php

可以發現這裡的codeuidtype都是可控的。現在就可以利用了。

首先訪問/ispirit/login_code.php獲取codeuid

訪問/general/login_code_scan.php提交post引數:

source=pc&type=confirm&codeuid=&uid=1&

最後訪問/ispirit/login_code_check.php?codeuid=***

這樣$_session裡就有了登入的資訊了。

第一處修復logincheck_code.php

這裡從redis中獲取了資料,判斷了$uid不等於0的話才能下一步,相當於做了個許可權驗證吧。

如果我們能找到一處設定oa:authcode:token:***的地方,或者找到一處可以控制鍵值的快取,即可繞過。

第二處修復\general\login_code_scan.php

在設定code_info_pc前進行了許可權驗證,這裡根據傳入的session查詢此session是否登陸過,如果沒登陸過就退出程式

這個漏洞其實挺簡單的,但是到現在才發現,看來挖掘這樣的洞更需要一些耐心和細心。由於這個程式用了全域性覆蓋,我們可以直接覆蓋_session裡的資料,但是_session是存在redis中的。所以如果有一處先開啟session_start然後引入了session.php檔案,即可直接覆蓋_session裡的資料。

漏洞復現 通達OA前台任意使用者偽造登入漏洞

0x01.漏洞簡介 通達oa採用基於web的企業計算,主http伺服器採用了世界上最先進的apache伺服器,效能穩定可靠。資料訪問集中控制,避免了資料洩漏的可能。提供資料備份工具,保護系統資料安全。多級的許可權控制,完善的密碼驗證與登入驗證機制更加強了系統安全性。0x02.漏洞描述 該漏洞型別為任...

通達OA前台任意使用者登入分析

最近爆了個通達 oa 任意使用者登入漏洞,正好分析分析,順便師傅一起學習。首先我們找到檔案根目錄的檔案logincheck code.php,這個檔案是沒有許可權驗證的。我們會發現在 180 行附近有兩行 login uid uid login user id user id session log...

通達OA前台cookie偽造任意登入漏洞復現

通達oa前台cookie偽造登入漏洞復現 0x00前言 通達oa是一套辦公系統。2020年04月17日,通達oa官方在更新了乙個v11版本安全補丁,其中修復了乙個任意使用者偽造登入漏洞。0x01漏洞概述 該漏洞型別為任意使用者偽造,未經授權的遠端攻擊者可以通過精心構造的請求包進行任意使用者偽造登入,...