安全杂谈-Windows下的几种提权方式的粗略汇总

本文转载在 订阅号 “安全初心”,欢迎关注。

作者:hl0rey         编辑:暮城之光

首先感恩父亲节,愿所有天下的父亲健康快乐。也感谢某兄弟的多番提点,打开了自己的一些心智,思维终究会在理想与现实中趋于平衡,不成佛不成魔。突然也在想一个问题,安全可以被证明吗?不安全可以被证明吗?留给大家思考。 

目录

利用漏洞

DLL相关

本地存储的密码

配置不当的服务

令牌操作

高权限安装(AlwaysInstallElevated)

凭据爆破

随着系统管理员的安全意识的普遍提高,提权越来越成为广大渗透测试者所面临共同问题。本人水平有限,粗浅地总结了下几种提权方式,以及一些个人看法,并配合相应的演示。可能对实战没什么太直接的帮助,算是帮大家温习下基础吧。实验环境是kali和win2008,有时候用win10,毕竟个人用户还是win10多啊。

一.利用漏洞

1.1.利用漏洞提权,简单快捷,瞬间从0到1,美滋滋。

windows系统被爆出了很多提权漏洞,通常来说及时打补丁就能防止黑客在本地利用漏洞提权。换言之就是没打补丁就能提权,另外windows平台上许多软件也被爆出提权漏洞,所以说枚举目标机上打了哪些补丁、操作系统的版本以及安装了哪些软件对于利用漏洞提权来说十分重要。

1.2.测试方法

用wmic来收集信息,wmic和powershell可是渗透利器。命令中的对象和属性名都不区分大小写。

1.2.1.获取当前系统名称

wmic os get caption

1.2.2.枚举补丁

wmic qfe get Description,HotFixID,InstalledOn

可以用cmd命令稍微筛选下(此处命令为查看是否打了ms17010和ms08067的补丁)

wmic qfe get Description,HotFixID,InstalledOn | findstr /C:"KB" /C:"KB"

powershellhttps://github.com/rasta-mouse/Sherlockmsf模块得先获得一个meterpreter shell

use post/windows/gather/enum_patches

msf这个模块其实也是用wmic去枚举的补丁,然后做的筛选。其实可以与时俱进的优化一下。可以看出是用wmic去枚举的补丁。

这个模块可以指定要检测的补丁号如果不指定的话,会有默认的几个补丁会检测,存在下面这个数组。可以通过在这数组里加自己自定义的补丁号和提示信息。

检测逻辑

1.2.3.枚举当前安装的软件

wmic product get name,version

1.3.举例

1.3.1.系统漏洞

最新的漏洞(CVE-2018-8120)

https://github.com/alpha1ab/CVE-2018-8120

这个补丁肯定没打,其实不用枚举。用exp的时候注意下位数,一下就成功了,预感又要有一大批服务器要遭殃了

炒一个之前提到的冷饭(smb跨协议凭据反射)欺骗system来认证,从而泄露凭证,这属于"社工"windows系统。漏洞编号MS16-075,补丁编号KB 。在不打补丁,并且不启用smb签名的情况下可以用(待考证)。烫手山芋

https://github.com/Kevin-Robertson/Tater

WPAD(Web Proxy Auto-Discovery protocol )是为了让浏览器自动发现代理服务器,使代理对于用户来说是透明的,也就是说让用户不用自己配置代理,感受不到代理存在。

https://www.ibm.com/developerworks/cn/linux/1309_quwei_wpad/

ie浏览器默认会去尝试自动获取配置,有的windwos服务也会去自动获取,比如windows更新服务。 Windows Defender updates服务是个高权限的服务,我们可以通过nbns欺骗让system通过http在假的 WPAD进行ntlm认证,我们再把凭据反射回smb协议,从而取得高权限。烂土豆

https://github.com/breenmachine/RottenPotatoNG

GitHub上编译好版本只能弹个cmd.exe,需要自行修改main方法,让他可以执行自定义的命令。稍作修改即可。

烂土豆比烫手山芋更可靠,因为不用等待Windows Defender updates服务来上钩。所以说能用ms16-075,那就用烂土豆吧。win10系统记得先过uac,再提权。

1.3.2.第三方组件漏洞

win10pcap提权

http://www.freebuf.com/news/82310.html

二.DLL相关提权

2.1.DLL注入

这种方法提权,只能是在有漏洞的情况下吧

2.2.DLL劫持

powersploit下的powerup.ps1中的两个方法Find-ProcessDLLHijack、Find-PathDLLHijack。(路径太长显示不全。。。)

三.本地存储的密码

这个项目挺有趣的

https://github.com/AlessandroZ/LaZagne

这个远控,把上面那个项目作为一个模块加了进去

https://github.com/n1nj4sec/pupy/

powersploit里的powerup.ps1其中包括几种搜集本地密码的方法,就像之前一样,把脚本导入进去,直接调用方法就好。

Get-UnattendedInstallFile

Get-Webconfig

Get-ApplicationHost

Get-SiteListPassword

Get-CachedGPPPassword

Get-RegistryAutoLogon

3.1.自动应答文件

需要自动化部署一些服务的时候,能用到这个 msf模块

 post/windows/gather/enum_unattend

3.2.其他程序的配置文件

发现包含敏感关键词的文件在当前目录以及其子目录中,不区分大小写的查找:

findstr /si password *.txt

findstr /si password *.xml

findstr /si password *.ini

递归的搜索目录并且只显示文件名

C:\> dir /b /s unattend.xml

C:\> dir /b /s web.config

C:\> dir /b /s sysprep.inf

C:\> dir /b /s sysprep.xml

C:\> dir /b /s *pass*

C:\> dir /b /s vnc.ini

3.3.GPP

windows下这些场景需要存储和使用用户凭证

映射驱动(Drives.xml)

创建本地用户

数据源(DataSources.xml)

打印机配置(Printers.xml)

创建/更新服务(Services.xml)

计划任务(ScheduledTasks.xml)

更改本地Administrator密码

所有域的组策略存储在

\\<DOMAIN>\SYSVOL\<DOMAIN>\Policies\

也就是这几个路径

Services\Services.xml

ScheduledTasks\ScheduledTasks.xml

Printers\Printers.xml

Drives\Drives.xml

DataSources\DataSources.xml

powerspoit中的powerup.ps1的Get-CachedGPPPassword方法,也就是把这几个路径检测检测,还能自动解密。

四.配置不当的服务

获取服务的信息(获取本地以system权限启动的服务)

wmic service get name,pathname,startname | findstr /C:"LocalSystem"

4.1.服务相关注册表可被修改

windows下每当一个服务被创建的时候就会这个键下对应的创建一组键值,一般这组键值只有管理员才能访问,但是如果权限配置不当还是有可能提权的。

 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services

其中的ImagePath的值指向的是服务的启动程序所在的位置,如果这个地方可以修改的话,也就能劫持这个服务了。

4.2.可执行文件可被修改

直接替换服务的可执行文件,劫持服务提权。用accesschk来检测一下,可以修改的服务。

https://technet.microsoft.com/en-us/sysinternals/accesschk.aspx

accesschk.exe -uwcqv "你知道权限的用户" * -accepteula

也可用msf模块

exploit/windows/local/service_permissions

powersploit中的powerup.ps1获取可以修改的服务

Get-ModifiableService

4.3.可执行文件路径未被引号包裹

如果服务的可执行文件路径未被引号包裹,那么在遇到空格的时候,会导致截断,例如C:\Program Files\ 1.exe,如果未被引号包裹,在服务启动过程中会尝试加载C:\Program.exe。所以查找到有缺陷的服务,在可写的路径下插入后门,重启服务即可提权。msf模块

exploit/windows/local/trusted_service_path

powerup.ps1

Get-ServiceUnquoted

五.令牌操作

通过office漏洞拿到win10的shell,先过uac,然后直接就可以导入system的令牌,瞬间获得system权限。

不想用msf的话,可以参考这个链接

六.高权限安装

windows中有一项组策略配置(一个系统配置,一个用户配置两个配置都启用才行,并且相关的组策略对象都启用才行)可以让用户在运行.msi文件进行安装程序时,始终以system权限运行,而不是以当前用户的权限。我感觉这个只有撞了大运才会碰上吧23333,但是在渗透测试中还是要尝试一下的。涉及的注册表键值及查询方法是(只要值为1,则是启用状态)

reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer

reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer

msf模块

exploit/windows/local/always_install_elevated

powersploit下的powerup.ps1脚本里有个Get-RegistryAlwaysInstallElevated可以检测是否存在高权限安装。

六.凭据爆破

爆破下高权限账户或者服务的口令。

更多精彩内容,欢迎关注“玄魂工作室”。