①无引号提权路径
原理:利用服务启动时检索程序,程序末尾有空格且没有引号闭合,会以一定方式检索下面的程序,从而可以利用在检索下面目录中加入恶意程序达到提权目的。——被动等待(反弹shell)
提权步骤:
1、用命令搜索无引号的服务路径: vmic service get name,displayname,pathname,startmode | findstr /i "Auto" | findstr /i /v "C:\Windows\\" | findstr /i /v """ 2、自己分组:whoami /all 3、查看无引号路径权限:icacls 【路径】 4、用工具(msf,cs等等)生成反弹shell程序上传到对应路径下 **注意:如果程序放在此路径下长时间不与SCM(service controller Manager)通信会程序会被终止,所以在拿到权限后应该进行进程迁移 5、进程迁移方法:使用msf;在meterpreter中用ps查看进程号然后migrate PID
防御方法:进入注册表修改窗口。在HKEY_LOCAL_MACHINE >> SYSTEM >> CurrentControlSet >> Services 路径下找到存在漏洞的的服务,修改ImagePath,把路径前后加上引号
②易受到攻击的服务
易受到攻击的服务有两种:一是替换二进制服务文件;二是修改服务属性(用到accesschk.exe工具)
易受到攻击的服务有两种:一是替换二进制服务文件;二是修改服务属性(需要用到accesschk.exe工具)
替换二进制文件原理:
对存放服务二进制文件的目录有修改权,将恶意的二进制程序替换原有的二进制文件。
替换二进制文件方法:
和Trusted Service Paths差不多
修改服务属性原理:
修改BINARY_PATH_NAME属性,通过设置它的值为系统命令,重启服务时系统命令会被执行
修改服务属性条件:
需要以下一种权限才能修改:
SERVICE_ALL_ACCESS SERVICE_CHANGE_CONFIG WRITE_DAC WRITE_OWNER GENERIC_WRITE GENERIC_ALL
工具accesschk.exe:
利用:对Spooler服务有service_all_access权限,我们就可以这样做。通过修改其binPath为恶意指令,然后等待管理员重启服务,我们的恶意指令就会被执行。
输入命令:
sc config spooler binPath= "net user emxiai 12345 /add" #执行恶意命令 net user #查看用户
③AlwaysInstallElevated
如果Windows启用注册表项:
[HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer] “AlwaysInstallElevated”=dword:00000001 [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer] “AlwaysInstallElevated”=dword:00000001
那么所有msi(windows应用安装程序)都会以SYSTEM权限运行。此时如果我们执行一个恶意msi程序,即达到提权目的。 通过reg query来验证这两条注册表项的情况:
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
均为1,我们就可以通过msfvenom生成恶意msi来提权,执行获得一个管理员账户
msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi -o rotten.msi
④信息泄露
Unattend.xml sysprep.xml和sysprep.inf文件GPP.xml 存在着一定信息泄露
文件存放路径 - C:\Windows\Panther\ - C:\Windows\Panther\Unattend\ - C:\Windows\System32\ - C:\Windows\System32\sysprep\
找到 Unattend.xml 文件中的标签,去查询一些特殊标签,就有可能找到用户的加密后的密码
<Password> <Value>UEBzc3dvcmQxMjMhUGFzc3dvcmQ=</Value> //PASSWORD <PlainText>false</PlainText> </Password>
一些查询敏感文件的命令:
C:\Users\user\Desktop> dir C:\ /s /b /c | findstr /sr \*password\* reg query HKLM /f password /t REG_SZ /s reg query HKCU /f password /t REG_SZ /s
⑤基于资源的域约束性委派利用
原理
1.S4U2SELF协议可以在用户没有配置 TrustedToAuthenticationForDelegation 属性(即开启使用任何协议认证的约束性委派)时被调用,但是返回的ST是不可被转发的。 2.基于资源的约束性委派主机 在被另一台主机委派访问时,在S4U2PROXY过程中提交过来的ST如果即使是不可转发的。KDC依旧会返回有效的ST2。 3.每个普通域用户默认可以创建至多十个机器账户( 由MachineAccountQuota属性决定 ),每个机器账户被创建时都会自动注册SPN: RestrictedKrbHost/domain和HOST/domain这两个SPN
攻击流程
假设开启基于资源的约束性委派机器为A 1.首先要有一个对当前计算机有写权限的账户,才能对A设置可以 被 委派访问的服务账户。 2.利用当前账户创建一个机器账户,并配置好机器账户到A的 基于资源的约束性委派 3.因为机器账户是我们创建的,我们知道他的密码账户,可以让它利用S4U2SELF协议获得一个不可转发ST。然后用这个不可转发ST通过S4U2PROXY,在基于资源的约束性委派基础上获得有效的访问A cifs服务的ST2。 4.用ST2访问A的CIFS服务,权限获得。
⑥POTATO家族
热土豆提权(hot potato)
提权步骤流程: - 1、本地NBNS服务欺骗 - 2、WPAD劫持 - 3、HTTP->SMB 的 NTLM relay
本地NBNS服务欺骗
Windows域名解析:本地host文件->dns查询->NBNS或者LLMNR查询;在不是管理员的情况下,我们能事先知道被欺骗主机需要的访问的主机IP,就可以伪造一个NBNS查询服务,让靶机访问,这样就能获取到信息就能达到目地,同时NBNS服务有个特征码,请求包和回应包的内容一致,可以根据发送65535个包进行爆破
WPAD劫持
当NBNS欺骗后就能可以劫持到域名,把自己伪造称WPAD并返回自动义的PAC文件。
RELAY
现在SMB->SMB的relay很少用到,微软禁用同协议的NTLM认证 ,成功率很低。但HTTP->SMB的relay还有。HOT POTATO就是利用它。
我们可以把主机发出的HTTP请求重定向到我们自定义的网页Web_A,而网页Web_A需要NTLM认证,可以进行HTTP->SMB的relay。当HTTP请求来自于高权限的账户时,例如是来自windows 更新服务的请求,命令就会以”NT AUTHORITY\SYSTEM”权限运行。
⑦MySQL下的提权技术
MOF提权
原理:
利用nullevt.mof文件都会在一个特定时间间隔内执行一次,向此文件中添加cmd命令自动执行。
条件:
能够进入数据库进行操作,且MySQL数据库的权限要尽可能的高才有更有利。同时secure-file-priv要为空(MySQL5.6.34以后的版本都为空)。
方法:
伪造的MOF文件:
UDF提权
原理:
UDF (user defined function),即用户自定义函数。自定义函数在Windows下是以DLL文件存在于MYSQL的插件文件夹里面的(linux是以os形式)。我们可以自定义一个恶意dll,里面存放着可以执行系统命令的函数。然后交给mysql以数据库权限执行。
条件:
能操作数据库,且数据库权限必须很高(用这个方法得到的权限就是数据库的权限) 当 MySQL< 5.1 版本时,将 .dll 文件导入到 c:\windows 或者 c:\windows\system32 目录下。 当 MySQL> 5.1 版本时,将 .dll 文件导入到 MySQL Server 5.xx\lib\plugin 目录(lib\plugin目录默认不存在,需自行创建)。
提权步骤:
1.获取dll文件:sqlmap和msf都有。sqlmap下sqlmap/data/udf/mysql/windows/64/lib_mysqludf_sys.dll_ 就是这个dll文件的编码版本。使用sqlmap下的sqlmap/extra/cloak/cloak.py对其进行解码获得dll文件。 2.python ./cloak.py -d -i ./lib_mysqludf_sys.dll_ #获得dll文件 3.把dll文件放入mysql的插件文件夹,命名为udf.dll。插件文件夹可以通过命令:show variables like "%plugin%"; (/lib/plugin文件夹需要自己创建) 4.把dll放入插件文件夹中:select load_file(‘udf.dll’) into dumpfile “plugin的路径”; 5.提权:create funtion sys_eval returns string soname "udf.dll"; select sys_eval('cmd');
启动项提权
原理:通过MySQL的高权限,在windows开机启动项的文件夹下放入恶意的vbs或者bat脚本,等待计算机重启,可以使用一些exp让计算机蓝屏。
启动项的常见路径:
C:\Users\ASUS\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup C:\Documents and Settings\All Users\「开始」菜单\程序\启动 C:\Users\ASUS\AppData\Roaming\Microsoft\Windows\「开始」菜单\程序\启动
⑧命令管道提权
条件:
-
Administrator用户才那个提权(提权到system权限),一般用户不能提权到admin用户,因为一般用户没有命令管道 SeImpersonatePrivilege,复制令牌时候会出席那错误;
提权方式:
-
令牌模仿(token impoersonation)
提权过程:
该方法技术细节为:以管理员权限创建一个命名管道,再通过创建SYSTEM权限服务,让服务连上命名管道,随后我们通过模拟客户端,获得SYSTEM权限的令牌,随后将其复制,再用复制后的令牌创建新进程(如CMD),新进程的权限即SYSTEM权限。
首先是被创建的服务的实现代码,该服务启动后会不断向服务器命名管道建立链接
生成好后,是Service.exe
⑨令牌窃取
system->本机上其他用户(包括域用户)(只要本机有system权限,域管在本机上创建进程就直接能拿到域管权限)或者admin获取debug权限后去获取system权限(注意:只有owner为administrator的system进程才能被利用,比如lsass,dllhost) 技术细节:通过寻找高权限开启的进程,再复制其令牌用以创建新进程,即可达到提权目的
⑩常见Windows的提权CVE
https://github.com/SecWiki/windows-kernel-exploits
eg:
*CVE-2016-3225(MS16-075)*提权 Windows SMB 服务器特权提升漏洞(CVE漏洞编号:CVE-2016-3225)当攻击者转发适用于在同一计算机上运行的其他服务的身份验证请求时,Microsoft 服务器消息块 (SMB) 中存在特权提升漏洞,成功利用此漏洞的攻击者可以使用提升的特权执行任意代码。
CVE-2014-4113 (MS14-058)提权 Microsoft Windows下的 win32k.sys是Windows子系统的内核部分,是一个内核模式设备驱动程序,它包含有窗口管理器、后者控制窗口显示和管理屏幕输出等。 如果Windows内核模式驱动程序不正确地处 理内存中的对象,则存在一个特权提升漏洞。 成功利用此漏洞的攻击者可以运行内核模式中的任意代码。 攻击者随后可安装程序;查看、更改或删除数据;或者创建拥有完全管理权限的新帐户。