Mail Header Injectie

Uit Byte Docs

PHP Mail Header Injectie

Wat is het en hoe kom ik er vanaf?

Er zijn helaas veel manieren om anonieme mail te versturen. Één daarvan is misbruik te maken van PHP scripts. Sommige scripts bevatten de mail() functie om de headers voor uitgaande mail aan te passen. Deze mail zal, eenmaal verzonden, als afzender het adres (IP) van de webserver bevatten en geen enkel spoor van het IP van de misbruiker. De invoervelden van een dergelijk script variëreren, maar vaak is het mogelijk om in ieder geval het subject, het bericht en het adres van de afzender op te geven.

De meeste webmasters zetten het ontvanger (recipient) adres hardcoded in hun script, om er zeker van te zijn dat er niet naar andere adressen verzonden kan worden. Daar blijken ze toch niet altijd gelijk in te hebben...

<?php
$to="webmaster@website.com";
if (!isset($_POST["send"])){
 // no post data -> display form
 ?>
 <form method="POST" action="<?=$_SERVER['PHP_SELF'];?>">
 To: webmaster@website.com
 From: <input type="text" name="sender">
 Subject : <input type="text" name="subject">
 Bericht :
 <textarea name="message" rows="10" cols="60" lines="20"></textarea>
 <input type="submit" name="send" value="Send">
 </form>
 <?
}else{
  // post data gevonden
  $from=$_POST['sender'];
  // stuur mail :
  if(mail($to,$_POST['subject'],$_POST['message'],"From: $from\n")){
    echo "Uw mail was inderdaad verzonden aan $to.";
 }else{
   // sending failed, display error message
    echo "Uw mail kon niet worden verzonden!";
   }
 }
 ?>


In dit voorbeeld is de ontvanger in het script gedefinieerd. De subject, from en bericht kunnen worden opgegeven.

Gebruik van de mail() functie

Deze functie, op de volgende manier aangeroepen:

<?php mail($recipient,$subject,$message,$headers); ?>
</code>
zal de volgende output genereren:
<code>
To: $recipient
Subject: $subject
$headers
 
$message

Als de functie dus ZO wordt aangeroepen:

<?php mail("recipient@victim.xxx","Hello",
"Hi,\nYour site is great.\nBye",
"From: sender@anonymous.xxx\n"); ?>
</code>
zal de output er dus ZO uitzien:
<code>
To: recipient@victim.xxx
Subject: Hello
From: sender@anonymous.xxx
 
Hi,
Your site is great.
Bye

Als de functie wordt aangeroepen met de volgende waarde voor Sender (op 1 regel):

sender@anonymous.www%0ACc:recipient@someothersite.xxx%
 0ABcc:somebloke@grrrr.xxx,someotherbloke@oooops.xxx

..zal de output er zo uit zien...

To: recipient@victim.xxx
Subject: ahem
From: sender@anonymous.xxx
Cc:recipient@someothersite.xxx
Bcc:somebloke@grrrr.xxx,someotherbloke@oooops.xxx

My Message...

Ander misbruik, zoals het invoeren van Mime headers, is ook mogelijk (alles op 1 regel):

haxor@attack.com%0AContent-Type:multipart/mixed;%
 20boundary=frog;%0A--frog%0AContent-Type:text/html%0A%0A
 My%20Message.%0A--frog--

..wordt..

To: recip@ient.xxx
Subject: Visit www.website.xxx !
From: haxor@attack.xxx
Content-Type:multipart/mixed; boundary=frog;
--frog
Content-Type:text/html

My Message.
--frog--

Hello,
A friend thought you might want to see this page : www.website.xxx.
Bye Bye

Advies

Zorg er dus voor dat u alle invoer van uw script filtert op hexadecimale tekens en linefeeds (0x0a of \n tekens).

De huidige waardering is: 39/100 (3 stemmen)
 You need to enable JavaScript to vote
  • Deze pagina is het laatst bewerkt op 29 nov 2011 om 13:06.
  • Deze pagina is 567 keer bekeken.

We proberen de kwaliteit van onze kennisbank voortdurend te verbeteren.
Geef de informatie op deze pagina een waardering met de slider hierboven.