Gracias Me Han Hakeado My Web Varias Veces Aver Si Logro Repararla Ahora Con esta Info =)!
Le preguntas a Skillmax?, Ni sabrá hacerlo. ¿Como va a tratar de arreglar algo que no sabe porque ocurre? Me remito a:
Sin acritud,
Por otro lado, ¿Solucionar todas las inyecciones en tu web? Algo más de seriedad Skillmax, tu falta de información me causa...El fallo es sencillisimo:
Code:
SELECT * FROM
El fallo de este codigo es el "*" que por ese pego alguien puede aplastar tu web.
Sin acritud,
PGP - https://keyserver2.pgp.com/vkd/DownloadKey.event?keyid=0x9A1286E0DF1FF2A1
Prablinha, generador de botnets OpenSource - http://www.indetectables.net/foro/viewtopic.php?f=7&t=29086
Mis artículos & proyectos - http://itsm3.com/
Prablinha, generador de botnets OpenSource - http://www.indetectables.net/foro/viewtopic.php?f=7&t=29086
Mis artículos & proyectos - http://itsm3.com/
La convierte a entero porque si entra una cadena quedas vulnerable a una inyección sql, osea... Si meten un algo')-- ya con esto quedarías vulnerable a una inyección, jeje pero si la conviertes a entero y luego la tratas como cadena ya no importa si la tratas como cadena porque este entero ya no se vuelve a convertir a una cadena simplemente pasa como número y si la tratas como cadena pues vendría siendo lo mismo jeje :P y si el parametro id tendría que ser una string en vez de un entero tendrías que reemplazar los carácteres especiales de las instrucciones mysql, jeje pero por eso es mucho mejor siempre que tengas una BD, pasar los ID's como enteros, por eso en la mayoría de los sistemas se usa el ID como int(11), key, auto increment fácilita mucho las cosas al momento de buscar un id y trabajar con él.TheSur escribió:¿Para que parseas a entero la entrada si luego en el motor sql la tratas como cadena?. Si el parámetro 'id' fuera un string en vez de un entero, ¿tambien lo parsearias a entero? ..Skillmax escribió:topcat, será algún fallo en la visión, pero donde se utiliza * aquí estamos utilizando:
Este codigo no permite la entradas tipo "noticias?id=123"Código: Seleccionar todo
$id = (int)$_GET['id']; $query = mysql_query( "SELECT * FROM noticias WHERE id = '$id'");
Te equivocas, está inyección para nada a quedado obsoleta y aún la sigo viendo, lo de javascript y php, ya lo sabemos, no es nada nuevo amigo, ahora mi pregunta es, ¿Qué fallos ves?, me interesaria que me lo dijeras, para asin solucionarlo.
Para evitar RFI estamos usando str_replace, asin que lo que tú dices es lo que está puesto, es cuestión de fijarse.
Código: Seleccionar todo
$archivo = str_replace(".","",str_replace("http","",$_GET['archivo'])); if(!file_exists($archivo)) { die("El archivo no existe"); } include("./".$archivo.".php");
//mHmm..
Pues va a ser que te equivocaslinkgl escribió:La convierte a entero porque si entra una cadena quedas vulnerable a una inyección sql, osea... Si meten un algo')-- ya con esto quedarías vulnerable a una inyección, jeje pero si la conviertes a entero y luego la tratas como cadena ya no importa si la tratas como cadena porque este entero ya no se vuelve a convertir a una cadena simplemente pasa como número y si la tratas como cadena pues vendría siendo lo mismo jeje :P y si el parametro id tendría que ser una string en vez de un entero tendrías que reemplazar los carácteres especiales de las instrucciones mysql, jeje pero por eso es mucho mejor siempre que tengas una BD, pasar los ID's como enteros, por eso en la mayoría de los sistemas se usa el ID como int(11), key, auto increment fácilita mucho las cosas al momento de buscar un id y trabajar con él.TheSur escribió:¿Para que parseas a entero la entrada si luego en el motor sql la tratas como cadena?. Si el parámetro 'id' fuera un string en vez de un entero, ¿tambien lo parsearias a entero? ..Skillmax escribió:topcat, será algún fallo en la visión, pero donde se utiliza * aquí estamos utilizando:
Este codigo no permite la entradas tipo "noticias?id=123"Código: Seleccionar todo
$id = (int)$_GET['id']; $query = mysql_query( "SELECT * FROM noticias WHERE id = '$id'");
Te equivocas, está inyección para nada a quedado obsoleta y aún la sigo viendo, lo de javascript y php, ya lo sabemos, no es nada nuevo amigo, ahora mi pregunta es, ¿Qué fallos ves?, me interesaria que me lo dijeras, para asin solucionarlo.
Para evitar RFI estamos usando str_replace, asin que lo que tú dices es lo que está puesto, es cuestión de fijarse.
Código: Seleccionar todo
$archivo = str_replace(".","",str_replace("http","",$_GET['archivo'])); if(!file_exists($archivo)) { die("El archivo no existe"); } include("./".$archivo.".php");
PGP - https://keyserver2.pgp.com/vkd/DownloadKey.event?keyid=0x9A1286E0DF1FF2A1
Prablinha, generador de botnets OpenSource - http://www.indetectables.net/foro/viewtopic.php?f=7&t=29086
Mis artículos & proyectos - http://itsm3.com/
Prablinha, generador de botnets OpenSource - http://www.indetectables.net/foro/viewtopic.php?f=7&t=29086
Mis artículos & proyectos - http://itsm3.com/
x) porqué lo dices?, al convertir todas las entradas a enteros evitas caracteres, por ende evitas inyecciones, aunque la mejor manera de filtrar no es convertir lo que llega a enteros, si no validar que sea un número, pero de ambas formas se puede parchear ese GET, y como te digo si yo pongo url.algo?a=' este ' se me convierte a entero (int) por ende si trato su valor ascii como cadena ya no pasa nada :PTheSur escribió:Pues va a ser que te equivocaslinkgl escribió:La convierte a entero porque si entra una cadena quedas vulnerable a una inyección sql, osea... Si meten un algo')-- ya con esto quedarías vulnerable a una inyección, jeje pero si la conviertes a entero y luego la tratas como cadena ya no importa si la tratas como cadena porque este entero ya no se vuelve a convertir a una cadena simplemente pasa como número y si la tratas como cadena pues vendría siendo lo mismo jeje :P y si el parametro id tendría que ser una string en vez de un entero tendrías que reemplazar los carácteres especiales de las instrucciones mysql, jeje pero por eso es mucho mejor siempre que tengas una BD, pasar los ID's como enteros, por eso en la mayoría de los sistemas se usa el ID como int(11), key, auto increment fácilita mucho las cosas al momento de buscar un id y trabajar con él.TheSur escribió:¿Para que parseas a entero la entrada si luego en el motor sql la tratas como cadena?. Si el parámetro 'id' fuera un string en vez de un entero, ¿tambien lo parsearias a entero? ..Skillmax escribió:topcat, será algún fallo en la visión, pero donde se utiliza * aquí estamos utilizando:
Este codigo no permite la entradas tipo "noticias?id=123"Código: Seleccionar todo
$id = (int)$_GET['id']; $query = mysql_query( "SELECT * FROM noticias WHERE id = '$id'");
Te equivocas, está inyección para nada a quedado obsoleta y aún la sigo viendo, lo de javascript y php, ya lo sabemos, no es nada nuevo amigo, ahora mi pregunta es, ¿Qué fallos ves?, me interesaria que me lo dijeras, para asin solucionarlo.
Para evitar RFI estamos usando str_replace, asin que lo que tú dices es lo que está puesto, es cuestión de fijarse.
Código: Seleccionar todo
$archivo = str_replace(".","",str_replace("http","",$_GET['archivo'])); if(!file_exists($archivo)) { die("El archivo no existe"); } include("./".$archivo.".php");
//mHmm..
¿Hablas de oídas o realmente crees que eso se hace así?. Si el campo de la base de datos sobre (el cual se va a utilizar en la clausula WHERE) está declarado como string, dime para que quieres convertir el valor que recibe la aplicación web a entero. Además de que no tiene sentido, a no ser que el campo string que está declarado en la base de datos almacene números. En este caso, sería aun peor, ya que además de no tener claro como realizar un adecuado filtrado de inyecciones SQL, tiene una ausencia casi total de diseño de estructuras en bases de datos.linkgl escribió:x) porqué lo dices?, al convertir todas las entradas a enteros evitas caracteres, por ende evitas inyecciones, aunque la mejor manera de filtrar no es convertir lo que llega a enteros, si no validar que sea un número, pero de ambas formas se puede parchear ese GET, y como te digo si yo pongo url.algo?a=' este ' se me convierte a entero (int) por ende si trato su valor ascii como cadena ya no pasa nada :PTheSur escribió:Pues va a ser que te equivocaslinkgl escribió:La convierte a entero porque si entra una cadena quedas vulnerable a una inyección sql, osea... Si meten un algo')-- ya con esto quedarías vulnerable a una inyección, jeje pero si la conviertes a entero y luego la tratas como cadena ya no importa si la tratas como cadena porque este entero ya no se vuelve a convertir a una cadena simplemente pasa como número y si la tratas como cadena pues vendría siendo lo mismo jeje :P y si el parametro id tendría que ser una string en vez de un entero tendrías que reemplazar los carácteres especiales de las instrucciones mysql, jeje pero por eso es mucho mejor siempre que tengas una BD, pasar los ID's como enteros, por eso en la mayoría de los sistemas se usa el ID como int(11), key, auto increment fácilita mucho las cosas al momento de buscar un id y trabajar con él.TheSur escribió:¿Para que parseas a entero la entrada si luego en el motor sql la tratas como cadena?. Si el parámetro 'id' fuera un string en vez de un entero, ¿tambien lo parsearias a entero? ..Skillmax escribió:topcat, será algún fallo en la visión, pero donde se utiliza * aquí estamos utilizando:
Este codigo no permite la entradas tipo "noticias?id=123"Código: Seleccionar todo
$id = (int)$_GET['id']; $query = mysql_query( "SELECT * FROM noticias WHERE id = '$id'");
Te equivocas, está inyección para nada a quedado obsoleta y aún la sigo viendo, lo de javascript y php, ya lo sabemos, no es nada nuevo amigo, ahora mi pregunta es, ¿Qué fallos ves?, me interesaria que me lo dijeras, para asin solucionarlo.
Para evitar RFI estamos usando str_replace, asin que lo que tú dices es lo que está puesto, es cuestión de fijarse.
Código: Seleccionar todo
$archivo = str_replace(".","",str_replace("http","",$_GET['archivo'])); if(!file_exists($archivo)) { die("El archivo no existe"); } include("./".$archivo.".php");
Sin acritud,
PGP - https://keyserver2.pgp.com/vkd/DownloadKey.event?keyid=0x9A1286E0DF1FF2A1
Prablinha, generador de botnets OpenSource - http://www.indetectables.net/foro/viewtopic.php?f=7&t=29086
Mis artículos & proyectos - http://itsm3.com/
Prablinha, generador de botnets OpenSource - http://www.indetectables.net/foro/viewtopic.php?f=7&t=29086
Mis artículos & proyectos - http://itsm3.com/
Ya va, pues resulta que estas mal, parece que no te tomas la libertad de leer la respuesta entera... Mira si necesitas obtener un ID de determinado campo en la base de datos, y si no filtras lo que se pase por GET vas a ser vulnerable, si tienes declarada como string el campo en la base de datos (varchar, longtext o como quiera que tengas declarado el tipo de datos de ese campo) si los ID's que tienes son N-M-E-R-I-C-O-S Le tienes que hacer un (int) a lo que se pase por get y despues tratarlo como el tipo de datos que tienes declarado en la BD, si skillmax esta haciendolo de esa forma por ende debemos deducir que lo que quiere obtener es un ID NUMERICO que está almacenado en un campo tipo varchar o similar, y para esto debes filtrar el entero y la mejor forma de hacerlo es convertir cualquier numero a entero, o filtrarlo para que sea entero, ahora si te preguntas para que meterias un entero en un campo tipo string eso ya es especular, el programador puede necesitar meter ids numericos y de texto pero si alguien te muestra que intenta filtrar un entero en un campo tipo string debes tener una capacidad DEDUCTIVA para saber como hacerlo pero arriba también te lo mencioné pero reitero lee la respuesta completa...
Te he dicho que si necesitas sacar un ID tipo string necesitas filtrar los caracteres especiales, el tipo de campo que utilices en la base de datos es irrelevante, porque no sabes CUAL es la necesidad de todo programador yo puedo necesitar meter enteros y cadenas en un campo y para esto puedo hacer un campo tipo varchar y ahí meterlos
Pero bueno lo que tu estas haciendo es presumir que el campo esta definido como tipo string y que dentro de ese campo SOLO hay cadenas de textos y no numeros que necesitan tratarse como cadenas de texto y por eso dices que no tiene sentido, pues no se trata de adivinar que tipo de campo tienes en tu bd si no aprender o intentar enseñar como puedes filtrar un campo para admitir solo enteros y no caracteres especiales o si es necesario meter strings como evitar caracteres especiales (cosa que tambien esta en este mismo post)
No vayas a tomar la respuesta como algo agresivo, como suele suceder, solo es un comentario amor y paz
Te he dicho que si necesitas sacar un ID tipo string necesitas filtrar los caracteres especiales, el tipo de campo que utilices en la base de datos es irrelevante, porque no sabes CUAL es la necesidad de todo programador yo puedo necesitar meter enteros y cadenas en un campo y para esto puedo hacer un campo tipo varchar y ahí meterlos
Pero bueno lo que tu estas haciendo es presumir que el campo esta definido como tipo string y que dentro de ese campo SOLO hay cadenas de textos y no numeros que necesitan tratarse como cadenas de texto y por eso dices que no tiene sentido, pues no se trata de adivinar que tipo de campo tienes en tu bd si no aprender o intentar enseñar como puedes filtrar un campo para admitir solo enteros y no caracteres especiales o si es necesario meter strings como evitar caracteres especiales (cosa que tambien esta en este mismo post)
No vayas a tomar la respuesta como algo agresivo, como suele suceder, solo es un comentario amor y paz
//mHmm..
Por GET, POST o cualquier tipo de entrada de datos, ¿no?linkgl escribió:Ya va, pues resulta que estas mal, parece que no te tomas la libertad de leer la respuesta entera... Mira si necesitas obtener un ID de determinado campo en la base de datos, y si no filtras lo que se pase por GET vas a ser vulnerable
¿Y si el tipo de dato está declarado como string y no almacena números?, puede almacenar palabras (Ejpl: Nombres). ¿También los parseas a numéricos?. Me gustaría saber que valor tiene el string linkgl al parsearlo a integer... Debe ser como sentirse apuntando a un puntero a null.linkgl escribió:si tienes declarada como string el campo en la base de datos (varchar, longtext o como quiera que tengas declarado el tipo de datos de ese campo) si los ID's que tienes son N-M-E-R-I-C-O-S Le tienes que hacer un (int) a lo que se pase por get y despues tratarlo como el tipo de datos que tienes declarado en la BD
Poca credibilidad me da alguien como skillmax que dice que 'SELECT * FROM' es una sentencia SQL vulnerable. Muestra un desconocimiento total de base. Ni siquiera sabe formar una consulta SQL correcta.linkgl escribió:si skillmax esta haciendolo de esa forma por ende debemos deducir que lo que quiere obtener es un ID NUMERICO que está almacenado en un campo tipo varchar o similar
Te vuelvo a responder. El artista que diseña una base de datos así no tiene mucha idea de lo que hace. Además, es una tarea que no debería depender del programador sino de un analista.linkgl escribió:no sabes CUAL es la necesidad de todo programador yo puedo necesitar meter enteros y cadenas en un campo y para esto puedo hacer un campo tipo varchar
No soy yo quién presupone eso. Es Skillmax (y parece que tu también), que es quien dice que para evitar 'todas las inyecciones web' basta con, en inyecciones SQL, utilizar este filtrado:linkgl escribió:Pero bueno lo que tu estas haciendo es presumir que el campo esta definido como tipo string y que dentro de ese campo SOLO hay cadenas de textos y no numeros que necesitan tratarse como cadenas de texto
Código: Seleccionar todo
$id = (int)$_GET['id'];
$query = mysql_query( "SELECT * FROM noticias WHERE id = '$id'");
PGP - https://keyserver2.pgp.com/vkd/DownloadKey.event?keyid=0x9A1286E0DF1FF2A1
Prablinha, generador de botnets OpenSource - http://www.indetectables.net/foro/viewtopic.php?f=7&t=29086
Mis artículos & proyectos - http://itsm3.com/
Prablinha, generador de botnets OpenSource - http://www.indetectables.net/foro/viewtopic.php?f=7&t=29086
Mis artículos & proyectos - http://itsm3.com/
Sí, está claro esoPor GET, POST o cualquier tipo de entrada de datos, ¿no?
Es lo que yo te he mencionado arriba, indistintamente de como esté definido el campo en la BD, he hecho mucho énfasis en que el filtrado SÓLO sirve para filtrar números, por eso lo separe por guioncitos (-), y da igual el trato que se le de después de filtrar, si alguien quien sea necesita meter el numero como string a una bd por X necesidad, entonces es una forma válida de filtrarlo, y te lo dije arriba, en dos respuestas, si necesitas filtrar una string necesitas filtrar caracteres especiales¿Y si el tipo de dato está declarado como string y no almacena números?, puede almacenar palabras (Ejpl: Nombres). ¿También los parseas a numéricos?. Me gustaría saber que valor tiene el string linkgl al parsearlo a integer... Debe ser como sentirse apuntando a un puntero a null.
Yo no sé, no soy nadie para críticar a skillmax eso ya es cosa de ustedes, yo te estoy debatiendo algo que creo correcto, que el pedazo de código que propone skillmax es válido para filtrar números en una BD, independientemente del trato que se haga con ellos despuésPoca credibilidad me da alguien como skillmax que dice que 'SELECT * FROM' es una sentencia SQL vulnerable. Muestra un desconocimiento total de base. Ni siquiera sabe formar una consulta SQL correcta.
De acuerdo, pero aveces en un proyecto es necesario hacer cosas poco "comunes" para que funcione, y bueno no todos trabajamos con analistas y diseñadores, aveces uno se las tiene que liar solo.Te vuelvo a responder. El artista que diseña una base de datos así no tiene mucha idea de lo que hace. Además, es una tarea que no debería depender del programador sino de un analista.
Yo lo único que te estoy debatiendo es que esa forma filtra las inyecciones si tu id es numérico funciona, y que el trato que se le da despues en la BD, es irrelevante, puesto que eso lo decide el programador no nosotros, son muchas variables como para poder decir, necesitas un campo tipo varchar(55),primary_key, etc... Total si x persona quiere meter un entero en un campo varchar pero quiere filtrar lo que entre ahí pues la mejor forma es pasarlo a entero, no me voy a molestar quitando caracteres especiales si solo habrá enteros ahí.No soy yo quién presupone eso. Es Skillmax (y parece que tu también), que es quien dice que para evitar 'todas las inyecciones web' basta con, en inyecciones SQL, utilizar este filtrado:Código: Seleccionar todo
$id = (int)$_GET['id']; $query = mysql_query( "SELECT * FROM noticias WHERE id = '$id'");
Yo estoy deacuerdo que no va con strings y te lo mencioné una y otra vez arriba " para eso necesitas filtrar los caracteres especiales "... Pero bue...
//mHmm..
Bloqueo de ICMP / SYN Flood y ataques SSH (brute force), para servidores en linux....
http://www.indetectables.net/foro/viewt ... 71&t=33921
http://www.indetectables.net/foro/viewt ... 71&t=33921
1337 & culture!
No sólo está obsoleto, sino que además incorrecto y lleno de inpuntualidades.
Te recomiendo investigar más acerca de cómo sanitizar correctamente los inputs, leer más sobre el proyecto OWASP, sobre PDO, que para algo está. Este post lo siento amigo pero está simplemente para confundir.
Y bueno, también lo siento por irme de listillo, pero si tuviese tiempo de realizar correcciones lo haría, aunque como ya digo, en la wiki de OWASP, está todo más que claro.
Saludos
Te recomiendo investigar más acerca de cómo sanitizar correctamente los inputs, leer más sobre el proyecto OWASP, sobre PDO, que para algo está. Este post lo siento amigo pero está simplemente para confundir.
Y bueno, también lo siento por irme de listillo, pero si tuviese tiempo de realizar correcciones lo haría, aunque como ya digo, en la wiki de OWASP, está todo más que claro.
Saludos
gracias por los comentarios, se enriquece uno, aunque como siempre suele pasar... es preferible hacer criticas constructivas saludos