Alter PHP Code greift direkt auf globale Variablen zu, die vom Webserver gesetzt werden. Dies ist ein Sicherheitsrisiko und deshalb sind aktuelle Webserver und PHP Interpreter anders konfiguriert.
Automatisches Suchen und ersetzen hilft bei der Portierung wenig, weil die lokalen Variablen nach dem gleichen Muster benutzt werden. Manuelles editieren ist mühsam und fehleranfällig, deshalb haben wir das folgende vi-Makro geschrieben:
map v f$a_POST["^[ea"]^[
Dieses Makro ist wohl bloss für vi-Gurus verständlich, deshalb die Erklärung dazu:
| map | definiert ein vi-Makro |
| v | ist einer der wenigen Buchstaben die von vi noch nicht belegt sind |
| f$ | positioniert den Cursor auf dem nächsten $-Zeichen |
| a | fügt Text hinter dem $ ein |
| _POST[" | wird eingefügt |
| ^[ | beendet das Einfügen. Die Eingabe erfolgt durch <Ctrl-V>Esc |
| e | geht zum Ende des Worts, also dem Variablennamen |
| a | fügt Text hinter dem Wort ein |
| "] | wird eingefügt |
| ^[ | beendet das Einfügen. |
Dieses Makro ersetzt also zum Beispiel $variable durch $_POST["variable"].
Sie finden tausende von Seiten über rsync, aber die Kombination hier haben wir nur einmal gesehen. Trotz eifrigem Suchen haben wir die Seite dann nicht wieder gefunden...
Das Kommando dient dazu, den Inhalt eines Server-Directories möglichst exakt zu kopieren
rsync -avH --delete --numeric-ids -e ssh user@server.ch:/var/www/ www/
| -a | Rekursives Kopieren mit allen Rechten |
| -v | Verbose |
| -H | Hardlinks erhalten |
| --delete | Files die im Source-Directory nicht existieren werden gelöscht |
| --numeric-ids | Die numerischen IDs kopieren, nicht anpassen |
| -e ssh | SSH als Transportmedium verwenden |
Achten Sie auf die Slashes hinter Source- und Destination-Directories. Sie sind wichtig !
Es kommt immer wieder vor dass man schnell mal ein UDP-Paket schicken soll, möglichst ohne ein Programm zu schreiben. Die folgende Zeile benutzt echo und netcat um das zu bewerkstelligen.
echo -en '\0\0' | netcat -u 192.168.1.202 5431
| -e | \0 wird als Byte 0x00 interpretiert |
| -n | Kein Newline ausgeben |
| -u | UDP als Transportmedium benutzen |
| 192.168.1.202 | IP-Adresse des Remote-Systems |
| 5431 | Portnummer auf dem Remote-System |
Die Quotes sind nötig, sonst "frisst" die Shell die Backslashes.
Bei der letzten Attacke auf das DNS haben wir die Hosts mit folgender Kommandozeile vom Server abgehalten:
iptables -A INPUT -s 80.82.65.97 -p UDP -j DROP
| -A | Zu den Filtern hinzufügen. |
| -s | Source Address |
| -p | Protokoll |
| -j | Was mit dem Paket passieren soll |
Nach einer Weile wird es mühsam, immer neue IPs mit iptables einzutragen...
Eine Google-Suche führte uns zum Blogeintrag von Benny Baumann. Den konnten wir zwar nicht direkt übernehmen, weil die Query anders codiert war, aber die Anleitung ist so gut dass wir in kurzer Zeit ein passendes Filter für unseren Fall entwickelt hatten.