Archiv verlassen und diese Seite im Standarddesign anzeigen : sh: case mit regex? ! builtin abfangen?
Hallo ;
ich versuche mit einem sh-wrapper das ! der shell
abzufangen. Spaeter soll der Input mal ausgefuehrt werden.
Wenn ich in der Console folgendes eingebe funktioniert das nur
halb:
rtfmt:~ # sh ./echo-wrapper.sh at!d restart
sh ./echo-wrapper.sh atdate restart
atdate restart
rtfmt:~ # sh ./echo-wrapper.sh at\!d restart
atd restart
Dazu gibt es bisher folgendes:
#!/bin/bash --restricted
BAR=`echo "$@"|sed -e s'/!//g'|sed -e s'/\!//g'|sed -e s'/[^0-9,A-Z,a-z ]//g'`
case "$@" in
ls*)
/bin/ls
;;
*restart*)
echo $BAR
# sh -c "/etc/init.d/$SSH_ORIGINAL_COMMAND"
;;
*)
/bin/echo "not allowed and forbidden by the nsa:"$SSH_ORIGINAL_COMMAND"
;;
esac
Bin dankbar fuer jeden Hint.
gruss 403
Alle Ersetzungen nimmt die Shell vor, bevor das Programm ausgeführt wird, und dem Programm werden dann die Ergebnisse übergeben. Wenn du z.B
cat * schreibst, wird
cat foo bar baz aufgerufen, wenn diese 3 Dateiein im Verzeichnis sind.
Du wirst das also so nicht umgehen können.
Hallo :-)
warum sollte man * nicht durch s'/[^a-zA-Z0-9]//g' ersetzen keonnen?
bzw, die einzelnen Metazeiuchen wie ! usw. ?
Vermutlich ist es das beste nur "command " explizit zu erlauben statt mit
einem Regex alles auszuschliessen?
gruss 403
Und Danke fuer die Hilfe/Zeit
Ich verstehe nicht!? * und ! werden, wenn sie ersetzt werden, vor dem Aufruf ersetzt, $@ enthält bereits das Ergebnis dieser Ersetzung.
Es geht darum Shell Builtins abzustellen.
$@ enthält bereits das Ergebnis dieser Ersetzung...
Deshalb sollte ja $@ auch nochmal gerippt werden.
Ich glaube, was ich suche heisst einfach set -o noglob bzw.
enable -n noglob...
Im schlimmsten Fall wuerde man eben eine Bash neukompilieren, oder
wie bereits gesagt, die Moeglichkeiten explizit angeben.
( case in $SSH-ORIGINAL-COMMAND
atd restart
;;
nscd restart
;;
)
usw.
Ich denke, es ist besser, wenn du uns mitteilst, welches Problem du lösen willst, und nicht wie; was du da vorhast verstehe ich nicht ganz. Wenn du das Shellbuiltin test ausschaltest, nehme ich als /bin/test.
Also, welches Problem möchtest du lösen? Da gibt es sicherlich eine einfacherere udn sicherere Methode.
Ich denke, es ist besser, wenn du uns mitteilst, welches Problem du lösen willst, und nicht wie; was du da vorhast verstehe ich nicht ganz. Wenn du das Shellbuiltin test ausschaltest, nehme ich als /bin/test.
Also, welches Problem möchtest du lösen? Da gibt es sicherlich eine einfacherere udn sicherere Methode.
Also folgendes Scenario:
1) Ein User logt sich ein via SSH-PublickeyAuthorization mit forced commands
2) Statt einer Shell oder einem Command wird ein Wrapper gestartet
3) Das vom User uebertragene <Keyword> wird an den Wrapper uerbermittelt
4) der Wrapper startet den Dienst <Dienst> neu , oder stellt ihn aus usw.
5) Was verhindert werden soll ist, wenn jemand den Client cracked, dass
jemand dann z.B. /bin/bash -c "/bin/cat /etc/shadow" oder aehnliches
eingibt, weil im wrapper steht:
case in bla
*restart*)
/etc/init.d/$dienst restart
Dabei geht es um das erste *, was aus meiner sich eine potentielle Luecke
darstellt, die mit oben genannten Wegen geschlossen werden sollte.
natuerlich kann "*" nicht mehr verwendet werden, wenn noglob aktiv ist.
;)
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.