我的一位同事最近遇到了这样一种情况:他可以物理访问使用802.1X连接到有线网络的Windows计算机,同时保存了用于身份验证的用户凭据,随后他想提取这些凭据,您可能认为这没什么特别的,但是事情却有点崎岖波折……
如何开始
对于这篇博文我将假设读者已经熟悉基本的Windows凭据提取技术和802.1X网络身份验证概念,因为我想就一次简短地写一下。如果您搜索如何在Windows上提取受保护的可扩展身份验证协议(PEAP)凭据,您将找到大量有关无线网络的结果,但没有任何有关有线网络的结果。因为当谈到有线网络上的网络访问控制(NAC)时,常见的实现依赖于基于证书的身份验证(例如:EAP-TLS)或第三方软件和设备。
我们可以了解到有关无线网络PEAP的一件事是其凭证使用数据保护API(DPAPI)加密保存,这是一条非常基本的信息,但至少我们知道会发生什么,那么我们如何在有线接口上设置802.1X PEAP身份验证呢?这很简单,我们打开"Windows设置"应用程序,单击"网络和 Internet",转到"Internet"部分,单击链接"更改适配器选项",然后我们就会看到旧版控制面板的"网络连接"视图
从那里我们可以选择一个以太网接口,右键单击它以打开上下文菜单,单击"属性"并转到"身份验证"选项卡...
有时候我们可能会发现没有"身份验证"选项卡,这种情况下我们就需要启动"有线自动配置"服务,也就是dot3svc,完成后"身份验证"选项卡在属性中可见
最后我们可以点击"高级设置",勾选"指定身份验证模式",在下拉列表中选择"用户身份验证",点击"保存凭据"后输入我们的凭据
为了这篇博文的目的,这里我们选择了容易识别的值:ThisIsMyUsername和ThisIsMyPassword,设置现已准备就绪,现在我们可以开始尝试提取凭据了
凭据存储
假设凭证存储在文件系统或注册表的某个位置,那么我们的想法就是使用Process Monitor来查找诸如CreateFile、WriteFile或之类的操作RegSetValue
可以看到在几秒钟之内就捕获了数千个事件,耐心地浏览这些事件时我注意到一个非常有趣的事件链,lsass.exe进程打开了帐户Preferred的文件LocalSystem,这暗示使用了DPAPI,然后是RegSetValue另一个服务(svchost.exe进程)的操作