查看: 46|回复: 0

在登录界面获取 shell的方法

[复制链接]

3

主题

3

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2018-2-7 10:04:08 | 显示全部楼层 |阅读模式
Inception
389b91f6997dbba.gif
Inception是由Carsten Maartmann-Moe开发的可以攻击多个DMA硬件的一款工具,Carsten Maartmann Moe可以攻击多个DMA硬件开发。它可以攻击硬件包括火线,迅雷,ExpressCard、PC卡、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程序调用的二进制文件。以下是这些二进制文件的部分列表:
sethc.exe
utilman.exe
osk.exe
magnify.exe

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

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

格式字符串sethc.exe%ld看起来很有趣,在0x100032471处移动到r8,我们在winlogon进程转储中搜索它。

内存转储分析

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

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

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

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

*,730065007400680063002E00650078006500200025006C006400000000000000730065007400680063002E006500780065,0,-,r0,63006D0064002E0065007800650000000000200025006C00640000000000000063006D0064002E00650078006500000000

* 意味着搜索每个内存页面
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 。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

最新精华

更多
logo设计   扁平化设计   交互设计   logo设计软件   美工培训   美工设计   ui设计培训   UI设计培训学校   游戏ui   ui设计教程   图标设计   Logo教程   ui界面设计   AI教程   UI设计师   ui交互设计   ui设计师招聘   淘宝美工设计   logo创意设计   淘宝美工培训   淘宝美工   ui素材   按钮素材   人机界面设计   手机界面设计   游戏ui设计   图标素材   

快速回复 返回顶部 返回列表