1.使用IDEA调试远程Java代码
2.SpringCloud远程调用客户端之Feign源码剖析
3.log4j2远程代码执行漏洞本地复现
4.关于一款开源远程控制软件(gh0st)的远程源码远程源码用源码分析(一)
使用IDEA调试远程Java代码
在IDEA中调试远程Java代码是一项常见的需求。本文将指导你如何在IDEA中配置并实现远程调试,回放回放无需担忧步骤细节,远程源码远程源码用只需跟随操作即可。回放回放
首先,远程源码远程源码用打开IDEA的回放回放fa源码资源“Run/Debug Configurations”设置,输入远程服务器的远程源码远程源码用IP和端口。红框中的回放回放信息在后续步骤会用到,暂时不用修改。远程源码远程源码用
接下来,回放回放登录远程服务器,远程源码远程源码用编辑tomcat的回放回放catalina.sh文件,添加配置,远程源码远程源码用参数应与第一步的回放回放IP和端口对应。注意,远程源码远程源码用根据远程服务器的JDK版本,可能需要使用红框中的不同输入框来获取相应的参数。
启动IDEA服务,为需要调试的西祠胡同评论源码代码设置断点。当远程服务器上的程序被访问时,IDEA会自动连接并进入断点模式。点击相应的启动按钮,观察控制台输出以确认连接成功。
关于配置参数的含义,绿框中的Transport选择IDEA与服务器的通信方式,通常选择Socket或Shared memory。Debugger mode建议使用Attach模式,等待IDEA连接。Host和Port则是远程服务器的地址和端口。
红框中的参数是自动生成的,与绿框设置相关,用于启动jdwp服务器。-Xrunjdwp指示JVM使用jdwp协议,transport根据上述选择进行配置,address则对应远程服务器的端口。
注意事项包括:确保远程服务器的指定端口未被占用且能被本地访问,通过telnet测试;代码部署需与本地源代码一致,红酒世网源码以保证断点功能;在catalina.sh中的JAVA_OPTS参数添加新配置时,只需追加即可。
SpringCloud远程调用客户端之Feign源码剖析
Spring Cloud 的远程调用客户端 Feign 的源码解析
本文深入探讨 Spring Cloud 远程调用客户端 Feign 的源码实现。首先,我们关注 org.springframework.cloud.openfeign.EnableFeignClients 注解,其主要作用在于扫描 Feign 客户端以及配置信息,并引入 org.springframework.cloud.openfeign.FeignClientsRegistrar。这个注解所执行的操作包括两部分:扫描配置类信息和扫描客户端。
在 FeignClientsRegistrar 类中,主要通过解析 EnableFeignClients 注解的属性信息并注册默认配置来完成配置类信息的扫描。随后,它将配置类注入到 Spring 容器中,实现配置信息的注册。接着,Feign 的自动装配过程通过 FeignAutoConfiguration 类中注入的 Feign 上下文来实现,它创建了一个 Feign 实例工厂,并从 Spring 上下文中获取 Feign 实例。
在初始化阶段结束后,mdc影视链源码我们可以通过 Spring 容器获取 Feign 客户端。具体过程在 FeignClientsRegistrar#registerFeignClients 中实现,传入一个工厂到 BeanDefinition 的封装中。接着,通过工厂获取目标对象,主要过程涉及获取 Feign 上下文、利用上下文获取构造器以及调用 FeignClientFactoryBean#loadBalance 方法。
在 FeignClientFactoryBean#loadBalance 中,主要任务是使用 Feign 上下文获取客户端并设置构造器,最后获取目标并调用其 target 方法。这一过程最终指向 Feign 的核心实现,生成了一个 Feign 代理对象。
获取 Feign 代理对象后,我们可以通过调用代理对象的 invoke 方法进行远程调用。这一过程通过 feign.InvocationHandlerFactory 中的实现来完成,最终调用 Feign 实现的 executeAndDecode 方法执行实际的远程调用。整个调用过程涉及获取客户端基本信息、执行调用以及通过动态代理返回结果。亿乐程序源码
最后,Feign 调用最终通过 HTTP 协议进行远程请求的发送。整个解析过程展示了 Feign 如何通过 Spring Cloud 的集成,提供了一种优雅、灵活的远程调用方式,同时利用了 Feign 的动态代理和上下文管理,使得远程调用的实现变得更加简单、高效。
log4j2远程代码执行漏洞本地复现
本文仅供学习参考,请勿在真实环境进行网络攻击行为。
一、背景
Log4j 2 是 Java 中应用非常广泛的一个日志框架,在 年底,一个名为 CVE--(也称为 Log4Shell)的严重漏洞被发现,该漏洞被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....能够访问说明一切正常。如果没有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,可以确认恶意代码已经执行,漏洞成功复现。
四、注意事项
关于一款开源远程控制软件(gh0st)的源码分析(一)
gh0st软件专为远程控制设计,支持远程文件传输、视频连接等功能,类似QQ远程桌面。软件由gh0st_Client与gh0st_Server两部分组成。
启动gh0st_server,VS调试,程序运行后,中断所有调试,打开Threads窗口和CallStack窗口。gh0st_server作为服务端,启动时创建个线程,主线程负责资源初始化,创建监听线程ListenThreadProc以监听客户端连接。
主线程完成初始化后,ListenThreadProc进入循环,等待连接请求,通过m_hkillEvent事件与主线程同步。当主线程发出关闭命令,m_hkillEvent设置为可信任状态,工作线程退出循环,进行资源回收,增强程序稳定性。
gh0st_server的核心在于IOCPServer类,它负责网络事件检测、IO请求与数据收发。当有网络事件发生时,关键业务逻辑将处理数据接收与解包等操作,详情将在后续章节介绍。