如何在登录界面获取 shell?

信息安全公益宣传,信息安全知识启蒙。

教程列表见微信公众号底部菜单

Inception

Inception是由Carsten Maartmann-Moe开发的可以攻击多个DMA硬件的一款工具,可以攻击包括Firewire、Thunderbolt、ExpressCard、PC-Card和PCI /PCI- e接口等硬件。

该工具可以通过内存补丁来解锁并在各个Windows、Linux、Mac OS X平台上实现提权。不过,解锁命令取决于目标系统的版本,并且不同系统签名也会有所不同。

PCILeech

Ulf Frisk开发的PCILeech工具能够通过注入内核模块实现内存转储,它使用PCI-Express总线,可达到超过 150 MB / s的速度,并且可以对超过32位地址范围的部分进行转储。一旦成功注入内核模块,我们可以访问到系统shell、挂载远程文件系统。

PCILeech具有“签名”文件,可以通过修补DLL文件来解锁特定版本的Windows,Windows Vista / 8上修改msv1_0.dll 文件,在win10上修改NtlmShared.dll文件。类似于Inception,内核模块和签名依赖于具体Windows版本,并且缺少32位 Windows 7版本的签名。

由于前面2个工具依赖于特定版本操作系统相关的签名,我们一直在寻找一种可以在所有Windows版本上工作的通用签名。

测试环境

软件:

可在Linux上运行的PCILeech

Radare2

硬件 :

USB3380

FPGA + USB模块

测试目标:

Windows 10(成功)

Windows Server 2016(成功)

Windows 7(成功)

Windows Server 2008 R2(成功)

攻击winlogon.exe

在Windows登录界面活动SYSTEM权限 shell 的简单方法是替换winlogon.exe程序调用的二进制文件。以下是这些二进制文件的部分列表:

于是我们对winlogon.exe二进制文件进行了快速的静态分析,想要发现这些程序是如何启动的。我们查找了对Windows API函数CreateProcess的引用:

然后对sub.KERNEL32.dll_CreateProcessW_308函数进行了反汇编,找到了对sethc.exe二进制文件的调用方法,这个“粘滞键”小程序可以通过按5次SHIFT键调用:

内存转储分析

在分析运行中的winlogon进程的核心转储时,我们搜索了这个格式字符串。在分析Windows Server 2016时,我们在进程转储的第一个128MB范围内中找到了这个字符串:

创建PCILeech签名文件

创建PCILeech签名是相当简单的任务,文档可以在PCILeech项目的signature_info.txt文件中找到。

修补程序签名的目的是找到sethc.exe%ld unicode字符串,并将其替换为Windows命令shell cmd.exe。这个技巧类似于通过cmd.exe替换sethc.exe可执行文件的提权方法。

但是,这种方法会改变系统的完整性,不适用于加密环境。因此,我们的补丁签名看起来像这样:

* 意味着搜索每个内存页面

730065007400680063[SNIP]002E006500780065是跟在sethc.exe后面的sethc.exe%ld待搜索unicode字符串

“0和-”意味着我们不必去寻找另一个块代码

r0 是补丁应用的相对偏移量

3006D0064002E00650[SNIP]0078006500000000是通过cmd.exe替换sethc.exe的补丁程序

内存修改

使用签名文件,我们只需要运行pcileech的patch子命令:

但是,使用我们的硬件(USB3380开发板),只能访问有限的内存(大约3500 MB)。换句话说,只有当搜索到的字符串位于这个存储区并且具有读/写权限时,该补丁才能工作。

如果没有以上条件,我们还可以:

将目标上的物理内存量减少到4G甚至2GB:不是在任何情况下可行,但可以增加可靠性;

重启系统之后再次尝试,期望进程能够映射到预期的内存区域(这不是一个理想的解决方案,但是在我们的实验中可以成功)。

购买更好的硬件:Ulf Frisk建议使用Xilinx SP605 FPGA开发板,使用FTDI FT601 USB3 UMFT601X-B附加板,该附加板允许执行完全内存转储(没有任何限制)。

补丁成功,我们通过从登录屏幕点击五次SHIFT键就可以获得一个SYSTEM shell 。

PoC视频

来源:行长叠报

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171229B0ADT800?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券