From c7044d80913137e27dbff03a326878535f438b2f Mon Sep 17 00:00:00 2001 From: meowmycks Date: Sat, 8 Feb 2025 10:45:26 -0500 Subject: [PATCH] Upload files to "/" --- fake_snmp_server.py | 102 ++++++++++++++++++++++++++++++++++++++++++ fake_telnet_server.py | 59 ++++++++++++++++++++++++ favicon.ico | Bin 0 -> 1150 bytes main.py | 39 ++++++++++++++++ 4 files changed, 200 insertions(+) create mode 100644 fake_snmp_server.py create mode 100644 fake_telnet_server.py create mode 100644 favicon.ico create mode 100644 main.py diff --git a/fake_snmp_server.py b/fake_snmp_server.py new file mode 100644 index 0000000..795c7fb --- /dev/null +++ b/fake_snmp_server.py @@ -0,0 +1,102 @@ +import socket +import struct +import threading + +# Configuration +SNMP_PORT = 161 +PRINTER_NAME = "HP Color LaserJet Pro MFP M478" +FAKE_SYS_DESCRIPTION = "HP Color LaserJet Pro MFP M478 - Firmware 002_2445A" +FAKE_SYS_NAME = "HP-LaserJet-4" + +# SNMP OIDs to mimic a real printer +SNMP_OIDS = { + "1.3.6.1.2.1.1.1.0": FAKE_SYS_DESCRIPTION, # sysDescr + "1.3.6.1.2.1.1.5.0": FAKE_SYS_NAME, # sysName +} + +# Function to handle SNMP requests +def encode_snmp_response(request_data): + try: + # Extract SNMP version & community string + snmp_version = request_data[6] # SNMPv1 + community_len = request_data[7] # Length of the community string + community = request_data[8:8+community_len].decode() + + # Extract the OID (simplified) + oid_raw = request_data[-6:] + oid = ".".join(str(b) for b in oid_raw) + + if oid in SNMP_OIDS: + response_value = SNMP_OIDS[oid] + else: + response_value = "OID Not Found" + + # Build a proper SNMP Get-Response packet using ASN.1 + response_packet = struct.pack("!B", 0x30) + struct.pack("!B", len(response_value) + 20) + response_packet += struct.pack("!B", 0x02) + struct.pack("!B", 1) + struct.pack("!B", 0x00) # SNMP Version 1 + response_packet += struct.pack("!B", 0x04) + struct.pack("!B", len(community)) + community.encode() # Community String + response_packet += struct.pack("!B", 0xA2) + struct.pack("!B", len(response_value) + 10) # SNMP Get-Response + response_packet += struct.pack("!B", 0x02) + struct.pack("!B", 1) + struct.pack("!B", 0x01) # Request ID + response_packet += struct.pack("!B", 0x02) + struct.pack("!B", 1) + struct.pack("!B", 0x00) # Error status = 0 + response_packet += struct.pack("!B", 0x02) + struct.pack("!B", 1) + struct.pack("!B", 0x00) # Error index = 0 + response_packet += struct.pack("!B", 0x30) + struct.pack("!B", len(response_value) + 6) # VarBindList + response_packet += struct.pack("!B", 0x30) + struct.pack("!B", len(response_value) + 4) # VarBind + response_packet += struct.pack("!B", 0x06) + struct.pack("!B", len(oid)) + oid.encode() # OID + response_packet += struct.pack("!B", 0x04) + struct.pack("!B", len(response_value)) + response_value.encode() # Value + + return response_packet + except Exception as e: + print(f"[-] SNMP Encoding Error: {e}") + return None + +# Function to handle UDP SNMP requests +def handle_snmp_udp(sock): + while True: + try: + data, addr = sock.recvfrom(1024) # Receive SNMP request + response = encode_snmp_response(data) + + if response: + sock.sendto(response, addr) + except Exception as e: + print(f"[-] SNMP UDP Error: {e}") + +# Function to handle TCP SNMP requests +def handle_snmp_tcp(client_socket, addr): + try: + data = client_socket.recv(1024) # Read incoming SNMP request + response = encode_snmp_response(data) + if response: + client_socket.sendall(response) + except Exception as e: + print(f"[-] SNMP TCP Error: {e}") + finally: + client_socket.close() + +# Function to start the fake SNMP service +def start_fake_snmp_service(): + # Create UDP socket + udp_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + udp_sock.bind(("0.0.0.0", SNMP_PORT)) + + # Create TCP socket + tcp_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + tcp_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + tcp_sock.bind(("0.0.0.0", SNMP_PORT)) + tcp_sock.listen(5) + + print(f"[*] Fake SNMP printer service running on UDP & TCP port {SNMP_PORT}") + + # Start UDP handler in a thread + udp_thread = threading.Thread(target=handle_snmp_udp, args=(udp_sock,)) + udp_thread.daemon = True + udp_thread.start() + + # Handle TCP connections + while True: + client_socket, addr = tcp_sock.accept() + threading.Thread(target=handle_snmp_tcp, args=(client_socket, addr)).start() + +# Ensure script can be run standalone OR imported +if __name__ == "__main__": + start_fake_snmp_service() \ No newline at end of file diff --git a/fake_telnet_server.py b/fake_telnet_server.py new file mode 100644 index 0000000..2a63f6f --- /dev/null +++ b/fake_telnet_server.py @@ -0,0 +1,59 @@ +import socket +import threading +import time + +# Configuration +TELNET_PORT = 23 +PRINTER_NAME = "HP Color LaserJet Pro MFP M478" + +# Fake HP Printer Banner (as shown in the uploaded image) +BANNER = """\r +********************************************************************************\r +* Copyright (c) 2010-2024 Hewlett Packard Enterprise Development LP *\r +* *\r +* Without the owner's prior written consent, *\r +* no decompiling or reverse-engineering shall be allowed. *\r +********************************************************************************\r +\r +Login authentication\r +\r +Password: """ + +# Function to handle each Telnet connection +def handle_telnet_client(client_socket, address): + print(f"[+] Telnet connection from {address}") + + try: + # Send banner and prompt for password + client_socket.sendall(BANNER.encode()) + + # Read password input (won't authenticate) + password = client_socket.recv(1024).decode(errors="ignore").strip() + + # Always fail authentication + time.sleep(1) # Simulate processing delay + client_socket.sendall(b"\nLogin incorrect.\n") + time.sleep(1) + client_socket.close() + + except Exception as e: + print(f"[-] Telnet Error: {e}") + + finally: + client_socket.close() + +# Function to start the fake Telnet server +def start_fake_telnet_service(): + server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + server_socket.bind(("0.0.0.0", TELNET_PORT)) + server_socket.listen(5) + print(f"[*] Fake Telnet printer service running on port {TELNET_PORT}") + + while True: + client_socket, addr = server_socket.accept() + threading.Thread(target=handle_telnet_client, args=(client_socket, addr)).start() + +# Ensure script can be run standalone OR imported +if __name__ == "__main__": + start_fake_telnet_service() diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..6870d2a134d81d0fbc845f1037c38930bd175c81 GIT binary patch literal 1150 zcmbu7K`Vq&6o&7_ETm~jXp)+eVj&Ajla!4tBrCr_Vk=3LtRzX2^pS-oO_PNzWFc8t zOcv5)AxajLW+h3JCQ14{@3>cAvo+H*=iGDedG9&rjxiy=b#;bM+)P&+(}dRn3dJE* z{xxQhy~>a8`yt1jXR7YE%>a1!o*BVL;TiIG+a`q_g0MRuw8R@>7v8~#L+xWTcCAQ&Z~z5J!VzR`51Pdccg>@j!*{)C9_vtoKK7*b013`^+jtvRvzdcd;=@?iPYU1Z zt>M?gIV?jBWFd)e1a9!9A+0M=4Nvf9{ab7dCP6hsVHR%4m2MI)p&ph%`9*lOzUHSs z+d=sw%&i&w0SQn)np3~^6)&RgYLQ-={#17c_RF*L%rX83S~Z+K#ovSooIxH|K)Jqs zC*9u(r?Z>fCQ#6&B5J_H}oa&DX5;-;u^M^gx1sbZ@1G&YVD_aviLr=&BCA#~k{aQ4WIn jdN0-0;PNUhdz!~2XhsX5*<7Q&j_rkV%`VRv-~SIktQ14X literal 0 HcmV?d00001 diff --git a/main.py b/main.py new file mode 100644 index 0000000..afd1b6c --- /dev/null +++ b/main.py @@ -0,0 +1,39 @@ +import time +import threading +import signal +from fake_pjl_server import start_fake_pjl_service +from fake_lpd_server import start_fake_lpd_service +from fake_cups_server import start_fake_cups_service +from fake_http_server import start_fake_http_auth +from fake_telnet_server import start_fake_telnet_service +from fake_snmp_server import start_fake_snmp_service + +# Event to manage service shutdown +shutdown_event = threading.Event() + +# Function to clean up when stopping +def shutdown_handler(signum, frame): + print("\n[*] Shutting down all fake services...") + shutdown_event.set() # Signal all threads to exit + +# Register signal handlers for stopping the service +signal.signal(signal.SIGTERM, shutdown_handler) # Stop from systemctl stop +signal.signal(signal.SIGINT, shutdown_handler) # Stop with Ctrl+C + +# Start all fake printing services in the background +if __name__ == "__main__": + threading.Thread(target=start_fake_pjl_service, daemon=True).start() + threading.Thread(target=start_fake_lpd_service, daemon=True).start() + threading.Thread(target=start_fake_cups_service, daemon=True).start() + threading.Thread(target=start_fake_http_auth, daemon=True).start() + threading.Thread(target=start_fake_telnet_service, daemon=True).start() + threading.Thread(target=start_fake_snmp_service, daemon=True).start() + time.sleep(1) + + print("[*] Fake services are running.") + + # Keep the script alive until a termination signal is received + while not shutdown_event.is_set(): + time.sleep(1) # Wait loop to keep the main thread alive + + print("[*] Fake printer services stopped.")