最近大家都在選課吧。我就運氣特別不好,通識一節沒有,要加簽的一大堆…
所以跟iach526一起做了個小專案。其實就是暴力搶課
工具
- kali Linux
- burpsuite (如果你有kali就會有
搶課流程
拿餅乾
打開burpsuite,攔截學校選課系統的POST
經過我們的觀察,它每次執行重大行動(加退選)時,都會發一個新的餅乾。
所以每次選完課都要重新烤一個新餅乾。另外,在選課的時候header是不會變的,就算裡面有content-length它好像也不太看。經實驗發現,直接刪掉它也選得到課。
選課時攔截下來的POST長這樣:
POST /cofsys/plsql/enro_nomo3_dml HTTP/1.1
Host: cportal.nchu.edu.tw
Cookie: DONT STEAL MY COOKIE #你要複製的在這,不要偷我的餅乾
Content-Length: 42 #這是最下面那行的長度
Cache-Control: max-age=0
Sec-Ch-Ua: "Chromium";v="137", "Not/A)Brand";v="24"
Sec-Ch-Ua-Mobile: ?0
Sec-Ch-Ua-Platform: "Linux"
Accept-Language: en-US,en;q=0.9
Origin: https://cportal.nchu.edu.tw
Content-Type: application/x-www-form-urlencoded
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: frame
Referer: https://cportal.nchu.edu.tw/cofsys/plsql/enro_nomo2_check
Accept-Encoding: gzip, deflate, br
Priority: u=0, i
Connection: keep-alive
p_stud_no=your_student_id&v_tick=1057847751891 #前面是你的學號,後面是那節課的課號。
接下來複製curl,就可以準備送進烤箱啦~
烤餅乾
餅乾已經成功拿出來了,接下來要送進烤箱裡烤。把剛剛複製的貼在curl,寫一隻python把剛剛的東西都送出去就完事了!
開始搶劫!
在這請出chatGPT幫忙寫一下:
import requests
from concurrent.futures import ThreadPoolExecutor
cookies = {
Paste your cookie here
}
headers = {
Paste your headers here
}
data = {
'p_stud_no'='StudentID'
'v_tick'='Class Number' #在選課系統開F12找一下就有
}
def send_request():
try:
response = requests.post(
'https://cportal.nchu.edu.tw/cofsys/plsql/enro_nomo3_dml',
headers=headers,
cookies=cookies,
data=data
)
print(f'Status: {response.status_code}, Length: {len(response.text)}')
except Exception as e:
print(f'Error: {e}')
# 設定同時最多 5 個線程
with ThreadPoolExecutor(max_workers=5) as executor:
# 執行 10 次請求
futures = [executor.submit(send_request) for _ in range(10)]
# 等待所有任務完成
for future in futures:
future.result()
執行這隻程式,你就會得到你要的課拉。前提是沒衝堂還有你本來就可以選這節,比如說不開放外系的課你強制給它POST,server只會覺得你不合理而已。
心得
雖然有發現可以直接發POST的方法來選課,但是目前一次只能發一節課,而且發一次就要更新cookie。一次選兩節以上的後果,就是變數會被洗掉,最後只選到最後一節課。這個問題下次再解決。
這次只達到半自動化,接下來系統開放的時間會盡量開發能自動化的辦法,現在是想用shell script去拿cookie再轉成curl的模式直接送給server。這方法比較通用,畢竟不是大家都會用kali。做完的時候會再發一篇「中興大學搶課流氓-2」。祝大家選課順利 !