Philipp_K59 schrieb:
> Du könntest ein Einzeiler Script das das geheime Script startet
> schreiben und komplett zugriff geben.. da kann man dann höchstens den
> Dateinamen rausfinden.
Fast. Das aufrufende Script müsste den selben User wie das aufgerufene
Script haben + das SUID Bit muss gesetzt sein.
https://en.wikipedia.org/wiki/Setuid
Allerdings funktioniert das SUID Bit für Scripts nicht mehr auf
aktuellen *NIX Systemen (Sicherheitsrisiko). Man müßte also ein Binary
dafür kompilieren.
Beispiel:
1 | prompt> cat > hello.sh <<EOF
|
2 | #!/bin/bash
|
3 | echo "hello world!"
|
4 | EOF
|
5 | prompt> chmod +x hello.sh
|
6 | prompt> ./hello.sh
|
7 | hello world!
|
8 | prompt> sudo chown root hello.sh
|
9 | prompt> sudo chmod 711 hello.sh
|
10 | prompt> ./hello.sh
|
11 | /bin/bash: ./hello.sh: Permission denied
|
Root dient hier lediglich als (gefährliches) Beispiel.
Anyway, C source to invoke hello.sh:
1 | #include <stdio.h>
|
2 | #include <stdlib.h>
|
3 | #include <unistd.h>
|
4 | int main()
|
5 | {
|
6 | int error = setuid(geteuid()) ;
|
7 | if (error) {
|
8 | perror("setuid() failed") ;
|
9 | exit(1) ;
|
10 | }
|
11 | error = execl("./hello.sh","./hello.sh",NULL) ;
|
12 | if (error) {
|
13 | perror("exec() failed") ;
|
14 | exit(1) ;
|
15 | }
|
16 | return 0 ;
|
17 | }
|
Compilieren und Rechte setzen:
1 | prompt> gcc -Wall invoke.c -o invoke
|
2 | prompt> ./invoke
|
3 | /bin/bash: ./hello.sh: Permission denied
|
4 | prompt> sudo chown root invoke
|
5 | prompt> ./invoke
|
6 | /bin/bash: ./hello.sh: Permission denied
|
7 | prompt> sudo chmod 4755 invoke
|
8 | prompt> ./invoke
|
9 | hello world!
|
Die Maske ist 6755 für Set-User+Group-ID (siehe chmod).
Note: SUID Programme stellen immer ein potentielles Sicherheitsrisiko
dar.
Edit: prompt names