Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
log4shell-example — Das Ziel dieses Projekts ist es, die log4j-Exploit-Schwachstelle cve-2021-44228 in einer spring-boot-Umgebung zu demonstrieren und zu zeigen, wie man sie behebt. | Kitploit
Tools/GitHubGitHub/chilit-nl/log4shell-example
SchwachstellenanalyseCode-AnalyseExploitationWebsicherheitLernen & BildungLabs & Praxis
GitHubchilit-nl/log4shell-example

log4shell-example

Das Ziel dieses Projekts ist es, die log4j-Exploit-Schwachstelle cve-2021-44228 in einer spring-boot-Umgebung zu demonstrieren und zu zeigen, wie man sie behebt.

Repository anzeigen
216vor 4 JahrenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Log4Shell Exploit Test

Das Ziel dieses Projekts ist es, die Log4j CVE-2021-44228 Exploit-Schwachstelle in einer Spring-Boot-Umgebung zu demonstrieren und zu zeigen, wie man sie behebt.

Dieses Projekt enthält drei Submodule. Eines davon enthält anfälligen Code, die anderen beiden sind gepatcht.

So verwenden Sie dieses Projekt

Führen Sie ./mvnw clean test im Stammverzeichnis des Projekts aus, um die Tests in beiden Modulen auszuführen. In log4shell-example-unpatched werden Sie viele Ausnahmen sehen (der Test wird dennoch bestehen, da dies erwartet wird), weil es keine korrekte Antwort vom Server erhält, zu dem es eine Verbindung herzustellen versucht.

Wann bin ich verwundbar?

Ihre Anwendung ist verwundbar, wenn Sie den Standard-Logger überschrieben haben, sodass er die Log4j2-Implementierung verwendet, und Sie die verwendete Version von Log4j2 nicht überschrieben haben. Die pom wird in etwa so aussehen:```xml org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-logging

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
Sie können sehen, dass Ihre Log-Aufrufe jetzt anfällig sind, indem Sie den Test in `log4shell-example-unpatched` ausführen. Dieser Test ist erfolgreich, wenn die Log-Aufrufe anfällig sind.

### Verwenden des Spring-Integrationstests, um zu prüfen, ob Ihre eigene Anwendung anfällig ist

#### 1. Fügen Sie den `Log4ShellTest` zu Ihrem Projekt hinzu

Fügen Sie den `Log4ShellTest` aus `log4shell-example-patched-version` zu Ihrem Projekt hinzu:```java
import lombok.extern.log4j.Log4j2;
import lombok.extern.slf4j.Slf4j;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicInteger;

@SpringBootTest
@Import(Log4ShellTest.Log4ShellConfig.class)
public class Log4ShellTest {

    @Autowired
    private List<Log4ShellService> servicesToTest;

    @Test
    public void testVulnerabilityPatched() throws Exception {

        CountDownLatch waitLatch = new CountDownLatch(1);
        AtomicInteger connectionAttemptCounter = new AtomicInteger();
        Thread listener = new Thread(() -> {
            try {
                ServerSocket socket = new ServerSocket(22345);
                while(true) {
                    waitLatch.countDown();
                    Socket connection = socket.accept();
                    connectionAttemptCounter.getAndIncrement();
                    connection.close();
                }
            }
            catch(IOException ex) {
                throw new IllegalStateException(ex);
            }
        });
        listener.start();
        waitLatch.await();

        servicesToTest.forEach(service -> service.testLog("${jndi:ldap://127.0.0.1:22345}"));

        Assertions.assertEquals(0, connectionAttemptCounter.get());
        // If you're not using lombok, change the 6 to 2
        Assertions.assertEquals(6, servicesToTest.size());

        listener.interrupt();

    }

    @Configuration
    @ComponentScan
    public static class Log4ShellConfig {

    }

    public interface Log4ShellService {
        void testLog(String arg);
    }

    @Component
    public static class Service1 implements Log4ShellService {

        private static final Logger logger = LogManager.getLogger("Test");

        @Override
        public void testLog(String arg) {
            logger.info("Test: " + arg);
        }
    }

    @Component
    public static class Service2 implements Log4ShellService {

        private static final Logger logger = LogManager.getLogger("Test");

        @Override
        public void testLog(String arg) {
            logger.info("Test: {}", arg);
        }
    }

    // Remove this class if you're not using lombok
    @Component
    @Slf4j
    public static class Service3 implements Log4ShellService {

        @Override
        public void testLog(String arg) {
            log.info("Test: {}", arg);
        }
    }

    // Remove this class if you're not using lombok
    @Component
    @Slf4j
    public static class Service4 implements Log4ShellService {

        @Override
        public void testLog(String arg) {
            log.info("Test: " + arg);
        }
    }

    // Remove this class if you're not using lombok
    @Component
    @Log4j2
    public static class Service5 implements Log4ShellService {

        @Override
        public void testLog(String arg) {
            log.info("Test: {}", arg);
        }
    }

    // Remove this class if you're not using lombok
    @Component
    @Log4j2
    public static class Service6 implements Log4ShellService {

        @Override
        public void testLog(String arg) {
            log.info("Test: " + arg);
        }
    }

}

2. Überprüfen, ob dieser Test fehlschlägt

Tool herunterladen