Como bypassear función str_replace()?

Iniciado por Shell Root, 10 Marzo 2010, 06:51 AM

0 Miembros y 3 Visitantes están viendo este tema.

Shell Root

Supongamos que tenemos esta función:
Código (php) [Seleccionar]
<?php
  
function replace_sh($strTexto){
    echo 
str_replace(">","[No]",str_replace("<","[No]",$strTexto));//Resultado
  
}//End Function
?>


Ingresaria algo como esto...
<h1>Shell Root</h1>

El resultado seria esto:
[No]h1[No]Shell Root[No]/h1[No]

Como Fuck, se puede bypassear esa función, es una duda que tengo desde hace raton, y le pregunte a Tomi, y no me entendio... xD
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

jdc

Hace un tiempo pregunté mas o menos lo mismo en el foro de whk y al parecer sería con javascript algo como

prueba.php?var=" onclick="alert(document.cookie)" algo mas no recuerdo xD

Pero se deben cumplir ciertos requisitos al mostrar la variable, también podría ser con onload, la verdad no entendí muy bien xD

WHK

pues claro, todo depende como esté hecho el script, en que lugar pones esa función ya que así por si solo no impide xss si se encuentra dentro de un input o código javascript, etc debido a las comillas.

jdc

Como me recomendaste esa vez mejor usar htmlspecialchars con ENT_QUOTES, aún asi sí quieres joder a los h4x0rs un rato podrías revisar la variable en busca de <, >, ' y " y lanzar un mensaje de "te estoy viendo eh!" ja ja ja

Shell Root

#4
Como es una simple duda, es una funcion comun y corriente, que recibe como parametro el string para mostrarlo en la pagina, quitandole caracteres como < y >, la funcion en general es así:

Código (php) [Seleccionar]
<?php

  
function replace_sh($strTexto){
    echo 
str_replace(">","[No]",str_replace("<","[No]",$strTexto));
  }
//End Function

  
replace_sh("<h1>Shell Root</h1>");

?>


Hay forma de bypassearlo y generar un XSS?
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

jdc

Sí lo muestras derecho en la página nop, sí por ejemplo está en el value de un input o dentro de parámetros de alguna etiqueta html sip

Por ejemplo

replace_sh($var) no es vulnerable

<input type="text" value="'.replace_sh($var).'"> es vulnerable

Shell Root

#6
mmm es verdad, bastaria con esto para generar un XSS.

Código (php) [Seleccionar]
<?php

  
function replace_sh($strTexto){
    echo 
str_replace(">","[No]",str_replace("<","[No]",$strTexto));
  }
//End Function

?>


<input type="text" value="<?php replace_sh(\"\"' onClick='alert(/XSS/);'"); ?>">


Interesante!  :silbar:

Entonces, definitivamente, no se puede generar un XSS mientras no este dentro de algo.
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

WHK

y porque no usar htmlspecialchars? es nativo de php y cumple bien su función.

Ahora también hay temas relacionados con la codificación de documento como utf-7 pero eso ya es otro tema.

Shell Root

Cita de: WHK en 10 Marzo 2010, 11:07 AMy porque no usar htmlspecialchars? es nativo de php y cumple bien su función.
Simon, pero como os dije al inicio, es una duda que tengo hace raton...


Ahora que entendí como es el bypasseo de la funcion str_replace(), con caracteres < y >. Ahora lo siguiente es incluir el caracter ". Así:
Código (php) [Seleccionar]
<?php

  
function replace_sh($strTexto){
    echo 
str_replace("\"","[No]",str_replace(">","[No]",str_replace("<","[No]",$strTexto)));
  }
//End Function

?>


Ahora como seria ese bypasseo... Antes era algo así:
\"' onClick='alert(/XSS/);'

Ahora si pongo eso, el resultado seria:
[No]' onClick='alert(/XSS/);'

Que podria hacer en ese caso?
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

jdc

SQLi xD

Por sí acaso filtra la comilla simple también y los backslashes