在线炒股配资门户网-杠杆交易软件搜加杠网-【东方资本】,股票杠杆app,今日热股什么意思,预计下周一股市行情展望

提交需求
*
*

*
*
*
立即提交
點擊”立即提交”,表明我理解并同意 《美創科技隱私條款》

logo

    產品與服務
    解決方案
    技術支持
    合作發展
    關于美創

    申請試用
      泛微ecology9 ofsLogin.jsp 信息泄露與前臺任意用戶登錄漏洞分析
      發布時間:2023-05-19 閱讀次數: 982 次

      起因

      長亭最近發了一個漏洞預警《在野1day風險提示|泛微Ecology信息泄露&前臺任意用戶登錄漏洞》,預警文章鏈接為https://mp.weixin.qq.com/s/ZvbXbtcpq8EslNKZ2hHW_w,本著學習研究的態度,對漏洞可能涉及的邏輯進行了粗略研究。



      分析
      長亭在預警文章中放出了最新版本的xray,更新后的xray可以對該漏洞進行遠程檢測,檢測命令如下

      ./xray ws --poc poc-yaml-ecology-ofslogin-aul --url http://example.com

      在本地運行上述命令

      圖片

      通過wireshark即可抓取到xray驗證該漏洞所發出的請求數據

      /mobile/plugin/1/ofsLogin.jsp?syscode=syscode&timestamp=2&gopage=3&receiver=test&loginTokenFromThird=

      圖片

      既然定位到了具體文件,那么接下來就可以進行分析了

      打開泛微ecology9 安裝目錄下的mobile/plugin/1/ofsLogin.jsp文件,如下

      圖片

      首先在19-23行,在訪問該mobile/plugin/1/ofsLogin.jsp這個url時,會首先接收傳輸過來的syscode、receiver、timestamp、loginTokenFromThird、gopage這幾個參數

      圖片

      然后在26行,調用AESCoder.encrypt方法對參數進行AES加密,AESCoder.encrypt方法的第一個參數為receiver+timestamp,調用一個Prop.getPropValue方法獲得一個返回值并與接收到的syscode值進行拼接,得到的返回值作為第二個參數,AES加密得到的數據賦值給loginTokenFromThird2變量

      圖片

      接下來從36行開始進行登錄邏輯的驗證,在36-39行,判斷接收到的loginTokenFromThird與生成的loginTokenFromThird2值是否相等,如果不相等,則登錄失敗,并調轉到/login/Login.jsp。只有loginTokenFromThird與loginTokenFromThird2相等才能繼續執行下面的登錄邏輯。

      圖片

      繼續往下,當loginTokenFromThird與loginTokenFromThird2相等時,首先會將接收到的syscode值作為條件參數在數據表ofs_sendinfo中進行查詢,查詢的字段為hrmtransrule。當查詢到的hrmtransrule為空時(也就是查詢條件syscode值在ofs_sendinfo表中不存在),將hrmtransrule賦值為“1”;當查詢到的hrmtransrule不為空時,進行52-63行的判斷。定義了一個變量rule,默認值為"loginid",若hrmtransrule為"0",則將rule賦值為"id";若hrmtransrule為"1",則rule賦值為"loginid",后面的邏輯同理。

      圖片

      將上述判斷邏輯執行過后,rule變量的值作為條件字段在數據表HrmResource中查詢,而條件參數則為接收到的receiver值

      圖片

      此時筆者直接在本地測試環境數據庫中執行select * from HrmResource;SQL語句查了一下,發現筆者的環境中HrmResource是個空表

      圖片

      也就是說在筆者的環境中,后面的邏輯是無法繼續執行的

      接下來到人事->新建人員中新建一個人員

      圖片

      新建完成后,再次查詢,可以看到HrmResource表中已經有數據

      圖片

      故筆者猜測,只有HrmResource用戶表中存在數據時,該漏洞才有可能被利用。

      繼續后面的邏輯,后面的邏輯就比較簡單了,從查詢到的結果中獲取id并賦值給userid,然后根據userid生成認證憑證,也就是session,完成認證后就跳轉到用戶指定的頁面,也就是接收到的gopage參數

      圖片

      分析到這里,整個登錄邏輯已經非常清晰了,關鍵在兩個條件:

      1.loginTokenFromThird需要與loginTokenFromThird2相等,loginTokenFromThird可控,loginTokenFromThird2則是根據可控的參數調用內部加密函數生成,且加密函數的入參不變時,loginTokenFromThird2也是固定的;

      2.HrmResource用戶信息表中必須要有數據。



      測試

      在HrmResource表中loginid其實就是登錄用戶名,比如默認系統管理員的loginid就是sysadmin,想要接近loginid的判斷邏輯有兩個方法,第一種是syscode值在表中不存在,第二種是根據syscode查到的hrmtransrule必須"1",顯然第一種更好利用一些。接下來就可以構造參數生成loginTokenFromThird2,然后將得到的loginTokenFromThird2值原封不動作為loginTokenFromThird參數值即可完成任意用戶登錄的利用。

      圖片


      免費試用
      服務熱線

      馬上咨詢

      400-811-3777

      回到頂部