Ich arbeite derzeit an einer Idee für eine lustige CTF-Herausforderung. Eine der größten Hürden dieser Herausforderung besteht jedoch darin, einem Benutzer eine bestimmte Zeit für eine SSH-Verbindung zu gewähren.
Im Wesentlichen muss sich der Benutzer mit dem Challenge-Benutzer per SSH in eine Linux-VM einloggen. Er hat 10 Minuten Zeit, um 10 Teile der Flagge zu finden, die in einer bestimmten Reihenfolge angeordnet sein müssen, bevor die SSH-Sitzung beendet wird und ein Ereignis ausgelöst wird, das die Position der Flaggenteile tauscht. An diesem Punkt muss der Benutzer eine neue SSH-Verbindung öffnen und mit der Suche fortfahren.
Das Hauptproblem besteht hier darin, die Zeit zu begrenzen, die dem Benutzer zur Verfügung steht. Ist dies mit SSH überhaupt möglich? Und wenn ja, wie erreiche ich dies?
Vielen Dank im Voraus für jede Hilfe.
Antwort1
Hmm, es ÜBER SSH zu machen, wäre unerschwinglich schwierig. Ich denke, der einfachste Weg wäre, jedes Mal, wenn Sie sich per SSH bei einem bestimmten Konto anmelden, ein Hintergrundprogramm zu starten, das nach 10 Minuten alle SSH-Verbindungen beendet. Ehrlich gesagt wäre es sehr einfach.
Sie würden etwas zu ~/.profile oder ~/.bashrc hinzufügen, das etwa so lautet
sleep 600
killall --user {whateverhis/herusernameis}
end
oder Sie verstehen, was ich meine.
Antwort2
Verwendung ForceCommand
in sshd_config
. Es ist sichergestellt, dass es nach dem Login ausgeführt wird:
Match User ctfuser
ForceCommand "(sleep 600; killall -u ctfuser)& bash"
Wenn Sie nur Shell-Zugriff benötigen, ist dies ausreichend. Wenn Sie auch SFTP oder SCP benötigen, müssen Sie es ein wenig anpassen.