Supongamos que tenemos esta función:
<?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
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
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.
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
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í:
<?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?
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
mmm es verdad, bastaria con esto para generar un XSS.
<?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.
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.
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í:
<?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?
SQLi xD
Por sí acaso filtra la comilla simple también y los backslashes
mmm en el caso anterior no se podria generar un XSS :rolleyes:.
Hay mucha mas formas, pero también depende el entorno y donde vayas a usarlo xD, por ejemplo...
El codigo que usas se puede usar para detener XSS vía GET, mayormente se usa peticiones POST para enviar datos a hacia la BD pero ya el XSS puede convertirse en un XSS permanente y hay diferentes forma para ejecutar XSS, por eso te digo que depende mucho el ambiente, porque puedes ejecutar javascript desde CSS, llamando archivos externo, desde body, etc...
Cita de: ~ Yoya ~ en 10 Marzo 2010, 18:00 PMHay mucha mas formas, pero también depende el entorno y donde vayas a usarlo xD, por ejemplo...
Si seguimos el entorno en el que está es el siguiente:
<input type="text" value="<?php replace_sh(\"o_O"); ?>">
El xss permanente fue lo que mas me divirtio hace años cuando nacían los libros de visitas xD la gente decía... Hacker deja de molestar por favor, ja ja ja yo lo conocí como inyección html hasta que WHK me pregunto... "y sí inyecto javascript?" xD
De todas formas siempre que quieras proteger tu página debes conocer el ataque que quieres parar, por ejemplo, como pasarías un SQLi sin saber como ejecutar uno?
Para atacar hay que saber defender y viceversa
Cita de: janito24 en 10 Marzo 2010, 07:24 AM
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
Cita de: WHK en 10 Marzo 2010, 11:07 AM
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.
hay alguna diferencia si uso htmlentities("$X",ENT_QUOTES) ?? yo lo uso en lugar de htmlspecialchars :huh:
htmlentities desarma los caracteres y se ve feo a mi gusto xD pero es cosa de gustos o depende de en que lo vayas a usar.
También ten en cuenta que no estas bypaseando la función str_replace(), si no los parámetros...
Si alguna vez logran bypassearlo no estarán bypasseando la función php str_replace(), si no los parámetros que le indicaste.
Perdón un error, no es que una sea mas bonita o mas fea, ambas funciones trabajan de igual forma, juntas muestran los caracteres de cada carácter xD la diferencia es que htmlentities transforma todas las entidades html incluyendo por ejemplo las letras con acentos, mientras htmlspecialchars sólo con por ejemplo < y >
Sí quieren ver como funcionan ambas pues http://www.holamundo.cl/index.php?zona=xss-me
El diseño está pensado para celulares asi que no le pidan mas xD
janito, tu web tiene xss :P
'"><h1>test
xss-me u otra página? Sí es en esa no necesitas la primera comilla xD de echo basta con <h1>test
Está bajo control xD
Se olvidaron de mi duda... :P
Cita de: tooRllehS@xelA en 10 Marzo 2010, 17:29 PMAhora que entendí como es el bypasseo de la funcion str_replace(), con caracteres < y >. Ahora lo siguiente es incluir el caracter ". Así:
<?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?
Pues mmm, habría que pensar un poquito mas xD
filtra todas la comillas simples y dobles... Desactiva Magic_Quote_GPC
si quieres filtrar " ' < > mejor usa htmlspecialchars que hace lo mismo pero en ves de ponerle [no] le pone su valor equivalente en htmlentities.
Cita de: WHK en 11 Marzo 2010, 00:28 AMsi quieres filtrar " ' < > mejor usa htmlspecialchars que hace lo mismo pero en ves de ponerle [no] le pone su valor equivalente en htmlentities.
Por su pollo, pero lo digo por 2da vez, es un ejemplo y una duda que tengo. Ahora si le hago un
str_replace a la comilla doble, como hago para generar un XSS, o ahi si seria completamente imposible. Sin olvidar el entorno en el que estoy...
Al fin y al cabo acabaras haciendo lo mismo con htmlentities, recuerda que estas bypasseando el parámetro que le indicas, y dudo que algúna persona use los mismo parámetros, mejor usan una función nativa de php...
Cita de: janito24 en 10 Marzo 2010, 22:17 PM
Perdón un error, no es que una sea mas bonita o mas fea, ambas funciones trabajan de igual forma, juntas muestran los caracteres de cada carácter xD la diferencia es que htmlentities transforma todas las entidades html incluyendo por ejemplo las letras con acentos, mientras htmlspecialchars sólo con por ejemplo < y >
Sí quieren ver como funcionan ambas pues http://www.holamundo.cl/index.php?zona=xss-me
El diseño está pensado para celulares asi que no le pidan mas xD
Mira revisa la pagina otra vez, puse tu funcion como la pusiste al principio, luego quitando solo la ' y luego solo la "
Intenta poner: " onmouseover="alert(document.cookie);" x=" y luego pasa el raton por encima de los text en blanco ;)
En teoria segun eso con bloquear la " es suficiente pero yo bloquearia ambas xD lo dicho, usa htmlspecialchars($var,ENT_QUOTES) :xD