Eine der Hauptarbeiten die in Zukunft angestanden wären, ist das Anpassen des Parsers an neue RFI Angriffe. Der alte Parser suchte, vereinfacht gesagt nach einem “echo” Aufrufe, analysierte diesen per Reguläre Ausdrücke und generierte eine passende Antwort. Das Warten dieser Herangehensweise ist sehr aufwendig, besonders wenn die Echos in einer Funktion gepackt werden. Um die Arbeit deutlich zu vereinfachen, möchte ich den neuen Parser so weit entwickeln, dass ich weitestgehend ohne Verwendung von vordefinierten Patterns auskomme.
Der erste Schritt in diese Richtung ist geschafft, der neue Parser ist in der Lage Funktionen zu erkennen und diese auf Ausgaben zu untersuchen. Bedeutet, findet er eine Funktion die Echos enthält, werden die Funktionsaufrufe auf bekannte Muster untersucht und die Antwort für den Angreifer generiert.
Pseudo Beispiel:
if "function fu(bar)" in line:
store function into functionlist
for function in functionlist:
if "echo" in function:
function = "echofunction"
for line in injected_file:
if name_of_function in line:
sent the line to the echo_parser
Okay, nun haben wir quasi alle Zeilen in einer Datei die potentiell etwas ausgeben. Einmal gewöhnliche Echos:
<?php echo "Glaslos was here..."; ?>
Und Echos die über einen Funktionsaufruf erstellt werden:
<?php
function echothis($e) {echo "$e";}
echothis("Glaslos was here...");
?>
Haben wir nun ein Echo folgender Form:
<?php
$xyz = get_xyz_from_system();
echo "xyz: $xyz<br />";
?>
müssen wir wissen, was get_xyz_from_system() ausgibt. Bisher habe ich xyz: mit bekannten Mustern verglichen und dann $xyz durch Werte ersetzt. Hier setzt nun die kommende Arbeit an: Sämtliche Aufrufe der Form get_xyz_from_system() müssen behandelt werden und an der richtigen Stelle der Antwort stehen. Hierfür gilt es die Variablen Definition und ihre spätere Verwendung zu erfassen und zu verarbeiten.