http://www.webmaster-toolkit.com/dns-query.shtml?address=%0Als
%0A ist ein Zeilenumbruch als Hexadezimalzeichen. Die Zeichen ;|`&$()"\* können bei diesem Skript nicht verwendet werden weil sie rausgefiltert werden. Das bedeutet, daß viele Funktionen der Shell nur eingeschränkt oder überhaupt nicht verfügbar sind. Datenbank-Abfragen mit dem mysql-Clienten über den Parameter -e sind so beispielweise nicht möglich.
Das kann man aber umgehen ohne eine zusätzliche Shell auf den Server zu laden oder sonst irgendwelche Veränderungen am System vorzunehmen. Wir können den php-Interpreter aufrufen und haben Leserechte für die Datei "/proc/self/environ". Mehr braucht man nicht.
Als erstes installieren wir im Firefox den User Agent Switcher. Der erlaubt es uns einen beliebigen Browser vorzutäuschen.
Jetzt erstellen wir damit einen neuen Browser und schreiben in das Feld "User-Agent" unseren php-Code.
Beispiel:
<? system("ls /*); ?>
Jetzt wählen wir den neu erstellten Browser aus und geben folgendes ein:
http://www.webmaster-toolkit.com/dns-query.shtml?address=%0Aphp%20/proc/self/environ
Der php-Code mit dem Shell-Befehl wird jetzt ausgeführt.
Damit haben wir eine voll funktionstüchtige Shell ohne das bestimmte Zeichen herausgefiltert werden.
Man kann natürlich auch einen ganz anderen php-Code nehmen um zum Beispiel eine Reverse-Shell mit Netcat zu bekommen.
Habe das jetzt aber nicht getestet.