提一下那個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
:
可以發現這裡的codeuid
和type
都是可控的。現在就可以利用了。
首先訪問/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漏洞概述 該漏洞型別為任意使用者偽造,未經授權的遠端攻擊者可以通過精心構造的請求包進行任意使用者偽造登入,...