Tôi đã hack web trường như thế nào

Nếu mình bỏ qua Header này mà không nghe theo lời điều hướng của nó, liệu sẽ thế nào nhỉ ?

Tôi đã hack web trường như thế nào

Lời mở đầu:

Gió thu Hà Nội

Mùa thu năm 2017, Hà Nội chìm trong làn gió mát lạnh, mang theo hương vị của lá vàng rơi của một kỳ học thoải mái. Trong căn phòng ký túc xá vỏn vẹn 9 mét vuông của tôi, không khí cũng không kém phần đặc biệt. Mùi mì tôm tỏa ra từ góc phòng, nơi anh bạn cùng phòng đang bận rộn với công việc kinh doanh nhỏ của mình. "Một mì trứng 2 xúc xích A5xx" (xin lỗi vì tôi không nhớ số phòng của vị khách quen) - tiếng báo hiệu quen thuộc vang lên mỗi khi có đơn đặt hàng, nó như một phần không thể thiếu trong cuộc sống sinh viên của chúng tôi khi đó.

Còn tôi, ngồi trước màn hình laptop, cố gắng tập trung vào những dòng code đang hiện lên. Ly cà phê đen đậm đặc, nguội lạnh từ lâu, vẫn nằm đó như một người bạn đồng hành trong những đêm thức trắng. Đó là thứ đồ uống rẻ tiền, nhưng lại là nguồn năng lượng không thể thiếu của tôi. Mùi cà phê hòa quyện với mùi mì tôm, tạo nên một không gian đậm chất sinh viên - hỗn độn, nhưng đầy nhiệt huyết.

Màn đêm yên tĩnh, chỉ còn tiếng gõ bàn phím lách cách vang lên đều đặn. Ánh sáng từ màn hình laptop chiếu lên khuôn mặt tôi, phản chiếu sự tập trung và đam mê (... hoặc phần nhiều là ngây thơ). Trong khoảnh khắc đó, tôi không hề biết rằng, đêm nay sẽ là bước ngoặt lớn trong cuộc đời mình.

"Chỉ còn một chút nữa thôi," tôi tự nhủ, mắt không rời khỏi màn hình. Những dòng code dường như đang thách thức tôi, nhưng cũng kích thích sự tò mò vốn có của một cậu trai đam mê công nghệ. Lúc đó, tôi chỉ đơn giản nghĩ mình đang làm một thử nghiệm nhỏ, không ngờ rằng nó sẽ dẫn tôi đến một hành trình đầy bất ngờ và ý nghĩa.

Lúc đó, tôi đâu biết rằng chiều hôm đó sẽ thay đổi cả con đường sự nghiệp của mình…

Và rồi, câu chuyện bắt đầu từ đây, từ căn phòng ký túc xá nhỏ bé, nơi gió thu Hà Nội lùa qua khe cửa, mang theo mùi đồ ăn canteen trường hòa cùng mùi khói thuốc của mấy cậu bạn phòng kế- mùi kí túc sinh viên.

Chapter 1: Curiosity Awakens

The Birth of a White Hat

Lúc đó, tôi chỉ là một sinh viên năm hai, đang vật lộn với những bài tập lập trình và hệ thống quản lý học tập Uniap của trường. Có lẽ cũng như bao sinh viên khác, tôi chỉ muốn hoàn thành bài tập và đi ngủ. Nhưng rồi, một câu hỏi cứ lởn vởn trong đầu tôi: "Liệu mình có thể nhìn thấy nhiều hơn những gì hệ thống cho phép không?", khi đó tôi mong đợi rằng vài thông tin ẩn hoặc điểm số, hoặc danh sách lớp gì đó.

Hệ thống của trường, dù được xây dựng để quản lý học tập, lại mang trong mình một sự hấp dẫn kỳ lạ. Nó giống như một ốc đảo mà các sinh viên đã đôi lần hack nó để đặt dấu ấn cho thời sinh viên. Tôi bắt đầu tò mò, và sự tò mò đó không ngừng lớn dần.

Những đêm khuya, khi Sinh, một anh bạn cùng phòng ngồi ngay phía sau tôi đang bận gọi điện tâm sự với người yêu, tôi lại ngồi trước màn hình, thử nghiệm với các công cụ DevTools. Tôi bắt đầu với những thứ đơn giản: kiểm tra các request, xem các tham số được truyền đi như thế nào, và thử thay đổi chúng. Mỗi lần thử, tôi lại học được điều gì đó mới. Vừa là tò mò vừa là thực hành của môn Networking kh đó. Nhưng điều khiến tôi thực sự bị cuốn hút là cách hệ thống xử lý việc chuyển hướng (redirect) sau khi đăng nhập.

Đêm đó, khi đang lần theo các request, tôi phát hiện ra có một đường dẫn tới trang /users , nhưng khi truy cập vào đó, tôi lập tức bị chuyển hướng tới trang thông báo không có quyền. Nhưng ở giữa dòng chảy đó, một Header kỳ lạ trong Response, Header redirect . Nó trông có vẻ đơn giản, nhưng lại mang trong mình một tiềm năng khó lường. Tôi tự hỏi:

Nếu mình bỏ qua Header này mà không nghe theo lời điều hướng của nó, liệu sẽ thế nào nhỉ ?

Đó là khoảnh khắc mà sự tò mò của tôi chuyển thành một mục tiêu cụ thể. Tôi bắt đầu lên kế hoạch để khám phá sâu hơn về cách hệ thống hoạt động. Và rồi, những tách cafe đắng trở thành người bạn đồng hành của tôi trong hành trình này.

Nhưng tôi chưa thể ngờ rằng, sự tò mò đơn thuần ban đầu sẽ dẫn tôi đến một bước ngoặt lớn trong cuộc đời mình. Đó không chỉ là một cuộc phiêu lưu kỹ thuật, mà còn là một bài học về đạo đức và trách nhiệm. Và tất cả bắt đầu từ một đêm thu lạnh, trong căn phòng ký túc xá chật hẹp, với mùi mì tôm và cafe đắng.


Chương 2: Theo Dấu Vết Kỹ Thuật Số

Giải Phẫu Một Lỗ Hổng Bảo Mật

Được biết hệ thống này được tạo nên với ngôn ngữ lập trình PHP, tôi đặt ra suy đoán về cách làm của Develop khi, đoán rằng đoạn code PHP xử lý chuyển hướng có thể trông như thế này:

$redirect_url = $_GET['redirect'];
header("Location: " . $redirect_url);

Vấn đề nằm ở chỗ, đoạn code chỉ như thế này thì đang thiếu hai điều quan trọng:

  1. Không kiểm tra URL chuyển hướng: Bất kỳ URL nào cũng có thể được truyền vào, kể cả những trang không được phép.
  2. Không sử dụng exit() sau khi chuyển hướng: Điều này khiến mã PHP tiếp tục chạy ngay cả khi header chuyển hướng đã được gửi đi.

Vậy liệu giả thuyết này có đúng ?

Chapter 3: Midnight Breakthrough

Crossing the Digital Rubicon

Đêm Dài Với Cà Phê Và Debugging

Những ly cà phê đen liên tục được rót đầy, xếp thành hàng trên bàn học. Tôi bắt đầu phân tích lưu lượng mạng bằng công cụ như Wireshark, theo dõi từng request được gửi đi và nhận về. Thông qua đó, tôi thấy rõ cách hệ thống xử lý chuyển hướng.

Khi tôi cố inject các đoạn javascript vào trình duyệt để cố gắng bỏ qua Header Redirect này thì tôi vẫn bị chuyển hướng tới các thông báo không có quyền truy cập. Nhưng tôi không bỏ cuộc. Tôi nghĩ rằng có sự kiểm tra phía client, chính Browser đã quyết định Redirect theo header đó để đảm bảo bảo mật (giống với Origin header và CORS), tôi quyết tìm cách vượt qua nó.

Điên Cuồng phẫu thuật Trình Duyệt riêng. Chromium

Đột nhiên, một ý tưởng lóe lên trong đầu:

Nếu tôi có thể điều chỉnh trình duyệt để nó không tuân theo header Location thì sao?

Với quyết tâm cao độ và sự điếc không sợ súng. Không biết khó thì không sợ. Tôi tải mã nguồn của Chromium và bắt đầu chỉnh sửa. Mục tiêu của tôi là khiến trình duyệt bỏ qua các header chuyển hướng (Location) trong một số trường hợp cụ thể. Sau nhiều giờ vật lộn, tôi đã thành công.

Code ...

Fix ...

Build ...

Voilà!

Khi thử nghiệm lại, tôi đăng nhập vào tài khoản của mình, cố gắng truy cập vào /users và… hệ thống không chuyển hướng. Thay vào đó, tôi thấy trang admin users hiện lên trước mắt.

Trong khoảnh khắc đó, tôi vừa cảm thấy phấn khích, vừa lo lắng. Tôi đã khám phá ra một lỗ hổng nghiêm trọng, andrenalin lan tràn trong mạch máu tan cùng với Cafein làm tôi lâng lâng.

Đó là khoảnh khắc tôi nhận ra sự khác biệt giữa một hacker "mũ đen" và một hacker "mũ trắng." Một bên là sự phá hoại, một bên là sự bảo vệ. Tôi đứng trước một lựa chọn: sử dụng quyền truy cập này để gây rối, hay để giúp đỡ? Đêm đó, tôi quyết định viết một bài đăng trên bảng tin của hệ thống với vai trò của phó hiệu trưởng, một hành động mang tính "hacktivism" nhưng không gây hại.

Nhưng trong lòng tôi vẫn có một nỗi lo lắng. Liệu có ai biết được điều tôi đã làm không? Và nếu có, hậu quả sẽ như thế nào? Đó là những câu hỏi mà cái đầu 20 tuổi của tôi không thể trả lời ngay lúc đó.

Và rồi, khi đồng hồ điểm 2 giờ sáng, tôi tắt laptop, nhìn ra cửa sổ và hít một hơi thật sâu. Đêm thu Hà Nội vẫn yên tĩnh, nhưng trong lòng tôi lại có một cơn bão.

Và rồi, một tô vì và đi ngủ, không biết rằng ngày mai sẽ mang đến những điều bất ngờ.

Chương 4: Trò Đùa và Hậu Quả


Khi Hacktivism Đối Mặt với Thực Tế

Bài đăng đó không phải là một thông điệp nghiêm túc hay một lời cảnh báo về lỗ hổng bảo mật. Thay vào đó, nó mang đậm tính hài hước và hơi "trẻ con" của một sinh viên năm hai. Đối với tôi lúc đó, đó chỉ là một trò đùa vô hại, một cách để tự thưởng cho bản thân sau nhiều giờ mày mò.

Nhưng thực tế lại không hề đơn giản như vậy.

Sáng hôm sau, khi tôi đang chìm trong giấc ngủ sâu sau một đêm dài, điện thoại của tôi liên tục đổ chuông. Tôi mơ màng nghe thấy tiếng gõ cửa phòng ký túc xá. Mở mắt ra, tôi thấy cả gia đình tôi cũng đã đứng đó. Khuôn mặt họ lộ rõ sự lo lắng và bối rối.

"Con làm gì vậy? Trường gọi điện báo con đã đăng một bài viết kỳ lạ trên hệ thống. Họ muốn gặp con ngay lập tức!" - Mẹ tôi nói, giọng đầy hoang mang.

Tôi lập tức tỉnh ngủ, tim đập thình thịch. Nhìn lại màn hình laptop, tôi thấy hàng loạt cuộc gọi nhỡ từ số lạ. Hóa ra trường đã cố gắng liên lạc với tôi từ sáng sớm, nhưng tôi đã ngủ quên sau đêm dài hack não.

Không khí trong phòng ký túc xá đột nhiên trở nên ngột ngạt.

Trong đầu tôi lúc đó là một mớ hỗn độn. Tôi tự hỏi: "Mình đã làm sai? Đây chỉ là một trò đùa thôi mà!" Nhưng luôn có thể là, trò đùa đó đã vượt quá tầm kiểm soát.

Buổi chiều hôm đó, tôi nhận được thông báo chính thức từ trường: "Hãy đến phòng giám hiệu vào sáng mai." Đêm đó, tôi không thể ngủ được. Tôi ngồi trước màn hình laptop, nhìn lại những dòng code mình đã viết, những bước đi mình đã thực hiện, và tự hỏi: "Liệu mình có cơ hội giải thích không? Hay mọi chuyện đã kết thúc ở đây?".

Trong bóng tối của phòng ký túc xá, tôi chợt nhận ra một bài học quan trọng: Ranh giới giữa một trò đùa và một hành động nghiêm trọng thật mong manh. Và đôi khi, hậu quả của những gì ta làm có thể đến nhanh hơn ta tưởng.

Chương 5: Văn Phòng


Một Chiếc Mũ Trắng

Buổi sáng hôm đó, mùi nắng ấm và mùi một đêm mưa rào - chưa bao giờ tuyệt vời hơn. Nhưng không đủ để làm dịu đi cơn hồi hộp đang dâng lên trong tôi. Tôi bước từng bước chậm rãi qua hành lang dài, tiếng giày lạch cạch trên nền gạch vang lên như nhịp tim đang đập loạn xạ.

Khi bước vào văn phòng, tôi đã chuẩn bị sẵn tinh thần đối mặt với một vị hiệu phó nghiêm khắc, nhưng thay vào đó, tôi gặp một người đàn ông với ánh mắt hiền từ và nụ cười ấm áp. Ông mời tôi ngồi xuống, rót cho tôi một ly trà nóng - loại trà sen thơm ngát. Không khí căng thẳng dần tan biến.

"Em đã làm gì vậy?" - Thầy hỏi với giọng điệu nhẹ nhàng, không chút trách móc. Tôi lấy hết can đảm, kể lại toàn bộ câu chuyện từ đầu đến cuối: từ những đêm thức trắng với cốc cà phê đắng, đến khoảnh khắc phát hiện lỗ hổng, và cả trò đùa ngốc nghếch với tài khoản của thầy. Tôi không giấu diếm bất cứ chi tiết nào, kể cả việc mình đã sửa mã nguồn Chromium để vượt qua kiểm soát.

Thay vì tức giận, thầy gật đầu với vẻ tán thưởng. "Em có biết rằng mình vừa làm được điều mà đội IT của trường chưa từng nghĩ tới không?" - Thầy nói, ánh mắt lấp lánh sự hào hứng.

"Em nên viết lại những điều này thành một bản hướng dẫn chi tiết" - Thầy nói, đẩy về phía tôi một tờ giấy trắng. Tôi cầm bút, bắt đầu ghi chép lại từng gợi ý, như một người thầy viết sách vậy.

Từ một buổi họp kỷ luật, cuộc trò chuyện nhanh chóng chuyển thành một buổi thảo luận kỹ thuật. Tôi cùng thầy và đội IT ngồi lại, phân tích từng dòng code, tìm hiểu cách khắc phục lỗ hổng. Tôi đề xuất danh sách các biện pháp bảo mật, từ việc thêm exit() sau mỗi lệnh header(), đến việc xác thực URL kỹ lưỡng hơn.

Khi bước ra khỏi văn phòng, tôi cảm thấy mình đã trưởng thành hơn rất nhiều. Thay vì bị trừng phạt, tôi nhận được sự công nhận và cơ hội để sửa chữa sai lầm. Vị hiệu phó ấy không chỉ là một người quản lý, mà còn là một người thầy, người đã cho cảm thấy bài học về sự bao dung và trách nhiệm.

Tối hôm đó, khi trở về phòng, tôi ngồi bên cửa sổ, nhìn ra ngoài khuôn viên trường. Mùi mì khói thuốc từ phòng bên cạnh thoang thoảng bay qua, nhưng tâm trí tôi đã không còn bận tâm đến những lo lắng vụn vặt nữa. Tôi biết mình đã tìm được con đường mình muốn đi - không phải là một kẻ phá hoại, mà là một người bảo vệ, một chiếc mũ trắng thực thụ.

Và ly trà sen ấy, mãi mãi là hương vị của sự khởi đầu mới.

Hồi Kết: 8 Năm Sau


Từ Phòng Ký Túc Xá Đến Phòng Họp Hội Đồng

Thời gian trôi qua thật nhanh. Đã 8 năm kể từ cái đêm mùa thu lạnh lẽo ấy. Một chàng sinh viên năm hai sau khi vượt qua cơn bão từ văn phòng hiệu trưởng nhận ra rằng mình đã học được những bài quý giá không chỉ về kỹ thuật mà còn về đạo đức trong thế giới bảo mật. Những lỗ hổng không chỉ là những dòng code lỗi mà còn là những cánh cửa dẫn đến hậu quả khôn lường. Và từ đó, tư duy "security-first" đã trở thành kim chỉ nam trong mọi thiết kế hệ thống của tôi.

Nhìn lại, vụ hack Uniap không chỉ là một kỷ niệm vui hay một thành tích để khoe khoang. Nó là một bước ngoặt, một cột mốc quan trọng định hình tư duy của tôi về security. Khi tôi thiết kế các hệ thống AI ngày nay, tôi luôn đặt câu hỏi:

Liệu có "thằng" sinh viên nào, trong căn phòng ký túc xá, với một tách cà phê và một chiếc laptop, có thể tìm ra lỗ hổng trong hệ thống của mình không?

Và như một câu nói mà tôi rất tâm đắc: "Bảo mật không phải là một sản phẩm, mà là một quá trình không bao giờ kết thúc."

2025 ...

Và bây giờ, khi tôi ngồi trong phòng họp, đối diện với những dự án lớn, tôi vẫn mỉm cười khi nhớ về cái đêm ấy. Mọi hệ thống tôi làm đều mang theo bài học từ chiếc bàn ký túc xá đầy vết cà phê và mùi khói thuốc.

inspiration