Không còn ám ảnh khi Đăng ký môn học VNU – Phần 1

Đầu tiên mình xin đính chính, đây không phải là bài viết hướng dẫn khai thác, xâm nhập trái phép hệ thống. Mình muốn viết để chia sẻ về kĩ thuật phân tích hệ thống nhằm mục đích trao đổi kiến thức. Đặc biệt sẽ hữu ích đối với những người phát triển ứng dụng web đang quan tâm vấn đề bảo mật. Mình hoàn toàn không chịu trách nhiệm nếu bạn khai thác với mục đích và ý đồ xấu.
Sau khi đọc xong bài này ít nhất sẽ giúp bạn sẽ có thể tự mình đăng ký với xác suất thành công cao hơn. Đối với các bạn không quan tâm mấy cái kĩ thuật thì chỉ cần đọc phần Tóm tắtTips là đủ. Bạn nào đang phát triển web hoặc quan tâm về bảo mật an ninh cũng sẽ có thêm casestudy để áp dụng vào hệ thống của mình.
Mình thấy rất nhiều bạn không đăng ký được hoặc đang gặp khó khăn trên hệ thống môn học trên hệ thống. Quy trình của hệ thống được thiết kế rất đơn giản, chỉ cần : chọn môn học, bấm ghi nhận. DONE =))

Tuy nhiên thực tế thì không được đơn giản như quy trình vừa rồi, sinh viên chắc chắn sẽ phải được trải qua nhiều cung bậc cảm xúc khác nhau: chết ngất rồi thì tự nhiên sống lại, đang sống thì tự nhiên chết, nói chung là đau tim :)). Chắc chắn người sử dụng sẽ được trải qua những trường hợp phổ biến thế này:

– Hệ thống mở sớm, hoặc muộn hơn thông báo
– Không tải được môn học, không cho phép đăng nhập
– Chọn môn học và bị đứng trang
– Bấm ghi nhận không được
– Sau khi ghi nhận, một lúc sau F5 thấy chưa đăng ký được môn học

Khi gặp phải nhiều trạng thái cảm xúc như vậy đã khiến rất nhiều sinh viên muốn đập máy =((( Đứa nào cũng muốn được đăng ký môn học một cách nhanh gọn, chính xác. Hành trình thực hiện giấc mơ đăng ký môn học trong tích tắc bắt đầu từ đây …

Bài này sẽ chia làm 3 phần: Giới thiệu về hệ thống, Khám phá hệ thống, Chiến thuật khắc phục.

I. Giới thiệu hệ thống

Trước tiên mình xin giới thiệu tổng quan về hệ thống.

Hệ thống đăng ký môn học của ĐHQG được truy cập ở địa chỉ chính là: http://dangkyhoc.vnu.edu.vn/
dkmh_1
Sau khi sinh viên đăng nhập tài khoản trường cung cấp.
Nếu sinh viên truy cập vào hệ thống lúc chưa mở đăng ký, có 2 tính huống có thể xảy ra.
– Hiện danh sách các môn học nhưng chưa cho phép chọn môn học
– Không hiện danh sách môn học gì cả
– Không hiện danh sách nhưng có thông báo ( chưa trong thời gian đăng ký môn học)
– Đăng ký các môn bình thường

II. Khám phá hệ thống

Trong bài này mình sẽ trình bày khi hệ thống ở trạng thái: Chưa đến giờ đăng ký nhưng đã hiện môn học.
Giả sử 9h hệ thống sẽ mở đăng ký môn học, nhưng lại hiện danh sách môn dự kiến từ trước đó (sớm hơn 9h)

screen-shot-2016-12-21-at-23-08-16

Tò mò xem các resource hệ thống gửi về client ta nhận được các file js sau:

screen-shot-2016-12-21-at-22-20-52
Mình để ý thấy trước và sau khi mở đăng ký, server đều trả về một số file giống nhau!!! Nghi ngờ quá :)). Mở thử file Registration.js xem sao.
screen-shot-2016-12-21-at-22-32-58
Nhìn kinh quá, có một số file đã được nén minify :3

Download file về và Refactor format code xem nào:

screen-shot-2016-12-21-at-22-33-28
Có vẻ ổn hơn rồi, code khá dễ đọc :))

Tò mò các request nên mình sẽ chỉ quan tâm đến các hàm liên quan đến thao tác POST, GET lên server. Mình tìm thấy 2 function có gọi hàm ajaxRequest()

screen-shot-2016-12-21-at-22-34-41

Có một function DSDK() hình như thao tác POST lên server. Cùng xem tiếp callback trong đó có gì nào.
screen-shot-2016-12-21-at-22-36-23
function errorCallback1 ta thấy có điều nghi ngờ ở đây??? Có biến: $registrationAvailable

Mình đoán $registrationAvailable là mấu chốt của vấn đề :))

Hiện tại đang là 8h sáng, test trên console trình duyệt xem thế nào:

$registrationAvailable = “false” :))

Tự sửa lại thành true xem sao:

$registrationAvailable = true

screen-shot-2016-12-21-at-22-37-32
:/ Hệ thống y nguyên thế ??? Không thể có chuyện sinh ra biến này mà không dùng được. Thử tạo ra các thao tác trên web xem sao. Mình sẽ bấm chuyển môn học sang môn toàn trường.

Screen Shot 2016-12-21 at 22.39.00.png
Ồ trang đã load lại một số nội dung, và hiện ô checkbox chọn được, danh sách môn đăng ký mặc định cũng có thể xóa đi được luôn. Bầu trời như đang mở rộng ngay trước mắt =)) Bây giờ là 8h15 sáng. Mình hiện tại có thể chọn môn, hủy môn như lúc hệ thống mở đăng ký. Trong khi sinh viên khác khi đăng nhập sẽ không thể thao tác được.

Sau khi chọn đủ tín chỉ, và thể dục mình muốn học, mình sẽ bấm gửi. Khoan! Nút ghi nhận của em đâu :(((.

Hệ thống đã mở đâu mà hiện nút ghi nhận chứ :sexy:

screen-shot-2016-12-21-at-22-40-12

Không thể từ bỏ được, mò tiếp nào…
Tiếp tục đọc lại file js ở Registration.js , có một function cần quan tâm ở đây
screen-shot-2016-12-21-at-22-41-48

Function sẽ chạy khi click vào class “confirm-registration”. Tìm xem class đó là gì nào.

screen-shot-2016-12-21-at-22-43-37

Hóa ra source html không tồn tại class .confirm-registration đâu cả. Chỉ khi nào đến 9h thì thẻ đó mới xuất hiện:/ Thử tự tạo 1 nút bất kì và chèn class vào source html

Thử tạo 1 nút bất kì và chèn class vào source html

hackme

Screen Shot 2016-12-21 at 23.03.48.png

Bây giờ mình click button “hackme” xem sao

screen-shot-2016-12-21-at-22-48-19

Ồ :)) có request được gửi đi rồi. Thử đọc thông tin response:

1
Chưa đến giờ đăng ký @@@. Như vậy có thể nói đã HẾT CÁCH đăng ký trước khi mở cửa, vì hệ thống đã check trên server?

Cùng nhìn lại thì ta đã thu hoạch được cái rất giá trị, đó là Chưa mở đăng ký nhưng ta đã chuẩn bị mọi thứ sẵn sàng, từ việc hủy môn mặc định, đăng ký thể dục, các môn ưng ý mà không có ai chen chân đăng ký. Cứ một mình một chiến trường, chọn môn dễ hơn lên facebook :)). Và vì thế quy trình đăng ký sẽ thuận lợi hơn. Đến giờ đúng đăng ký 9h, bấm nút HACKME vừa tạo ra ở trên là xong. Tóm tắt lại chỉ đơn giản và các bạn có thể áp dụng thế này:

Bước 1: Trước khi bắt đầu đến giờ đăng ký khoảng 15-20p: vào console kích hoạt biến $registrationAvailable =true
Bước 2: Sửa hoặc tạo 1 button bất kì và đặt tên class là “confim-registration”.
Bước 3: Đổi chế độ sang môn học toàn trường để reload lại data
Bước 4: Thao tác đăng ký chọn môn bình thường
Bước 5: Đợi đến đúng giờ đăng ký thì bấm Button vừa tạo.

Chưa hết

Rõ ràng với chiến thuật này ta không hề xâm nhập trái phép hệ thống, ta chỉ khéo léo chuẩn bị “các thứ”, đến khi vào trận thì bấm nút ghi nhận là xong.

KHOAN!!!

Trong khi lúc này toàn bộ sinh viên đang háo hức F5, tranh giành nhau từng slot thể dục thì bạn đã hoàn thành từ ngay 9h1p. Sung sướng và post cái ảnh lên khoe đã dk môn xong. Tuy nhiên cuộc đời không thuận lợi được vậy, chỉ sau 15 phút kết quả đăng ký mình bị reset lại từ đầu !!!. Mình mất hết môn học vừa đăng kí, thể dục cũng bay luôn? Hành động này đúng là cho người ta đau tim?

images

Có gì đó nghi ngờ ở đây:/ Chắc là ở phía quản lý có chế độ reset kết quả đăng ký. Vậy nên có nhiều sinh viên đăng ký thể dục các môn ngon lành và yên tâm đi ngủ, ngủ dậy thì mất hết :)) chính là do chức năng Reset này đấy =)))

wishihadsomethingilikedwasgoodatand_f743a223c2219be19945fc6534c2616e

Bình tĩnh lại, bây giờ mình sẽ gửi các request từ lịch sử cách đây vài phút xem sao.

screen-shot-2016-12-21-at-22-55-00

Ồ, hệ thống lại ghi nhận thành công. :)) (Phần này mình xin skip vì khá dài, nếu có thời gian mình sẽ nói chi tiết ở Phần 2, có rất nhiều kĩ thuật để áp dụng thực hiện đăng ký dễ hơn)

Tóm lại sau khi áp dụng ghi nhận xong, các bạn nhớ chú ý, đăng ký thành công cũng đừng vội mừng mà bỏ đi chơi, rất có thể nhà trường sẽ reset lại, lúc đấy lại khóc không ra tiếng đâu =))

TIPS

Ngoài 5 bước như trên, có một số tips mình muốn chia sẻ để đăng ký dễ hơn:
– Dùng trình duyệt Firefox thay vì Cốc cốc, chrome, nên clear cache, hoặc mở ẩn danh.
– Hệ thống được phân tán trên nhiều IP chứ không chỉ mỗi tên miền http://dangkyhoc.vnu.edu.vn/
Khi lag bạn có thể vào một trong 2 hoặc cả 2 trang sau:
http://dangkyhoc.vnu.edu.vn/
http://112.137.128.121/
– Nên bình tĩnh hành động, cáu không làm được việc :))
– Bạn phải thường xuyên truy cập trang http://dangkyhoc.vnu.edu.vn/ để không làm hết hạn session. Chỉ cần mở tab http://dangkyhoc.vnu.edu.vn/ thỉnh thoảng bấm F5.
– Khi ghi nhận thành công đừng vội mừng, phải tiếp tục theo dõi http://dangkyhoc.vnu.edu.vn/xem-va-…
Khi bị mất môn học, lý do nhà trường reset kết quả, bạn phải đăng ký lại từ đầu
– Cách đơn giản nhất là nhờ thằng nào UET nó đăng ký hộ cho :))
Thật ra trong hệ thống Đăng ký môn học còn nhiều thứ mà ta có thể khám phá, học tập nữa, từ việc hệ thống triển khai phân tán nhiều server, cơ chế gửi nhận request…

 

Trong phần 1 này mình chỉ nói sơ qua về cách thức thực hiện của hệ thống. Nếu có thời gian mình sẽ nói chi tiết hơn các cách mình thực hiện resent request ở phần 2. Bên cạnh đó mình sẽ đề xuất hỗ trợ ngăn hành động ở bên trên :)). Hẹn gặp mọi người ở phần sau.

===

Hôm nay kỉ niệm ngày mua cây đàn đầu tiên về nghịch, cũng là lần public bài đầu tiên trên blog nên viết mình post bài xin view của thiên hạ ?

danguitar

Chúc các bạn có một kỳ ĐKMH với cảm xúc hạnh phúc và như ý :))

Cảm ơn các bạn đã bỏ thời gian để đọc bài nhảm này =))

Thân ái :))

ITZone via tuantmsite

Chia sẻ bài viết ngay