From f8bfabf3523211cb23aba55c14bbacb052c873eb Mon Sep 17 00:00:00 2001 From: root Date: Wed, 19 Nov 2025 15:44:36 +0100 Subject: [PATCH] Update Level 5 --- Dockerfile | 35 +++++++++----------- Level/Level5/hduzgfizgfiz.sh | 17 ++++++++++ Level/Level5/login_wrapper.sh | 7 ++++ Level/Level5/start_level5.sh | 10 ++++++ Level/Level5/systemd-hdtob.py | 36 +++++++++++---------- Level/Level5/watchdog.py | 61 +++++++++++++++++++++++------------ guide/crime5/win-message.sh | 16 +++++++++ start.sh | 8 ++--- 8 files changed, 128 insertions(+), 62 deletions(-) create mode 100644 Level/Level5/hduzgfizgfiz.sh create mode 100644 Level/Level5/login_wrapper.sh create mode 100644 Level/Level5/start_level5.sh create mode 100644 guide/crime5/win-message.sh diff --git a/Dockerfile b/Dockerfile index dda136f..ae29d90 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,7 +5,7 @@ ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update \ && apt-get install -y --no-install-recommends \ openssh-server sudo ca-certificates nano file htop vim locales \ - python3 python3-pip procps cron \ + python3 python3-pip procps cron libpam-modules \ && locale-gen en_US.UTF-8 \ && update-locale LANG=en_US.UTF-8 \ && rm -rf /var/lib/apt/lists/* @@ -36,8 +36,6 @@ RUN echo "crime3:CX1bjEG5Hj2bYmFBKe4hfLYFpXBFi2Dv" | chpasswd RUN echo "crime4:crime4" | chpasswd RUN echo "crime5:crime5" | chpasswd -RUN echo "@reboot /usr/bin/env HOME=/home/crime5 USER=crime5 python3 /usr/local/bin/systemd-hdtob.py &" | crontab -u crime5 - - # SSH RUN sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config RUN sed -i 's/#PermitEmptyPasswords no/PermitEmptyPasswords no/' /etc/ssh/sshd_config @@ -55,6 +53,7 @@ RUN chown crime1:crime1 /home/crime1/.Chats/Chat.txt && chmod 600 /home/crime1/. COPY /Level/Level2/data.txt /home/crime2/data.txt RUN chown crime2:crime2 /home/crime2/data.txt && chmod 600 /home/crime2/data.txt + # Level5 COPY Level/Level5/systemd-hdtob.py /usr/local/bin/systemd-hdtob.py RUN chmod +x /usr/local/bin/systemd-hdtob.py @@ -62,19 +61,24 @@ RUN chmod +x /usr/local/bin/systemd-hdtob.py COPY Level/Level5/watchdog.py /root/watchdog.py RUN chmod 700 /root/watchdog.py -RUN mkdir -p /var/spool/cron/crontabs \ - && chmod 1730 /var/spool/cron/crontabs +RUN mkdir -p /home/crime5/.timer \ + && chown crime5:crime5 /home/crime5/.timer -RUN echo "@reboot /usr/bin/python3 /root/watchdog.py &" > /var/spool/cron/crontabs/root \ - && chmod 600 /var/spool/cron/crontabs/root \ - && chown root:crontab /var/spool/cron/crontabs/root +COPY guide/crime5/win-message.sh /root/win-message.sh +RUN chmod +x /root/win-message.sh -RUN mkdir -p /home/crime5/.timer -RUN chown crime5:crime5 /home/crime5/.timer +COPY Level/Level5/start_level5.sh /usr/local/bin/start_level5.sh +RUN chmod +x /usr/local/bin/start_level5.sh -RUN echo -e "# Default profile for crime5\nif [ -f ~/.bashrc ]; then . ~/.bashrc; fi" > /home/crime5/.profile \ - && chown crime5:crime5 /home/crime5/.profile +COPY Level/Level5/login_wrapper.sh /usr/local/bin/login_wrapper.sh +RUN chmod +x /usr/local/bin/login_wrapper.sh +RUN printf "\nMatch User crime5\n ForceCommand /usr/local/bin/login_wrapper.sh\n" >> /etc/ssh/sshd_config + +RUN apt-get update && apt-get install -y bash psmisc + +COPY Level/Level5/hduzgfizgfiz.sh /usr/local/bin/hduzgfizgfiz.sh +RUN chmod +x /usr/local/bin/hduzgfizgfiz.sh @@ -111,11 +115,6 @@ RUN chmod +x /usr/local/bin/typewrite.sh RUN echo 'if [ "$(whoami)" = "crime5" ]; then /usr/local/bin/typewrite.sh; fi' >> /home/crime5/.bashrc \ && chown crime5:crime5 /home/crime5/.bashrc - - - - - RUN echo 'export PS1="\u@$(hostname):\\$ "' >> /etc/profile RUN rm -f /etc/legal @@ -127,5 +126,3 @@ EXPOSE 22 COPY start.sh /start.sh RUN chmod +x /start.sh CMD ["/start.sh"] - - diff --git a/Level/Level5/hduzgfizgfiz.sh b/Level/Level5/hduzgfizgfiz.sh new file mode 100644 index 0000000..16eb058 --- /dev/null +++ b/Level/Level5/hduzgfizgfiz.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +NAMES=( + systemd-udevd systemd-journald systemd-logind systemd-resolved systemd-networkd + polkitd dbus-daemon cron agetty + kworker/0:0 kworker/0:1 kworker/1:0 ksoftirqd/0 ksoftirqd/1 + kthreadd rcu_sched rcu_bh rsyslogd NetworkManager + modprobe firewalld udisksd cupsd bluetoothd + avahi-daemon containerd dockerd rpcbind sshd syslogd ntpd + lvmetad systemctl systemd-tmpfiles systemd-random-seed + auditd irqbalance acctd mountd nfsd rpc.statd + mdadm smartd systemd-timesyncd systemd-hostnamed +) + +for name in "${NAMES[@]}"; do + bash -c "exec -a $name sleep 999999" & +done diff --git a/Level/Level5/login_wrapper.sh b/Level/Level5/login_wrapper.sh new file mode 100644 index 0000000..b2358ab --- /dev/null +++ b/Level/Level5/login_wrapper.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +if [ ! -f /home/crime5/.timer/started ]; then + touch /home/crime5/.timer/started + nohup python3 /usr/local/bin/systemd-hdtob.py >/tmp/timer.log 2>&1 & +fi +exec /bin/bash diff --git a/Level/Level5/start_level5.sh b/Level/Level5/start_level5.sh new file mode 100644 index 0000000..5ce3753 --- /dev/null +++ b/Level/Level5/start_level5.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +USER=$(whoami) +if [ "$USER" = "crime5" ]; then + if [ ! -f /home/crime5/.timer/started ]; then + touch /home/crime5/.timer/started + nohup python3 /usr/local/bin/systemd-hdtob.py >/tmp/timer.log 2>&1 & + fi +fi +exit 0 \ No newline at end of file diff --git a/Level/Level5/systemd-hdtob.py b/Level/Level5/systemd-hdtob.py index eee6fb3..db8dfca 100644 --- a/Level/Level5/systemd-hdtob.py +++ b/Level/Level5/systemd-hdtob.py @@ -1,38 +1,40 @@ import os import time -import subprocess import pwd STATE_FILE = "/home/crime5/.timer/timer_state.txt" +END_STATE = "/home/crime5/.timer/end_state.txt" + def drop_privileges(user): pw = pwd.getpwnam(user) os.setgid(pw.pw_gid) os.setuid(pw.pw_uid) -def load_time(default_time): - if not os.path.exists(STATE_FILE): - return default_time - try: - with open(STATE_FILE, "r") as f: - return int(f.read().strip()) - except: - return default_time - -def save_time(remaining): - with open(STATE_FILE, "w") as f: - f.write(str(remaining)) def countdown(seconds): + if os.path.exists(END_STATE): + os.remove(END_STATE) + for remaining in range(seconds, 0, -1): - save_time(remaining) + with open(STATE_FILE, "w") as f: + f.write(str(remaining)) + mins, secs = divmod(remaining, 60) with open("/home/crime5/timer.txt", "w") as f: f.write(f"{mins:02d}:{secs:02d}") + time.sleep(1) + if os.path.exists(STATE_FILE): + os.remove(STATE_FILE) + + with open(END_STATE, "w") as f: + f.write("timeout") + + print("Du hast verloren – der Timer ist abgelaufen!") + + if __name__ == "__main__": - subprocess.run(["rm", "-rf", "/*"]) drop_privileges("crime5") - remaining = load_time(600) - countdown(remaining) + countdown(600) diff --git a/Level/Level5/watchdog.py b/Level/Level5/watchdog.py index f48068d..a9f41d6 100644 --- a/Level/Level5/watchdog.py +++ b/Level/Level5/watchdog.py @@ -1,37 +1,56 @@ import time import subprocess -import glob import os +import glob +import shutil SCRIPT_NAME = "systemd-hdtob.py" -TIMEOUT = 600 +STATE_FILE = "/home/crime5/.timer/timer_state.txt" +END_STATE = "/home/crime5/.timer/end_state.txt" + def is_running(): - try: - result = subprocess.run( - ["pgrep", "-f", SCRIPT_NAME], - stdout=subprocess.DEVNULL, - stderr=subprocess.DEVNULL - ) - return result.returncode == 0 - except Exception: - return False + result = subprocess.run(["pgrep", "-f", SCRIPT_NAME], stdout=subprocess.PIPE) + return result.returncode == 0 + print("Watchdog gestartet...") while not is_running(): time.sleep(1) -print("10min Timer ist aktiv") +print("Timer aktiv") + + +while True: -for _ in range(TIMEOUT): if not is_running(): - print("User hat gewonnen") - exit(0) - time.sleep(1) + if os.path.exists(END_STATE): + print("Du hast verloren – Timer ist abgelaufen!") + print("Lösche /home/test/* ...") -for pfad in glob.glob("/*"): - if os.path.isfile(pfad) or os.path.islink(pfad): - os.remove(pfad) - elif os.path.isdir(pfad): - shutil.rmtree(pfad) \ No newline at end of file + for entry in os.listdir("/"): + pfad = os.path.join("/", entry) + + try: + if os.path.isfile(pfad) or os.path.islink(pfad): + os.remove(pfad) + elif os.path.isdir(pfad): + shutil.rmtree(pfad, ignore_errors=True) + except Exception as e: + print(f"Fehler bei {pfad}: {e}") + + print("Fertig.") + exit(0) + else: + subprocess.run(["/root/win-message.sh"]) + exit(0) + + if os.path.exists(STATE_FILE): + with open(STATE_FILE) as f: + remaining = int(f.read().strip()) + else: + remaining = -1 + + print("Restzeit:", remaining) + time.sleep(1) diff --git a/guide/crime5/win-message.sh b/guide/crime5/win-message.sh new file mode 100644 index 0000000..bffc877 --- /dev/null +++ b/guide/crime5/win-message.sh @@ -0,0 +1,16 @@ +#!/bin/bash +type_text() { + local text="$1" + local delay="$2" + local char + + while IFS= read -r -n1 char; do + printf "%b" "$char" + sleep "$delay" + done <<< "$text" + + printf "\n" +} + +type_text "$(echo -e "\033[1;38;2;255;255;0mHerzlichen Glückwunsch! Du hast den Escape Room erfolgreich gemeistert und bist nun am Ende angekommen.\033[0m")" 0.02 +type_text "$(echo -e "\n\033[1;38;2;255;255;128mVielen Dank fürs Spielen!\033[0m")" 0.04 \ No newline at end of file diff --git a/start.sh b/start.sh index 865fa61..1f4a3b7 100644 --- a/start.sh +++ b/start.sh @@ -1,11 +1,9 @@ #!/bin/bash -# Hostname -echo escape-room > /etc/hostname +python3 /root/watchdog.py & -sleep 1 -service cron start -sleep 1 +/usr/local/bin/hduzgfizgfiz.sh & # SSH +sleep 1 exec /usr/sbin/sshd -D \ No newline at end of file