Xin chào,
Chào mừng các bạn đến với bài cuối cùng của series Linux Pentest Căn Bản. Trong bài hôm nay, chúng ta sẽ thực hành tấn công, xâm nhập và kiểm soát server Bounty Hacker. Bài hôm nay sẽ khác với các bài trước ở chỗ, nếu như các bài trước, chúng ta đều xâm nhập thông qua hệ thống web của mục tiêu, thì ở bài này, chúng ta sẽ học cách xâm nhập thông qua dictionary attack SSH.
Mục đích của bài nhằm nhắn gửi đến các bạn một điều, khi chơi CTF đừng đi theo lối mòn. Các bạn phải cân nhắc và kiểm tra tất cả dịch vụ mạng mà Nmap tìm được chứ không phải chỉ tập trung vào web mà thôi.
Chúng ta cùng vào bài.
1 – Performing reconnaissance (Thu thập thông tin từ bên ngoài)
1A – Kiểm tra kết nối
Sau khi bấm bút start machine, chúng ta sẽ chờ tầm 2 phút để hệ thống khởi động. Khi quá trình khởi động hoàn tất, IP của mục tiêu sẽ hiện ra cho chúng ta.

Kiểm tra kết nối đến hệ thống.

Ping mục tiêu thành công, chúng ta sẽ bắt đầu quét mục tiêu với Nmap.
1B -Nmap scans
Scan tất cả các TCP ports trong hệ thống:
sudo nmap -vv -Pn -T4 -p- -oN tcp-scan 10.10.88.157
Những kết quả trả về đầu tiên cho ta kết quả như sau:

Từ đó ta có thể tạm dự đoán server Bounty Hacker hiện đang chạy 3 dịch vụ:
- Port 21: FTP
- Port 22: SSH
- Port 80: HTTP
Bạn nào chưa biết những dịch vụ chạy trên các ports phổ biến thì tham khảo bảng bên dưới nhé.

Trong lúc chờ Nmap chạy, chúng ta sẽ kiểm tra các dịch vụ đã tìm được nhé (các bạn tham khảo phần 1C).
Sau khoản tầm 30 phút chúng ta có kết quả Nmap như sau:

Kết quả đúng y như chúng ta đã dự đoán
Scan tất cả các UDP ports trong hệ thống:
sudo nmap -vv -Pn -T4 -sU -oN udp-scan 10.10.88.157

Có vẻ như tất cả các UDP port đều đã bị tường lửa chặn hoặc đóng. Chúng ta sẽ bỏ qua phần này.
Scan services’ version, hệ điều hành của và chạy script tìm lỗi:
sudo nmap -vv -Pn -T4 -p 21,22,80 -sC -sV -O -oN script-scan 10.10.88.157

Dựa vào thông tin trả về, chúng ta có:
- Port 21 chạy FTP vsftpd 3.0.3 và cho phép đăng nhập bằng account anonymous
- Port 22 chạy OpenSSH 7.2p2
- Port 80 chạy Apache httpd 2.4.18
- Server Bounty Hacker chạy hệ điều hành Ubuntu
1C – FTP service
Giao thức FTP (File Transfer Protocol) là một giao thức client-server, được sử dụng nhằm mục đích trao đổi dữ liệu giữa các máy tính với nhau. Chi tiết hơn, FTP server là nơi lưu trữ những file dữ liệu được chia sẻ với các FTP clients. Mỗi FTP client sẽ được cấp một account để đăng nhập vào FTP server. Khi một FTP client muốn đăng nhập vào FTP server để tải file dữ liệu về máy hoặc thêm file mới vào FTP server, họ sẽ sử dụng account được cấp để thực hiện điều đó.
Trên giao diện dòng lệnh, để tải file từ FTP server về máy tính, chúng ta dùng lệnh “get”, và để tải file từ máy tính lên FTP server, chúng ta sẽ dùng lệnh “put”.
Một điểm cần lưu ý nữa là các FTP server thường có 1 account đặc biệt là anonymous:anonymous (cả username và password đều là anonymous).
Account này cho phép một người không phải FTP client được phép truy cập vào nội dung được lưu trữ bên trong FTP server.
Vậy chúng ta sẽ test thử xem server Bounty Hacker có cho phép ta làm điều đó không nhé (Nếu bạn đã chạy scrip Nmap quét lỗi thì bạn sẽ thấy chúng ta có thể truy cập vào FTP server thông qua account anonymous).
Tại sao chúng ta cần truy cập vào FTP server?
Vì FTP có thể chứa những thông tin nhạy cảm liên quan đến hệ thống cho phép chúng ta tấn công sâu hơn. Nó giống như những nội dung được chứa bên trong những hidden directories trên web mà chúng ta đã thực hành ở những bài trước vậy.
Để truy cập vào FTP server, chúng ta sẽ sử dụng câu lệnh sau:
ftp 10.10.88.157
Khi bạn được hỏi Name, bạn gõ anonymous và enter. Bạn sẽ được kết quả như hình bên dưới.

Vậy là chúng ta đã truy cập thành công vào FTP server.
Để liệt kê các file đang lưu bên trong FTP server, chúng ta sẽ sử dụng lệnh “ls”, giống y như trên giao diện dòng lệnh Linux.

Chúng ta thấy có 2 file .txt, chúng ta sẽ download cả 2 về máy của chúng ta bằng lệnh sau:
get locks.txt
get task.txt
Cả 2 files sẽ được lưu tại directory hiện tại trên máy Kali Linux của chúng ta.

Chúng ta sẽ thử tìm xem có các directories ẩn hay file ẩn gì bên trong FTP server không bằng câu lệnh “ls -la”

Chúng ta chỉ thấy có 2 files đã download thôi, ngoài ra không có dữ liệu hay directory mới xuất hiện.
Chúng ta sẽ thử “cd ..” đến directory mẹ của FTP server hiện tại xem có được không nhé.

Kết quả không có gì thay đổi. Chúng ta sẽ thoát FTP server bằng lệnh “exit” và kiểm tra 2 files chúng ta đã download nhé.

Trên hệ thống Kali Linux, chúng ta sẽ dùng lệnh “ls” để kiểm tra directory hiện tại.

Chúng ta thấy 2 file task.txt và locks.txt mà chúng ta đã download đang nằm tại đây.
Chúng ta kiểm tra nội dung từng file bằng câu lệnh “cat”.
cat task.txt

Nội dung của file task.txt cho ta biết được cái tên “lin”, đây có thể là tên của admin hệ thống.
cat locks.txt

Nội dung của file locks.txt giống như một tập hợp của các biến thể cách viết khác nhau của từ Red Dragon, nhưng cũng có thể một trong số này là password dùng để đăng nhập của admin “lin”.
Theo kinh nghiệm chơi CTF của mình, khi các bạn tìm được tên của admin và 1 list có khả năng là password list, thì nhiều khả năng các bạn sẽ phải xâm nhập bằng hình thức dictionary attack.
Dành cho các bạn nào chưa biết, tấn công dictionary attack là một hình thức tấn công “đoán mò” thông tin đăng nhập của người dùng. Bằng một danh tập hợp những username và password được sử dụng nhiều nhất, hackers có thể cho chạy danh sách đó bằng những phần mềm đặc biệt. Những phần mềm này sẽ kết hợp 1 username trong username list với tất cả password trong password list và thử đăng nhập vào hệ thống bằng username và password đã kết hợp. Việc tấn công sẽ dừng lại nếu 1 trong 4 trường hợp sau xảy ra:
- Hacker đã chạy tất cả các kết quả trong cả username list và password list những vẫn không thể tìm ra thông tin đăng nhập của bạn.
- Thời gian tấn công dictionary attack quá lâu do password bạn sử dụng quá phức tạp khiến hacker bỏ cuộc.
- Hacker tìm ra được thông tin đăng nhập của bạn.
- IP của hacker bị block do nhập sai mật khẩu quá nhiều lần.
Quay trở lại với bài viết của chúng ta, để dictionary attack, các bạn cần đầu tiên phải tìm được nơi đăng nhập account để dictionary attack đã. Hiện tại chúng ta có 2 khả năng:
- Tấn công thông qua trình đăng nhập SSH.
- Tấn công thông qua việc phải tìm ra trang đăng nhập account trên website chạy ở port 80 HTTP.
1D – Web service
Chúng ta dùng trình duyệt Firefox truy cập vào website của Bounty Hacker ở địa chỉ 10.10.88.157.

Kiểm tra front-end source code của trang web bằng tổ hợp phím Ctrl + U.

Không tìm thấy thông tin hữu ích nào.
Chúng ta sẽ dùng Gobuster để tìm xem website này có chứa hidden directories gì không nhé. bạn nào chưa có wordlist để chạy thì có thể download lại tại đây.
gobuster dir -u 10.10.88.157 -w common-web-content.txt

Kết quả trả về từ Gobuster cho thấy chúng ta chỉ có thể truy cập vào directory images thôi. Chúng ta sẽ truy cập thử xem thế nào nhé.

Directories images chỉ chứa 1 bức hình, khi click vào bức hình này chúng ta sẽ có được bức hình ở trang chủ.
Do không tìm thấy trang đăng nhập trên web, chúng ta sẽ tấn công dictionary attack trên SSH.
2 – Exploiting vulnerabilities (Tiến hành xâm nhập)
Để tấn công dictionary vào SSH, chúng ta sẽ sử dụng công cụ Hydra, một công cụ dictionary attack vô cùng mạnh mẽ có thể được sử dụng cho cả web và SSH. Hydra có giao diện dòng lệnh và được cài đặt sẵn trên Kali Linux.
Bạn nào muốn tìm hiểu công cụ Hydra thì các bạn dùng lệnh sau nhé:
man hydra
Để tấn công, chúng ta sẽ sử dụng câu lệnh Hydra sau:
sudo hydra -v -l lin -P locks.txt 10.10.88.157 ssh
Trong đó:
- -v: Verbose mode: In ra các cặp username và password vừa được thử
- -l: Username
- -P: Password list

Sau khoản 2 phút chạy thì chúng ta đã tìm ra được mật khẩu của admin “lin”.
Chúng ta sẽ đăng nhập SSH bằng account vừa tìm được nhé.
ssh lin@10.10.88.157

Vậy là chúng ta đã xâm nhập thành công vào server Bounty Hacker.
Dùng lệnh “ls” các bạn sẽ tìm được user flag.

3 – Privileges escalation (Leo thang đặc quyền)
Chúng ta sẽ kiểm tra thử sudo right xem chúng ta được quyền sử dụng những gì nhé.
sudo -l

Chúng ta có thể sử dụng lệnh tar, dựa vào trang sau, chúng ta có cách thức để leo thang đặc quyền với lệnh tar như sau:

Vậy chúng ta thử xem sao nhé:
sudo /bin/tar -cf /dev/null /dev/null --checkpoint=1 --checkpoint-action=exec=/bin/sh

Và chúng ta đã leo thang đặc quyền thành công.
Để lấy root flag, các bạn làm như sau:
cd /root && ls
Sau bài này như đã thông báo, mình sẽ hợp tác với anh Khoa NT triển khai một khóa học online Pentest thông qua Metasploit. Tất cả mọi thứ đã hoàn thành đến 98% rồi, hi vọng sẽ sớm ra mắt đến các bạn.
Các bạn an tâm, cứ đều đặn theo dõi fanpage nhé vì bất cứ lúc nào khi mọi thứ đã sẵn sàng, mình và anh Khoa sẽ thông báo trên fanpage đấy.
Cám ơn các bạn đã theo dõi và cám ơn các bạn đã đồng hành cùng mình suốt thời gian vừa qua,
Vincent Nguyễn