/ / Escape von open () - Perl, Escaping, Code-Injektion

Escape von open () - Perl, entkommen, Code-Injektion

Ich bin ein Neuling in Perl, jedoch nicht im allgemeinen Programmieren. Ich habe nach Hinweisen gesucht, wie ich in Perl von open () entkommen kann, aber ich hatte kein Glück, und darum frage ich hier.

Ich habe ein:

$mailprog = "/usr/lib/sendmail";
open(MAIL,"|$mailprog -t");

read(STDIN, $buffer, 18);

print MAIL "To: xxx@xxx.xxxn";
print MAIL "From: xxx@xxx.xxxn";
print MAIL "Subject: xxxn";
print MAIL $buffer;
close (MAIL);

Gibt es eine Möglichkeit, wie ich die Eingabe in den $ Puffer umwandeln kann, um aus Sendmail zu entkommen? Die Puffereingabedauer ist beliebig. Input ist vollständig unter meiner Kontrolle. Vielen Dank für Ihre Ideen!

Antworten:

0 für die Antwort № 1

man sendmail sagt:

Standardmäßig Postfix Sendmail(1) liest eine Nachricht von der Standardeingabe bis EOF oder bis es eine Zeile mit nur a liest. Zeichen und arrangiert für die Lieferung. Postfix Sendmail(1) stützt sich auf die Postdrop(1) Befehl zum Erstellen einer Warteschlangendatei in der Mail Drop Verzeichnis.

Sie möchten also, dass Ihre Eingabe die Sequenz enthält "n.n" irgendwo.


0 für die Antwort № 2

Nur eine Sequenz ist speziell für sendmail Sobald es beginnt, den Körper zu lesen: Eine Zeile, die eine einzige enthält . signalisiert das Ende der Eingabe. (EOF macht das gleiche.)

Das bedeutet, wenn Ihre Eingabe eine Zeile enthält, die nichts als enthält .Du musst ihm entkommen. Die standardmäßige Übertragungscodierung bietet keine Möglichkeit zur Flucht, daher müssen Sie a angeben Content-Transfer-Encoding das vermeidet das Problem (z.B. base64) oder erlaubt es Ihnen, den Zeitraum zu verlassen (z. quote-printable) und kodiere den Inhalt entsprechend.


Dies bringt uns zu den Einschränkungen der Inhaltsübertragungscodierung Sie wählen Adds.

Die Standardcodierung für die Inhaltsübertragung 7bit, erfordert Zeilen mit nicht mehr als 998 Oktetten, die durch CRLF beendet werden. Diese Zeilen dürfen nur Oktette in [1.127] enthalten, und Oktette 10 und 13 dürfen nur als Teil des Zeilenabschlusses erscheinen.

Wenn die von Ihnen gewählte Inhaltsübertragungscodierung nicht geeignet ist, Ihre Eingabe zu codieren, müssen Sie eine andere auswählen.


Sie sollten wirklich etwas wie verwenden E-Mail :: Absender anstatt auf einem so niedrigen Niveau zu arbeiten.