Título: Php injection Publicado por: tragantras en 23 Febrero 2010, 00:38 am Huuula, bueno, dada la pericia de los peogramadores de mi facultad, e descubierto una vulnerabilidad de tipo php injeciton, mediante un eval($_GET["x"]);
si...son así de habiles allí.... ell caso, esk que para continuar con su nivel tiene actividas las magic quotes con lo que no puedo ahcer por ejemplo ?x=system("ls -la"); porque me escapa las comillas... de hecho estoy muy limitado en el uso de comandos puesto que la funcion system recibe una cadena y tal y cual. Por favor sugerencias? algun tipo de bypassing? Gracias por adelantado :) pD: tambien me serían útiles algunos comandos (linux) que puedan ser escritos en una sola palabra, es decir sin espacios :) Título: Re: Php injection Publicado por: Castg! en 23 Febrero 2010, 02:50 am proba con hexadecimal, si queres hacer un cat a /etc/passwd haces asi:
x = system((0x636174202f6574632f706173737764)); creo q tal vez podria servir... Título: Re: Php injection Publicado por: WHK en 23 Febrero 2010, 06:05 am Título: Re: Php injection Publicado por: tragantras en 23 Febrero 2010, 08:42 am
no se si son errores mios, o proteccion de la web, en cualkier caso muchas gracias por ayudarme y apreciaría si pudieseis seguir haciendolo, un saludo :) pD: Código: eval("echo PERICO_".$_GET["x"].";"); EDITO: He conseguido hacer un "apaño", el tema de las comillas quedó solucionado usando stripslashes como dijo whk, pero apareció un nuevo inconveniente, no podia insertar espacios, así que use la funcion chr() en concreto, chr(32) para insertar el espacio... El problema viene ahora, se ve que no tengo privilegios suficientes ni sikiera para moverme por directorios...(obviamente tampoico para crear archivos :$ ), no se porque cuando realizo system(cat index.php) por ejemplo, en vez de mostrarme el código es como que se "inserta", pero solo el codigo html... es decir como si bajasemos el index.php con "guardar como"... no se me ocurre nada más, dado que no puedo escribir en el directorio en el que se encuentra...alguna sugerencia? :) Título: Re: Php injection Publicado por: braulio-- en 23 Febrero 2010, 13:03 pm
no se si son errores mios, o proteccion de la web, en cualkier caso muchas gracias por ayudarme y apreciaría si pudieseis seguir haciendolo, un saludo :) pD: Código: eval("echo PERICO_".$_GET["x"].";"); EDITO: He conseguido hacer un "apaño", el tema de las comillas quedó solucionado usando stripslashes como dijo whk, pero apareció un nuevo inconveniente, no podia insertar espacios, así que use la funcion chr() en concreto, chr(32) para insertar el espacio... El problema viene ahora, se ve que no tengo privilegios suficientes ni sikiera para moverme por directorios...(obviamente tampoico para crear archivos :$ ), no se porque cuando realizo system(cat index.php) por ejemplo, en vez de mostrarme el código es como que se "inserta", pero solo el codigo html... es decir como si bajasemos el index.php con "guardar como"... no se me ocurre nada más, dado que no puedo escribir en el directorio en el que se encuentra...alguna sugerencia? :) Esto pasa porque el navegador lo que está reconociendo es html y entonces si le pasas información con html pues la parsea. Título: Re: Php injection Publicado por: tragantras en 23 Febrero 2010, 14:16 pm veis pq amo tanto esta comunidad... jajaja gracias braulio :)
alguien me sabría decir como podria escribir en un php? es que he descubierto un directorio en el cual se puede escribir, habia pensado en ( pero no me va eh xD ) : Código: x?3;stripslashes(system('echo.chr(32).a>pagina') es decir -> echo a > pagina ( como ejemplo, m refiero ) la idea es.. obviamente hacer una shell algo más facilita, pq me estoy rompiendo la cabeza :) Título: Re: Php injection Publicado por: braulio-- en 23 Febrero 2010, 14:26 pm Podrías hacerlo directamente desde php , pero creo que es mas fácil así :
Código: system("echo".chr(32)."loquequierasescribir".chr(32).">shell.php"); Título: Re: Php injection Publicado por: tragantras en 23 Febrero 2010, 15:26 pm Podrías hacerlo directamente desde php , pero creo que es mas fácil así : Código: system("echo".chr(32)."loquequierasescribir".chr(32).">shell.php"); si si, algo de php si que se, el asunto es que como están activadas las magic quotes (como puse arriba), no me deja más que insertar comillas simples mediante el stripslashes y no funciona bien... ciertamente no lo entiendo, por que por ejemplo si que puedo poner system(ls.chr(32).chr(45).la) quedando ls -la si que funciona, pero sin embargo si pong system(echo.chr(32).a) (echo a) por ejemplo, que debería mostrarmelo por pantalla, no suelta nada... y no termino de cogerlo... EDITO: hmmm Código así si que me deja, bueno un saludo y sigo a la escucha de posibles opciones de explotación (gracias de nuevo braulio) PD: edito por si a alguien le interesa seguir la evolucion de un newbie xDD Título: Re: Php injection Publicado por: WHK en 23 Febrero 2010, 17:14 pm nopo, esque de nada sirve ejecutar eval(stripslashses(system('ls -la'))) porque quedaría eval(stripslashses(system(\'ls -la\'))) , por eso debes ejecutarlo en la variable get:
Código: eval(stripslashses($_GET[x])) Título: Re: Php injection Publicado por: tragantras en 23 Febrero 2010, 21:16 pm nopo, esque de nada sirve ejecutar eval(stripslashses(system('ls -la'))) porque quedaría eval(stripslashses(system(\'ls -la\'))) , por eso debes ejecutarlo en la variable get: Código: eval(stripslashses($_GET[x])) hmmm jaja pero quizá no m expliqué bien, el código obviamente no lo puedo modificar yo... es un servidor web, tan solo puedo explotar dicha vuln :S Título: Re: Php injection Publicado por: WHK en 23 Febrero 2010, 21:37 pm ah en ese caso puedes hacer un
index.php?x=eval(stripslashses($_GET[z]));&z=echo 'x';exit; de esta forma desde la variable x le das un nuevo eval y stripslashses y fijate que no ingresamos ninguna comilla, luego desde una segunda variable le inyectamos a todo dar :P Título: Re: Php injection Publicado por: Azielito en 23 Febrero 2010, 21:45 pm no sé si te funcione aya, pero a mi me dio resultado
Código pasando eso por get, no se como lo modifique el foro, hice esto Código ya me platicaras PD: dice "dir" por que estoy en windows ¬¬ y que? :xD!!! Título: Re: Php injection Publicado por: Castg! en 24 Febrero 2010, 00:23 am jsajajaja pero dir sirve para igual en windows que en linux...
Título: Re: Php injection Publicado por: WHK en 24 Febrero 2010, 02:16 am mejor
print_r(glob('*')); print_r(glob('/temp/*')); print_r(glob('/*')); print_r(glob('/etc/*')); despues lees con file print_r(file('/etc/passwd')); Título: Re: Php injection Publicado por: tragantras en 24 Febrero 2010, 12:29 pm gracias por contestar de nuevo =)
WHK no puedo usar los print_r porque requieren cadenas, y como dije al principio están activados los magic_quotes así que no se muy bien como realizar esas operaciones, intenté con chr(39), que viene siendo la comilla simple, pero no procesa bien de esa manera... recuerdo que el código vulnerable es el siguiente Código Azielito Ya especifiqué que el codigo no puedo modificarlo yo... se trata de una vulnerabildad, no es un foro, es una web de servicios, sin más All Dado que puedo lanzar system() exec() passthru() etc... se me había ocurrido lanzar un Código o una inversa Código pero he tenido algunos problemas haciendo una prueba local, se ve que mi router no hace correctamente la traduccion de IPs privadas a Publicas ( NAT ) asi que..., y tampoco me quiero arriesgar a dejarlo a la escucha en el servidor, que eso es facilmente detectable, además se registraría mi ip... ( que por otra parte...tampoco es mia, es una wifi de por ahi xD ) He obtenido los datos de la conexion de la base de datos, hay una mysql y una oracle, pero... el firewall está configurado para tan solo aceptar peticiones desde dentro... así que por eso me es tan importante instalar una shell dentro. PD: no se si esto está tomando tintes para estar en el tema de hacking general... pero como aun tengo que pasar funciones mediante el eval() y el system() de php, pienso que aun tiene cabida aquí Un saludo y gracias ^^ Título: Re: Php injection Publicado por: braulio-- en 24 Febrero 2010, 15:31 pm Y por qué no haces la shell con lo de system('echo tal>hola.php'); ehh? (obviamente saltandote los filtros esos que hay)
Título: Re: Php injection Publicado por: tragantras en 24 Febrero 2010, 16:12 pm Y por qué no haces la shell con lo de system('echo tal>hola.php'); ehh? (obviamente saltandote los filtros esos que hay) omg no eres consciente hasta que punto se complica el asunto, no puedo insertar ni comillas, ni espacios ni simbolos raros ( como backslashes ) por ejemplo ese código que tu has puesto ahi se transforma en: Código con: ' = chr(39) (espacio) = chr(32) > = chr(62) . = chr(46) con lo que intentar hacer una "shell" decente... me costaría la misma vida xD pD: el simbolo del > si s puede introducir, pero bueno, es tan solo un caracter entre la marea de ellos Título: Re: Php injection Publicado por: braulio-- en 24 Febrero 2010, 17:08 pm Recuerda que WHK te dió la forma para evadir las magic quotes,y , otra forma sería con las funciones get_file_content y put_file_content.
Título: Re: Php injection Publicado por: tragantras en 25 Febrero 2010, 11:55 am Recuerda que WHK te dió la forma para evadir las magic quotes,y , otra forma sería con las funciones get_file_content y put_file_content. pues... el tema es que probando offline el codigo de WHK si que me ha funcionado, pero a la hora de implementarlo en la web no... no se porque, a ver si vosotros me echais una mano ( OTRA! xD ), os pongo el funcionamiento más "real" de la web:
no se realmente si este proceso de paso por variable local en vez de por GET altera el funcionamiento de el sistema :/ Título: Re: Php injection Publicado por: Azielito en 25 Febrero 2010, 19:45 pm si, te entendi, te comento que hagas uso de la funcion "urldecode" cuando mandas tu codigo x)
Título: Re: Php injection Publicado por: ~ Yoya ~ en 25 Febrero 2010, 20:04 pm La directiva magic_quotes_gpc solo actuan sobre las comillas simples y dobles, pueden usar urlencode para bypassearlo pero si se envia por POST o por COOKIES pueden usar usar lo que dijo WHK
Título: Re: Php injection Publicado por: tragantras en 25 Febrero 2010, 22:08 pm si, te entendi, te comento que hagas uso de la funcion "urldecode" cuando mandas tu codigo x) La directiva magic_quotes_gpc solo actuan sobre las comillas simples y dobles, pueden usar urlencode para bypassearlo pero si se envia por POST o por COOKIES pueden usar usar lo que dijo WHK OOOk, vale lo probé y efectivamente, el tema de las comillas simples y dobles lo bypassea, pero el segundo problema con el que me encuentro es que no puedo colocar NINGUN espacio en la query "system()", osea puedo poner system("dir") ( usando todo el rollo de urlencode ) pero por ejemplo no system("ls -la") pq requiere de un espacio... obviamente puedo seguir concatenando chr(32) etc etc pero me gustaría más que el metodo de explotación, el POR QUÉ ocurre esto, que de eso se trata no? de aprender :) un saludo y aprecio mucho vuestras respuestas :) Título: Re: Php injection Publicado por: ~ Yoya ~ en 25 Febrero 2010, 22:15 pm En url encode el espacio es:
Código: + Código: 32 Título: Re: Php injection Publicado por: tragantras en 25 Febrero 2010, 23:38 pm hay algo que se me escapa...
veamos.... yo pongo Código
y me imprime correctamente 3mycosa (recordar que era hacia echo $_GET [ x ], asi que la variable por x tambien se imprime... ) pero sin embargo si pongo Código ni sikiera imprime el 3 correctamente, es decir... hay algo que impide usar espacios, sin embargo comillas simples si edit: peude ser alguna config del servidor? Título: Re: Php injection Publicado por: braulio-- en 25 Febrero 2010, 23:43 pm Pues míralo en el code, puedes usar system(cat) (creo que ya lo hiciste)
Título: Re: Php injection Publicado por: tragantras en 25 Febrero 2010, 23:48 pm cambiarIdioma.php
Código
index.php Código
Ahi no parece estar el problema de los espacios no?... que config puede ser? necsitais datos del phpinfo? PD: por cierto, obviamente no son los nombres d los arxivos esos, no soy tan malvado xD Título: Re: Php injection Publicado por: ~ Yoya ~ en 25 Febrero 2010, 23:52 pm Agrega url encode...
Código: http://url.com/pagina.php?x=3;$cosa='my cosa';echo urlencode($cosa); Título: Re: Php injection Publicado por: tragantras en 25 Febrero 2010, 23:55 pm Agrega url encode... Código: http://url.com/pagina.php?x=3;$cosa='my cosa';echo urlencode($cosa); Nop, no funciona... la unica manera de poder insertar espacios es chr(32) POR QUE?! xDD Código
pD: esto se está convirtiendo para mi en poco menos que quebradero de cabeza asi si funciona.... sin el urlencode, tan solo poniendo chr(32)... Título: Re: Php injection Publicado por: ~ Yoya ~ en 25 Febrero 2010, 23:56 pm ps te recomiendo que lo maquetees.
Título: Re: Php injection Publicado por: tragantras en 26 Febrero 2010, 00:41 am ps te recomiendo que lo maquetees. No se muy bien a que te refieres con eso... probando la pagina tal cual en mi ordenador, firefox me adiverte de una recursión infinita, es decir... cambiarIdioma.php hace un header a index.php y éste hace un include a cambiarIdioma.... que de nuevo volvería a hacer el header y blablabla hasta el final de los tiempos. Por qué me ocurre esto a mi offline pero online no? alguna config del server? me faltará algun trozo de php? Título: Re: Php injection Publicado por: braulio-- en 26 Febrero 2010, 10:07 am Puedes codificarlo a base64 y luego descodificarlo desde el código y te saltas lo de los espacios.
Título: Re: Php injection Publicado por: Azielito en 26 Febrero 2010, 16:19 pm coincido con braulio
Código podrias mirar el php.ini y/o el httpd.conf para ver que puedes y que no puedes hacer :P Título: Re: Php injection Publicado por: tragantras en 26 Febrero 2010, 16:43 pm bueno, muchas gracias a todos :]
con el tema del base64_decode me las puedo ir apañando mediante el file_put_contents y tiempo libre... xD miraré el tema del php.ini y el httd.conf a ver que puede ser, porque por ejemplo: Código no me deja... es decir no me deja meter el simbolo de interrogación, pero de momento el resto de los que he probado si, '<' y cosas así si.. hmm todo un misterio! jaja bueno repito que muchas gracias por prestarme la ayuda, cuando pueda hacer cat php.ini os lo iré poniendo por si os interesa este misterio! :] |