Hacker đã hack điểm ViOlympic như thế nào?

Tôi đã hack điểm ViOlympic như thế nào?

Đây là một bài viết của một Hacker đã hack vào hệ thống tính điểm của ViOlympic như thế nào. Bài viết đã được chia sẽ rộng rãi trên các trang web và mạng xã hội.
Biết viết này mình viết để chỉ cho các bạn thấy mình đã hack điểm trên trang thi toán ViOlympic như thế nào? Qua bài viết này mình hy vọng các bạn có thể học hỏi thêm được gì đó hay là tham khảo về bảo mật và an toàn thi cử trực tuyến. Mình không khuyến khíchhoàn toàn không chịu trách nhiệm nếu các bạn dùng nó để gian lận thi cử.

Tại sao mình chon ViOlympic làm đề tài để hack? Sở dĩ mình quan tâm là vì đây là một trang thi toán online đầu tiên và duy nhất ở Việt Nam. Rất nhiều thế hệ học sinh đã mất nhiều thời gian công sức để có được thứ hạng cao trên trang này. Tuy nhiên, gần đây, cuộc thi toán online đã không còn giữ được vẻ đẹp của nó, không còn nâng cao tính tư duy toán mà chỉ là mấy bài toán xào đi xào lại, năm nào cũng như năm nào. Nói chung là mình thích thì mình hack thôi.Hack Game Toán? Gần đây ViOlympic đã thay đổi giao diện của trang thi. Họ không còn sử dụng flash nữa mà thay vào đó là HTML5 và JavaScript. Dùng trình duyệt mình dễ thấy các đoạn script dùng để vận hành các game thi này. Mình lấy ví dụ bài “12 Con giáp”, thì mã nguồn của trang chứa nhưng file javascript như sau:

Hacker da hack diem ViOlympic nhu the nao 1
Hacker da hack diem ViOlympic nhu the nao 1
Để ý tới phần dưới cùng của file GameOver.js có một đoạn mã dùng để lưu điểm thi và gửi điểm về phía server như sau:
Hacker da hack diem ViOlympic nhu the nao 2
Hacker da hack diem ViOlympic nhu the nao 2

Câu chuyện bây giờ thật dễ dàng, chỉ cần thay đổi “this.score” thành “100” là xong.

Thế còn bài trang giấy? Đây không phải là dạng bài flash, điểm của bài này sẽ được gửi về server để chấm, rồi mới trả kết quả về cho học sinh! Ghê thế? Hack làm sao đây? Mình xem mã nguồn của trang và phát hiện ra cách thức gửi bài về server như sau: Đề bài sẽ được gắn một con số để đánh dấu phân biệt các bài với nhau, tạm gọi là “id” của bài. Khi nộp bài, đáp án sẽ được mã hóa bằng thuật toán hash MD5 rồi gửi về server với cấu trúc: id:[md5(đáp án)]…. Xem thêm tại đây

Ô vãi?? Thế là không dùng cách gửi 100 điểm về server được rồi?

Sau vài giờ suy nghĩ mình đưa ra giả thuyết sever sẽ chấm điểm câu hỏi có mã số “id” bằng cách so sánh md5 của đáp án với md5 của kết quả từ học sinh. Mình cũng giả thuyết rằng người ta sẽ chỉ quan tâm đến “id” và md5 của đáp án mà thôi. Để kiểm tra giả thuyết trên, mình tiến hành như sau:

Hacker da hack diem ViOlympic nhu the nao 3
Hacker da hack diem ViOlympic nhu the nao 3
  • Đầu tiên là tạo một tài khoản toán lớp 5 và làm đúng hết các câu hỏi rồi lưu lại giá trị của hàm GetExamScoreAns() trong file http://violympic.vn/js/doanh_exam_web.js. Kết quả thu được là:

“15393:[1abee8aeb19bff65f76fddd32e6098bd]15391:[0fffc305055fc6bffd2a39949dd8625a]15396:[5a6b3c1e11295eaf7d4472a22495eb52]15390:[f89fbc4447c93b6363bcf10edd5b5d4c]15405:[c0bd6e47baaf76c717b4a032a13356b0]15400:[20ed4067a809ee8828817f32045db7fc]15407:[5a6b3c1e11295eaf7d4472a22495eb52]15417:[f8f29898df7c7e71cfa528291600d06e]15412:[330c473ab8dc4363b9f0b67bddc55fb5]15415:[a4e7a49bcbd1b581f017dec5fbface04]”

  • Tạo một tài khoản lớp 12 và thay đổi hàm GetExamScoreAns() để nó gửi lại kết quả mà mình thu được ở bước trên.
  • Không ngoài dự đoán, chúng ta đã có 100 điểm.
Mở rộng? Hoàn toàn tương tự, ta cũng có thể hack các trang thi toán Tiếng Anh, Vật lý trên violympic.
 
Hoàn thiện sản phẩm? Như thường lệ, mình sẽ tạo cái gọi là tool hack. Đó là một đoạn mã javascript mô phỏng lại quá trình gửi điểm hoặc gửi đáp án về server.
Để sử dụng đoạn mã này trên Chrome các bạn cài đặt Tamper Monkey. Nêu bạn dùng FireFox các bạn cài đặt GreaseMonkey.
Sau khi có được những cái trên, mở links ở phía dưới và ấn Install để dùng tool hack này nhé.
Tiền trình thông báo và fix lỗi:
  • 15 tháng 3 năm 2017: thông báo lỗi
  • 15 tháng 3 năm 2017: ViOlympic nhận thông báo lỗi và phản hồi
  • Đến nay vẫn chưa fix lỗi.

Leave a Reply

Your email address will not be published. Required fields are marked *