更新时间:2024年06月04日22:31:35
vulntarget
靶场系列仅供安全专业人员练习渗透测试技术,此靶场所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用靶场中的技术资料对任何计算机系统进行入侵操作。利用此靶场所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。
vulntarget
靶场系列拥有对此靶场系列的的修改、删除和解释权限,未经授权,不得用于其他!!!
靶场地址:https://github.com/crow821/vulntarget
1. 靶场描述
在面对勒索病毒这样的网络威胁时,我们需要了解攻击的原理和过程,熟练掌握应急响应和取证分析的技术,以便在面对真实的威胁时能够迅速有效地应对。
vulntarget-n
是一个模拟全球化勒索病毒高发环境下的应急响应和取证分析案例,其模拟了一个正常运行的业务服务被勒索病毒攻击的情景:
- 客户在阿里云部署的业务环境
- 今天突然发现首页变成了一个勒索的界面,要求用户支付赎金以解密数据
- 客户发现其中部分重要文件被加密为
.vulntarget
结尾
随即客户要你进行应急响应并取证分析,因为是阿里云的ECS
,客户将阿里云ECS
实例镜像导出到本地,要求你在明天分析出结果。
具体要求如下:
- 分析攻击事件是如何发生的,请给出攻击画像
- 解密勒索
- 恢复原来的
index.jsp
页面,恢复正常的web
服务 - 找到隐藏在其中的
3
个flag
已知服务器系统为Ubuntu20.04
,账号密码:
账号:root
密码:Vulntarget@123
ps:在本次攻击中少了一次反弹shell
的操作,主要是防止ip
出现泄露,在攻击路径中可以不对此进行说明
2. 环境配置
2.1 阿里云ECS购买
在阿里云上选择:云服务器ECS
选择立即购买,配置ip
和相关信息之后,服务器配置完成,密码:Vulntarget@666
2.2 tomcat环境配置
安装java
环境,在这里安装java1.8
:
apt update && apt install openjdk-8-jdk && apt install unzip -y
当然也要顺带安装unzip
,方便解压tomcat
的环境包:
- 打开环境变量文件:
vim /etc/profile
- 在文件末尾添加以下行:
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
- 保存并关闭文件,然后使更改生效:
source /etc/profile
2.3 安装Tomcat 7
现在Java
环境已经配置好了,接下来我们安装Tomcat
。
下载Tomcat 7
:
wget https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.79/bin/apache-tomcat-7.0.79.zip
- 解压Tomcat压缩包:
unzip apache-tomcat-7.0.79.zip
- 移动Tomcat到一个合适的目录(例如:/opt/tomcat):
mv apache-tomcat-7.0.79 /opt/tomcat
- 为Tomcat脚本赋予执行权限:
chmod +x /opt/tomcat/bin/*.sh
2.4 设置Tomcat靶标环境
- 启动Tomcat:
/opt/tomcat/bin/startup.sh
- 验证Tomcat是否启动成功: 打开浏览器,访问以下地址:
http://8.*.*.136:8080/
如果看到Tomcat
的欢迎页面,说明Tomcat
安装和配置成功:
2.5 修改8080端口到80
cp /opt/tomcat/conf/server.xml /opt/tomcat/conf/server.xml.bak
vim /opt/tomcat/conf/server.xml
修改之后,需要重启服务,先把原来的服务关掉,然后再重启:
2.6 修改配置文件创造漏洞条件
此时需要修改web.xml
文件:
cp web.xml web.xml.bak
vim web.xml
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>
然后重启服务之后,漏洞搭建成功:
2.7 修改首页&&删除ico文件
修改后台页面为vulntarget
后台登录界面:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>vulntarget后台管理系统</title>
<style>
@keyframes gradient {
0% {
background-position: 0% 50%;
}
50% {
background-position: 100% 50%;
}
100% {
background-position: 0% 50%;
}
}
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
background: linear-gradient(-45deg, #EE7752, #E73C7E, #23A6D5, #23D5AB);
background-size: 400% 400%;
animation: gradient 15s ease infinite;
}
.login-container {
max-width: 300px;
margin: 0 auto;
padding-top: 100px;
box-sizing: border-box;
}
.login-container h1 {
text-align: center;
padding: 15px 0;
}
.login-container form {
background-color: #fff;
padding: 20px;
border-radius: 5px;
box-sizing: border-box;
}
.login-container form input {
width: 100%;
padding: 10px;
margin-bottom: 10px;
border-radius: 5px;
border: 1px solid #ccc;
box-sizing: border-box;
}
.login-container form input[type="submit"] {
background-color: #4CAF50;
color: white;
cursor: pointer;
}
.login-container form input[type="submit"]:hover {
background-color: #45a049;
}
</style>
</head>
<body>
<div class="login-container">
<h1>登录</h1>
<form action="https://github.com/crow821/vulntarget" method="post">
<input type="text" name="username" placeholder="用户名" required="required" />
<input type="password" name="password" placeholder="密码" required="required" />
<input type="submit" value="登录" />
</form>
</div>
</body>
</html>
当输入账号密码之后,跳转到vulntarget
:
2.8 设置tomcat随服务器重启启动
在crontab
里面设置:
先安装cron
:
apt-get install cron
@reboot /opt/tomcat/bin/startup.sh
重启服务器看下服务能否正常起来:
服务正常启动。
2.9 攻击
现在的日志并不多,直接放一个大马吧:
直接连接:
http://8...6/404.jsp?pwd=vulntarget&i=whoami
在这里已经可以执行命令了,在这里就不进行反弹了,会暴露ip
,直接在原机器上进行操作。
3. 放置flag
3.1 flag1-history
在history
里面放一个:
flag{vulntarget_very_G00d}
3.2 flag2-勒索
在这里对tomcat
下的index.jsp
,jsp
后缀的文件都勒索掉:
路径:/opt/tomcat/webapps/ROOT
先生成公私钥,直接在tmp
目录下做。
3.2.1 生成公私钥
在这里注意,命令都不能少,考察历史命令分析的能力:
import rsa
pub, priv = rsa.newkeys(1024)
pub = pub.save_pkcs1()
with open(f"./keys/pubkey.pem", mode="wb") as file:
file.write(pub)
priv = priv.save_pkcs1()
with open(f"./keys/privkey.pem", mode="wb") as file:
file.write(priv)
在这里使用rsa
生成1024
位的公私钥:
3.2.2 加密demo版
把公钥复制过去:
cp keys/pubkey.pem /opt/tomcat/webapps/ROOT
生成一个flag.jsp
文件,然后准备加密:
编辑加密:vim encrypt_vulntarget.py
(暂不提供)
在这里实现的是对当前目录下的文件进行加密操作:
此时文件加密完成,删除公钥和加密代码:
此时的界面就没了:
3.3 flag3:日志文件
找到tomcat
的日志文件,然后放一个flag
,在这里需要把文件编辑下,把我的本地ip
修改掉,然后再放flag
:
flag{Welcome_t0_join_Us}
通过命令:
:%s/\(\d\+\.\d\+\.\d\+\.\d\+\)/123.123.123.123/g
将里面的所有ip
进行替换:
再添加一个flag
:
flag{Welcome_t0_join_Us}
此时结束。
3.4 修改index.jsp文件
在这里生成一个狠话版的index.jsp
:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Your Files Have Been Encrypted!</title>
<style>
body {
background-color: black;
color: red;
font-family: Arial, sans-serif;
text-align: center;
}
h1 {
margin-top: 20%;
}
</style>
</head>
<body>
<h1>Your files have been encrypted!</h1>
<p>To decrypt your files, please send 1 vulntarget coin to the following address:</p>
<p><a href="https://github.com/crow821/vulntarget" style="color: red;">https://github.com/crow821/vulntarget</a></p>
<p>Once the payment is confirmed, your files will be decrypted.</p>
<p>Remember, don't try to fool us. If you do, you will lose your files forever.</p>
</body>
</html>
4. 云端镜像取证前准备工作
4.1 创建自定义镜像
在这里点击更多,搜索创建自定义镜像:
点击确认之后,在镜像栏等待创建成功:
过一段时间之后,刷新一下界面,如果显示可用,即代表创建成功:
4.2 镜像导出
在选择导出镜像的时候,会使用oss
,oss
是一项收费的服务(创建自定义镜像也是收费的):
如果没有oss
,需要新增:
此时看到暂时未授权ECS
对OSS
资源的访问权限,直接根据这个提示来打开以下链接:
点击同意授权即可:
授权之后,可以看到概览:
此时回到刚刚的导出镜像页面,继续下一步:
此时导出的时候,会让你选择OSS Bucket
,这一些列操作结束之后(此处省略,东西太多),回到对象存储的界面,找到你的Bucket
列表,然后找到碎片管理,再点击统计:
等待一会,这个40G
的镜像,压缩完之后,大概是4G
左右,所以多等会。此时显示没有碎片的时候,就已经完成了:
从这里可以看到当前显示的文件名和大小:
此时点击一下详情,修改下读写权限:
此时直接使用URL进行下载,在这里可以直接复制链接在浏览器里面下载,也可以使用迅雷下载,看了很多文章,都推荐使用迅雷下载(断点续传):
https://vulntarget.oss-cn-hongkong.aliyuncs.com/vuln_m-j_system.raw.tar.gz
5. 本地环境打开镜像
将镜像导出到本地之后,需要对镜像转换,将raw
的格式转换为wmdk
的文件,使用VMware
打开。
5.1 qemu格式转换
这个步骤你可以在mac
上的vm
虚拟机里面用Windows
的机器来操作,也可以选择使用实体Windows
系统的机器来操作,效果是一样的。
下载下来的文件是压缩过的,在这里将其解压:
文件解压之后,有40
多个G
,目前是raw
格式,需要将其转化为vmdk
的格式,使用VMware
打开,在这里下载qemu-img
软件:
下载地址:https://qemu.weilnetz.de/
在这里看到只有win
版本的,所以在这直接选择64
位的下载下来:
直接双击安装:
安装完成之后,需要配置相应的环境变量,如果不配置其实也可以:
新建cmd
打开,看下qemu-img
命令是否生效:
此时在解压之后的那个文件夹中使用该命令将raw
格式转换为vmdk
:
qemu-img convert -f raw raw文件名 -O vmdk 保存的vmdk文件名
qemu-img convert -f raw vulntarget.raw -O vmdk 123.vmdk
转换需要时间,等待转换完成:
转换完成的文件大概是10g
,这时候准备使用VMware
打开看下。
5.2 VMware Fusion-mac下打开
创建自定义虚拟机:
选择操作系统:
默认:
选择现有虚拟磁盘:
然后存储选择和命令:
设置好之后,跑一下看看:
以前做的大概需要好久才可以进入界面,但是这次很快就可以进去了:
至此,导入到本地成功。
6. 取证分析
打开之后,发现已经被勒索:
6.1 history分析
先分析下history
,在这里直接将history
到处到1.txt
里面看:
此时获取到了第一个flag
,再分析下当前root
用户做了哪些操作:
在这里看到,对首页进行了备份,然后新增了一个首页:
将vulntarget.jsp
修改为了404.jsp
,应该是一个后门,到时候结合日志进行分析。
在这里看到生成了一个公私钥,并且使用了一个加密,找下这两个公私钥是否存在:
从这里看到,当前的公钥还没删,当然私钥也没删,应该是可以恢复数据的(/tmp
目录是我自己刚刚复制出来的,忽略):
在这来看下,先恢复数据吧,把根目录的.vulntarget
结尾的文件和公私钥都复制到tmp
目录去,然后分析。
6.2 勒索解密
分析密钥应该是只做了rsa
一次加密,在这里尝试解密:
本地做一个程序,然后直接解密试试:
解密成功,并且获取的一个关键的flag
6.3 恢复页面
将已经恢复的index.jsp
界面恢复到根目录中:
此时界面恢复成功。
6.4 分析日志
将日志文件拷贝,在主机上进行分析:
在这里发现了最后一个flag
结合history
和日志来进行分析:
在这里发现了一个put
了一个vulntarget.jsp
文件,然后找到这个文件看下:
显示信息是:hack by crow
明显就是攻击信息了,而且写入成功。
后面又写入了一个vulntargetn.jsp
文件:
这个文件后面又经过history
里面的命令,将该文件重命名为404.jsp
:
看下这个文件:
这是一个小马文件,从日志里面也可以看到当前执行的命令:
至此分析完成。
6.5 攻击路径
其实在这里少了一个反弹shell
,之所以没有反弹shell
,主要是防止靶场制作者信息泄露:
攻击路径如下:
- 攻击者通过
tomcat
的put
漏洞上传了一个shell
- 通过
shell
执行了命令 - 通过
shell
拿到权限(该条暂时缺失,没有反弹shell
) - 通过命令在受害者机器上生成了
rsa
的公私钥 - 通过公钥对于关键数据进行了加密
- 攻击者忘记删除了生成的公私钥
- 通过执行命令将
index.jsp
文件替换为勒索界面