Ho trovato due vulnerabilità nel mio sito del college e voglio segnalarle ma non so se queste sono "veramente" vulnerabilità:
- RFI all'interno del file SWF.
Esempio: https://www.site.com/opis.swf?sTitle=Vulnerable&sDesc=Again vulnerable&sPrice=Vulnerable&sCoverFront=http://www.neurosciencemarketing.com/blog/wp-content/photos/smiley1.jpg&sCoverBack=http://www.neurosciencemarketing.com/blog/wp-content/photos/smiley1.jpg&sBuyLink=http://www.google.com&sPath=http://www.neurosciencemarketing.com/blog/wp-content/photos/smiley1.jpg
Come puoi vedere sTitle e sDesc sono valori di testo, sCoverFront e sCoverBack sono .jpg, sBuyLink è url di reindirizzamento (le mie idee sono vettori XSS: data: text / html, alert (document.cookie)) e sPath sembra essere url per video m4u. Scelta dell'utilità swf:
Esempio: http://site.com/static/Covers.htm?b=http://www.stringfunction.com/img/url-encode-url-decode.jpg&f=http://www.stringfunction.com/img/url-encode-url-decode.jpg
E qui c'è il codice per le impostazioni di src:
<body onload="resizeToCovers()"><div id="resizer"></div>
<table cellspacing="0" cellpadding="0"><tr><td><img src="" id="frontBoxCover" /></td><td><img src="" id="backBoxCover" /></td></tr></table>
<script type="text/javascript">
var boxFront;
var boxBack;
boxFront = document.getElementById("frontBoxCover");
boxBack = document.getElementById("backBoxCover");
var qs = new Querystring();
var newF = qs.get('f','');
boxFront.src = newF;
var newB = qs.get('b', '');
if(newB == ''){
boxBack.style.displayFormat = "none";
}
boxBack.src = newB;
</script>
E per Querystring:
/* Client-side access to querystring name=value pairs
Version 1.2.3
22 Jun 2005
Adam Vandenberg
*/
function Querystring(qs) { // optionally pass a querystring to parse
this.params = new Object()
this.get=Querystring_get
if (qs == null)
qs=location.search.substring(1,location.search.length)
if (qs.length == 0) return;
// Turn <plus> back to <space>
// See: http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.4.1
qs = qs.replace(/\+/g, ' ')
var args = qs.split('&') // parse out name/value pairs separated via &
// split out each name=value pair
for (var i=0;i<args.length;i++) {
var value;
var pair = args[i].split('=')
var name = unescape(pair[0])
if (pair.length == 2)
value = unescape(pair[1])
else
value = name
this.params[name] = value
}
}
function Querystring_get(key, default_) {
// This silly looking line changes UNDEFINED to NULL
if (default_ == null) default_ = null;
var value=this.params[key]
if (value==null) value=default_;
return value;
}
Ci sono dei voln in questi, valgono la pena di riferire. Grazie.