[Talk] Tôi đã 'hách' trang web đầu tiên trong đời mình như thế nào?


Những lỗ hổng được nhắc đến dưới đây đều đã được vá, hoặc nói thẳng ra là họ đã xây dựng lại toàn bộ hết rồi, từ máy chủ, cho đến trang web, công nghệ, etc… cho nên là bài viết này đọc chơi chơi thôi, không làm theo được nữa đâu, hehe.

Đó là vào một ngày giữa năm 2019, nắng vỡ mặt. Cái Hoàn, bạn tôi, một sinh viên mẫu mực của đại học Hà Nội, câu chuyện bắt đầu từ mẹt bún đậu và một lời thách thức “đố mày làm gì được cái trang web trường tao đấy” kèm theo đó là voucher 1 năm ăn bún đậu miễn phí, nghe qua cơ cấu giải thưởng là đủ biết nó ghét trường nó đến thế nào. Sao lại có thể ghét được ngôi trường toàn con gái như thế cơ chứ?
Ok, thế là tôi nhận kèo láo, vì bản thân chưa bao giờ làm điều tương tự, nó thách thức tôi, còn tôi thì thách thức chính tôi =))
Cho đến bây giờ nhìn lại, tôi thấy vụ này dễ vl!

Begin with Nmap, so simple…

Sử dụng mỗi flag “-A” là đủ hiểu tôi ngu ngơ đến thế nào, nhưng không sao, dù gì cũng đã thấy cái cần thấy. “Joomla”.

Hmm… Thế Joomla là cái quái gì?

Joomla! là một hệ quản trị nội dung nguồn mở, được cung cấp miễn phí theo giấy phép GNU. Joomla được phát triển từ Mambo, được viết bằng ngôn ngữ PHP và kết nối tới cơ sở dữ liệu MySQL, cho phép người sử dụng có thể dễ dàng xuất bản các nội dung của họ lên Internet hoặc Intranet.

Theo Wikipedia thì dài dòng là vậy, còn với tôi, tôi đếch biết, đại khái thì là một CMS viết bằng PHP.
Sau đó tôi chạy Nikto và tìm thêm được đường dẫn tới phpMyAdmin (trang quản trị cơ sở dữ liệu MySQL), và một vài đường dẫn mặc định của Joomla. (Trời ạ, khi đó tôi chưa hề biết đến sự tồn tại của Dirsearch hay Gobuster…)

Sau một hồi Google, cũng chả lâu, tôi biết được thêm công cụ scan chuyên dùng cho Joomla, hê hê, Joomscan.
Scan xong tòi ra lỗi Local File Disclosure, lỗi này cho phép tôi có thể lấy nội dung của bất kỳ file nào mà tôi được phép. Joomscan đã trích xuất ra thông tin đăng nhập vào MySQL từ file configuration.php, cơ mà khi đó tôi chả biết gì =)) Đơn giản là thấy thông tin đăng nhập vào cơ sở dữ liệu, má ơi…

Vậy là tôi đem thông tin đăng nhập kia login vào trang phpMyAdmin, Boom! Giờ tôi có toàn quyền kiểm soát cái CSDL này luôn rồi.

Ok, đấy là lỗi thứ nhất, tiếp :v

Files Manager not authen require, meh~

Quay lại với lỗi LFD, với URL như này:
http://hanu.vn/ad#####ex.php?action=download&dir=&item=configuration.php&order=name&srt=yes
Yeb, đương dẫn trên cho phép tôi tải về được file configuration.php, thế giờ tôi muốn chỉnh sửa, để chèn thêm một đoạn mã độc vào thì sao? Tôi bắt đầu nhìn vào param action=download, thử xoá giá trị “download” đi xem sao? Okay…BOOM!


Ờ hờ, giờ thì tôi hoàn toàn có thể thêm/sửa/xoá tất tần tật đống mã nguồn của trang hanu.vn, haha, điều này là siêu tệ khi ông chú Quản trị viên không hề cấu hình xác thực cho trang này, khó mà hiểu được lí do tại sao.
Quay lại một chút, thế tại sao tôi biết mà xoá cái từ “download” trên cái URL kia? Dễ thôi, khi đó tôi đã nhìn thấy một URL khác có param action=view, như vậy param này trỏ về hành động muốn thao tác lên file, view, download, edit, save, bla bla…. Còn việc tại sao khi xoá đi nó lại nhảy về trang Files Manager, đó có thể là do Joomla đang không hiểu hành động lên file đó là gì, cho nên nó đã list toàn bộ file và folder ở thư mục root của website (dir=) và không quan tâm giá trị của các param còn lại nữa.
Giờ thì dễ rồi, up shell lên thực thi lệnh bét nhè thôi =))


Chả nhớ nữa, nhưng vụ này ngốn của tôi 2 tuần, giống như bắt đầu tìm tòi từ con số 0 vậy, nghĩ lại mới thấy mình đã học được rất nhiều điều kể từ sau đó, mọi việc chưa bao giờ dễ dàng hơn, mà là do bản thân đã biết hơn. Viết cho bên quản trị một chiếc mail để báo lỗi và hy vọng họ không coi mình là thằng phá hoại…


Chốt lại, ở thời điểm hiện tại HANU đã nâng cấp hệ thống ngon lành rồi, máy chủ Windows thay cho Linux, web cũng sử dụng ASP .NET chứ không còn là PHP, nói chung xịn hơn hẳn, không còn dính mấy lỗi vớ vẩn kia nữa. Chắc là họ đã có kế hoạch từ lâu, chỉ là tôi đã khiến cho deadline release bị rút ngắn hơn thôi =)) rõ khổ đội Dev.