关于安全:windows提权小结

当以低权用户进去一个生疏的windows机器后,无论是提权还是后续做什么,第一步必定要尽可能的收集信息。知己知彼,才百战不殆。

惯例信息收集

systeminfo 查问零碎信息
hostname 主机名
net user 查看用户信息
netstat -ano|find “3389” 查看服务pid号
wmic os get caption 查看零碎名
wmic qfe get Description,HotFixID,InstalledOn 查看补丁信息
wmic product get name,version 查看以后安装程序
wmic service list brief 查问本机服务
wmic process list brief 查问本机过程
net share 查看本机共享列表
netsh firewall show config 查看防火墙配置

常见的杀软如下:

360sd.exe 360杀毒
360tray.exe 360实时爱护
ZhuDongFangYu.exe 360主动防御
KSafeTray.exe 金山卫士
SafeDogUpdateCenter.exe 平安狗
McAfee McShield.exe McAfee
egui.exe NOD32
AVP.exe 卡巴斯基
avguard.exe 小红伞
bdagent.exe BitDefender

要收集的信息大抵如下几点:

机器的零碎及其版本
机器的打补丁状况
机器装置的服务
机器的防火墙策略配置
机器的防护软件状况

提权操作

有短缺的信息的状况下,能够有针对性的履行各种提权操作。以下列举局部操作。

内核提权

这是依据零碎的版本信息和补丁信息,利用零碎自身存在的破绽,可参考链接:https://github.com/SecWiki/wi…
要检测破绽能够参考链接:https://github.com/ianxtianxt…
也能够参考链接:https://github.com/brianwrf/W…
msf中也内置了很多exp。

Windows-Expolit-suggester
Windows ClientCopyImage Win32k Exploit
Windows TrackPopupMenu Win32k NULL Pointer Dereference
通过Kitrap0D进行Windows零碎提权
Windows Escalate工作打算程序XML提权
MS16-016mrxdav.sys WebDav本地提权
EPATHOBJ::pprFlattenRec本地提权
MS13-053 : NTUserMessageCall Win32k内核池溢出
MS16-032 Secondary Logon Handle提权
RottenPotato提权

利用过程如下图所示:

at命令利用

在Windows2000、Windows 2003、Windows XP 这三类零碎中,咱们能够应用at命令将权限晋升至system权限。
at 是一个公布定时工作打算的命令行工具,语法比较简单。通过 at 命令公布的定时工作打算, Windows 默认以 SYSTEM 权限运行。定时工作打算能够是批处理、能够是一个二进制文件。能够通过 “/interactive”开启界面交互模式:

在失去一个system的cmd之后,应用 taskmgr 命令调用工作管理器,此时的工作管理器是system权限,而后kill掉explore过程,再应用工作管理器新建explore过程,将会失去一个system的桌面环境

也能够在msf下生成木马文件,at命令执行运行程序,上线后即为system权限。

sc命令利用

实用于windows 7/8、03/08、12/16
SC 是用于与服务管制管理器和服务进行通信的命令行程序。提供的性能相似于“控制面板”中“管理工具”项中的“服务”。
sc Create syscmd binPath= "cmd /K start" type= own type= interact

这个命令的意思是创立一个名叫 syscmd 的新的交互式的 cmd 服务,而后执行以下命令,就失去了一个system权限的cmd环境:

sc start systcmd

Unattended Installs

主动装置容许程序在不须要管理员关注下主动装置。这种解决方案用于在领有较多雇员和工夫紧缺的较大 型组织中部署程序。如果管理员没有进行清理的话,那么会有一个名为Unattend的XML文件残存在零碎上。 这个XML文件蕴含所有在安装程序过程中的配置,包含一些本地用户的配置,以及管理员账户。
全盘搜寻Unattend文件是个好方法,它通常会在以下一个文件夹中:

C:WindowsPanther 
C:WindowsPantherUnattend 
C:WindowsSystem32 
C:WindowsSystem32sysprep

除了Unattend.xml文件外,还要注意零碎中的sysprep.xml和sysprep.inf文件,这些文件中都会蕴含部署操作 零碎时应用的凭据信息,这些信息能够帮忙咱们提权。

C:UsersuserDesktop> dir C:*vnc.ini /s /b /c
#或者在名称中蕴含关键词的我的项目:
C:UsersuserDesktop> dir C: /s /b /c | findstr /sr *password*
 #或者能够在文件内容中搜寻password之类的关键字:
C:UsersuserDesktop>findstr /si password *.txt | *.xml | *.ini
 #能够查问注册表,例如,字符串password:
reg query HKLM /f password /t REG_SZ /s
reg query HKCU /f password /t REG_SZ /s

在这些文件中通常蕴含用户名和明码,明码应用base64编码,并且在最初会附加”Password”,所以真正的密 码须要去掉最初的”Password”。

dll劫持

Windows程序启动的时候须要DLL。如果这些DLL 不存在,则能够通过在应用程序要查找的地位搁置歹意DLL来提权。
通常,Windows应用程序有其预约义好的搜寻DLL的门路,它会依据上面的程序进行搜寻:

1、应用程序加载的目录
2、32位系统目录(C:\Windows\System32)
3、16位系统目录(C:\Windows\System)
4、Windows目录 (C:\Windows)
5、当前工作目录(Current Working Directory,CWD)
6、在PATH环境变量的目录(先零碎后用户)

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesServiceNameParameters能够查问注册表项以查看服务运行的服务DLL,或者能够将二进制文件加载到IDA中并搜寻loadlibrary库调用。另外肯定要查看DLL自身的DLL调用!
一旦找到易受攻击的DLL调用,就必须查看该DLL的文件系统:

C:> dir vulnerable.dll /s

还要留神,不要因为它找不到就认为它不存在。它可能只是在以后用户帐户无奈查看的目录中。
最初,要执行DLL highjack,须要在目录层次结构中的某个地位,原始.dll自身,CWD或PATH中的目录中编写平安测试的dll。
PATH是一个环境变量,它定义命令解释器在收回命令时应查找可执行文件的地位。批改PATH,并将.dll写入PATH中的目录,容许进行DLL劫持,过程在PATH中搜寻.dll文件。
一些已知具备DLL劫持破绽的Windows服务是:

IKE和AuthIP IPsec密钥模块(IKEEXT):wlbsctrl.dll
Windows Media Center接收器服务(ehRecvr):ehETW.dll
Windows Media Center打算程序服务(ehSched):ehETW.dll
自动更新(wuauserv):ifsproxy.dll
远程桌面帮忙会话管理器(RDSessMgr):SalemHook.dll
近程拜访连贯管理器(RasMan):ipbootp.dll
Windows Management Instrumentation(winmgmt):wbemcore.dll
音频服务(STacSV):SFFXComm.dll SFCOM.DLL
英特尔疾速存储技术(IAStorDataMgrSvc):DriverSim.dll
Juniper对立网络服务(JuniperAccessService):dsLogService.dll
Encase Enterprise Agent:SDDisk.dll

有许多工具和框架能够使提权变得更容易:

Metasploit
Sherlock
windows-privesc-check
Windows-Exploit-Suggester
PowerUp, now part of PowerSploit
Nishang

如下,PowerUp检测到了一个潜在的DLL挟持破绽。通常,咱们用PowerUp的Write-HijackDll函数写歹意DLL,并重启该应用程序。当启动该应用程序时,它会加载该歹意DLL并以更高的权限运行咱们的代码。

未应用双引号的服务门路

当系统管理员配置Windows服务时,他们必须指定要执行的命令,或者运行可执行文件的门路,要运行的二进制文件的地位在binPath属性中申明。。
当Windows服务运行时,会产生以下两种状况之一。如果给出了可执行文件,并且援用了残缺门路,则零碎会按字面解释它并执行。然而,如果服务的二进制门路未蕴含在引号中,则操作系统将会执行找到的空格分隔的服务门路的第一个实例。
如果binPath是这样设置的:
C:Program FilesUnquoted Path ServiceCommon Filesservice.exe
Windows会依据以下程序进行查找:

1.  C:Program.exe
2.  C:Program FilesUnquoted.exe
3.  C:Program FilesUnquoted Path.exe
4.  C:Program FilesUnquoted Path ServiceCommon.exe
5.  C:Program FilesUnquoted Path ServiceCommon Filesservice.exe

也就是说如果不加引号,咱们能够结构一个与第一个名称雷同的歹意二进制文件作为文件系统对象,并在其名称中蕴含空格,并且当服务尝试执行其二进制文件时会将它运行。咱们所须要的只是对门路中目录的写权限。

一条命令找到这些谬误配置:

wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:Windows" |findstr /i /v """

利用PowerUp也能够:

同样的如果低权用户有服务指向二进制文件所在文件夹的写权限,则他能够间接将歹意文件上传并重命名以替换失常文件。如果用户能够批改服务配置,则能够间接批改binPath指向歹意的文件。

更多能够参看链接:
https://www.cnblogs.com/-mo-/…
https://bbs.pediy.com/thread-…
https://xz.aliyun.com/t/2519#…

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理