Ciao,
ho un sito con Joomla 3.5 con alcuni addon quali jdownloads, community builder, ed altri.
Ho notato nei log stringhe come queste:
[tt]<ip> - - [30/Apr/2016:06:03:37 +0200] "GET /component/content/article.html?id=1655+or+1=(%2f**%2fsElEcT+1+%2f**%2ffRoM(%2f**%2fsElEcT+count(*),%2f**%2fcOnCaT((%2f**%2fsElEcT(%2f**%2fsElEcT(%2f**%2fsElEcT+%2f**%2fcOnCaT(0x217e21,count(*),0x217e21)+%2f**%2ffRoM+parkinson34.jml_jdownloads_files_backup))+%2f**%2ffRoM+information_schema.%2f**%2ftAbLeS+%2f**%2flImIt+0,1),floor(rand(0)*2))x+%2f**%2ffRoM+information_schema.%2f**%2ftAbLeS+%2f**%2fgRoUp%2f**%2fbY+x)a)+and+1=1 HTTP/1.1" 500 2278 "[url=http://www.parkinson.it/component/content/article.html?id=1655+or+1=(%2f]http://www.sito.it/component/content/article.html?id=1655+or+1=(%2f[/url]**%2fsElEcT+1+%2f**%2ffRoM(%2f**%2fsElEcT+count(*),%2f**%2fcOnCaT((%2f**%2fsElEcT(%2f**%2fsElEcT(%2f**%2fsElEcT+%2f**%2fcOnCaT(0x217e21,count(*),0x217e21)+%2f**%2ffRoM+parkinson34.jml_jdownloads_files_backup))+%2f**%2ffRoM+information_schema.%2f**%2ftAbLeS+%2f**%2flImIt+0,1),floor(rand(0)*2))x+%2f**%2ffRoM+information_schema.%2f**%2ftAbLeS+%2f**%2fgRoUp%2f**%2fbY+x)a)+and+1=1" "Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-PT; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)"
[/tt]
Mi sono sono rizzate le antenne, perché poi funziona anche!
[tt][size=1em]1062Duplicate entry '!~!185!~!1' for key 'group_key' SQL=SELECT catid FROM #__content AS c WHERE [url=http://c.id]c.id[/url] = 1655 or 1=(/**/sElEcT 1 /**/fRoM(/**/sElEcT count(*),/**/cOnCaT((/**/[/size][size=1em]sElEcT(/**/sElEcT(/**/sElEcT /**/cOnCaT(0x217e21,count(*),[/size][size=1em]0x217e21) /**/fRoM parkinson34.#__jdownloads_[/size][size=1em]files_backup)) /**/fRoM information_schema./**/tAbLeS /**/lImIt 0,1),floor(rand(0)*2))x /**/fRoM information_schema./**/tAbLeS /**/gRoUp/**/bY x)a) and 1=1 LIMIT 1 [/size][/tt]
Parrebbe un problema di controllo dell'input da qualche parte, che non ho ancora individuato con precisione.
Per esempio in components/com_content/router.php intorno alla riga 530
$db = JFactory::getDbo();
$query = $db->getQuery(true)
->select($db->quoteName('id'))
->from('#__content')
->where($db->quoteName('catid') . ' = ' . (int) $vars['catid'])
->where($db->quoteName('alias') . ' = ' . $db->quote($segment));
$db->setQuery($query);
$cid = $db->loadResult();
non conosco bene Joomla e spero che il metodo $db->quote() esegua anche l'escape della stringa alla stessa stregua di mysqi_real_escape_string(), altrimenti ci sono problemi.
Per gli altri tipi di input via id viene semplicemente effettuato un cast ad integer ((int) $vars['catid']), magari da qualche parte se ne sono dimenticati.
Resta il fatto che il buco di sicurezza va chiuso.
Bye,
Gianluca