Vkládání e-mailu je technika útoku používaná ke zneužití poštovních serverů a poštovních aplikací, které vytvářejí výrazy IMAP/SMTP z uživatelského vstupu, který není řádně ověřen. V závislosti na typu operátorů používaných útočníkem existují dva typy injekcí: IMAP injection a SMTP injection .
Injekce IMAP / SMTP umožňují přístup k poštovnímu serveru, který dříve nebyl přístupný. V některých případech tyto interní systémy nemají stejnou úroveň zabezpečení jako zbytek infrastruktury. Tímto způsobem mohou útočníci zjistit, že poštovní server poskytuje nejlepší výsledky z hlediska zneužití. Tato metoda se vyhýbá možným omezením, která mohou existovat na úrovni aplikace ( CAPTCHA , maximální počet zásahů atd.).
Typická struktura injekce IMAP/SMTP je následující:
Hlavička: konec očekávaného příkazu Tělo: injekce nových příkazů Zápatí: začátek očekávaného příkazuJe důležité si uvědomit, že aby mohly být provedeny příkazy IMAP/SMTP, musí být předchozí příkazy ukončeny sekvencí CRLF (%0d%0a).
Některé příklady útoků využívajících techniku vkládání IMAP/SMTP jsou:
Vkládání IMAP Protože vkládání probíhá na serveru IMAP, musí být respektován formát a specifikace tohoto protokolu. Poštovní aplikace obvykle komunikují se serverem IMAP, aby ve většině případů vykonávaly své funkce, a jsou proto vůči tomuto typu útoku zranitelnější.
Podívejme se na příklad injekce IMAP pomocí funkce čtení zpráv. Předpokládejme, že aplikace používá parametr webové pošty „message_id“ k uložení id zpráv, které si uživatel přeje číst. Když je odeslán požadavek obsahující ID zprávy, bude vypadat takto:
http://<webmail>/read_email.php? message_id = <číslo>Předpokládejme, že php skript "read_email.php", zodpovědný za zobrazení zprávy s ním spojené, odešle požadavek na IMAP server, aniž by provedl jakoukoli kontrolu hodnoty <číslo> určené uživatelem. Příkaz odeslaný na poštovní server bude vypadat takto:
FETCH <number> BODY[HEADER]
Z tohoto důvodu by se útočník mohl pokusit o útok IMAP prostřednictvím parametru „message_id“, který aplikace používá ke komunikaci se serverem. Například příkaz IMAP "CAPABILITY" lze zadat pomocí následující sekvence:
http://<webmail>/read_email.php?message_id=1 BODY[HEADER]%0d%0aV001 SCHOPNOST%0d%0aV002 NAČÍST 1Tím se na serveru vydá následující sekvence příkazů IMAP:
???? NAČÍST 1 TĚLO[HEADER] V001 SCHOPNOST V002 NAČÍST 1 TĚLO[HEADER]kde:
Záhlaví = 1 TĚLO[HEADER] Tělo = %0d%0aV100 CAPABILITY%0d%0a Zápatí = V101 FETCH 1Vkládání SMTP Protože vkládání příkazů se provádí pod serverem SMTP, musí být respektován formát a specifikace tohoto protokolu. Z důvodu omezení provozu aplikací využívajících protokol SMTP jsme omezeni především na odesílání emailů. Použití injekce SMTP vyžaduje, aby byl uživatel předtím autentizován, takže je nutné, aby útočník měl platnou webovou poštu.
Předpokládejme, že e-mailová aplikace omezuje počet e-mailů odeslaných ve vybraném časovém období. Injekce SMTP vám umožní obejít toto omezení jednoduchým přidáním příkazů RCPT jako pokynů v množství, které útočník chce:
POST http://<webmail>/compose.php HTTP/1.1 -----------------------------134475172700422922879687252 Obsah-Dispozice: formulář-data; name="předmět" test . POŠTA OD: [email protected] RCPT TO: [email protected] RCPT TO: [email protected] RCPT TO: [email protected] RCPT TO: [email protected] Data Toto je příklad útoku SMTP Injection . -----------------------------134475172700422922879687252 ...Tím se vygeneruje následující sekvence příkazů SMTP, které budou odeslány na poštovní server:
MAIL FROM: <mailfrom> RCPT TO: <rcptto> DATA Předmět: test . POŠTA OD: [email protected] RCPT TO: [email protected] RCPT TO: [email protected] RCPT TO: [email protected] RCPT TO: [email protected] DATA Toto je příklad útoku SMTP Injection . ...