1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 | / * Escáner RFI de DiGitalX ( DiGi7alX @Gmail . Com ) Fecha : 6 / 4 / de 2007 - microsistema equipo * / #define WIN32_LEAN_AND_MEAN #include <windows.h> #include <stdio.h> // #define _DEBUG // modo de depuración (para mí <img src = "https://underc0de.org/foro/Smileys/default/cheesy.gif" alt = "& # 58; D" title = "Cheesy" class = "smiley" />) #definir DEBUG_ROOT "salida" // pon las funciones vuln aquí // funciona que si una var está en sus argumentos, entonces se produce una posible RFI // IMPORTANTE : mantener este orden char * vuln [ ] = { "include_once" , "include" , "require_once" , "require" , NULL } ; // global BOOL bShortDis = FALSE ; uso nulo ( aplicación char * ) { printf ( "uso: [-s]% s <directorio raíz> \ n " , aplicación ) ; printf ( " \ t -s \ t modo de visualización breve \ n " ) ; } banner vacío ( vacío ) { printf ( "Escáner RFI de DiGitalX ( DiGi7alX@Gmail.com ) \ n " ) ; printf ( "Fecha: 4/6/2007 - Equipo de MicroSystem \ n \ n " ) ; } // return : FALSE si EOF alcanzó , TRUE de lo contrario BOOL freadline ( FILE * f , char * line , int size ) { int b , i = 0 ; // línea cero memset ( línea , 0 , tamaño ) ; hacer { // lee un byte b = fgetc ( f ) ; // verifica si EOF if ( b == EOF ) devuelve FALSE ; // comprueba si se ha alcanzado la línea nueva o si la línea está llena if ( ( b == '\ n' ) || ( i == 1023 ) ) devuelve TRUE ; * línea ++ = b ; // línea de relleno i ++; // contador de incrementos } mientras ( 1 ) ; retorno 1 ; /* código inalcanzable */ } BOOL php_scanfile ( archivo char * ) { línea de char [ 1024 ] , línea2 [ 1024 ] ; lino int = 0 ; BOOL notend ; char * tmp , * tmp2 , * x ; // abrir archivo ARCHIVO * f = fopen ( archivo , "rb" ) ; // comprobar si ( f == NULL ) volver FALSO ; hacer { // abierto , luego lee línea por línea notend = freadline ( f , línea , sizeof ( línea ) ) ; lino ++; // baja la línea strcpy ( línea2 , línea ) ; CharLower ( line2 ) ; for ( int i = 0 ; vuln [ i ] ! = NULL ; i ++ ) { // ahora línea contiene una línea de código , buscar para funciones de RFI // include , include_once , require , require_once tmp = strstr ( line2 , VULN [ i ] ) ; if ( tmp ! = NULL ) { // la línea contiene la función vuln, tal vez RFI . // verifica si la función tmp + = strlen ( vuln [ i ] ) ; // omitir el nombre de la función while ( * tmp ! = '(' ) { // verifica si se alcanzó el final de la línea u otro carácter ( no espacio en blanco significa que no funciona ) if ( * tmp == '\ 0' ) pasa a siguiente ; // luego valla a la próxima función VULN // verifica si hay basura entre la función vuln y el primer ' ( ' alcanzado // si es así, que' s no una función VULN quizá comentario o var o cadena o algo otra cosa if ( ( * tmp ! = '' ) && ( * tmp ! = '\ t' ) ) pasa a siguiente ; // solo Dun molesta y goto siguiente función VULN tmp ++; // sigue incrementando tmp hasta atrapar '(' [ paréntesis de apertura de la función vuln ] } // cheque para var dentro de esta función tmp2 = tmp ; // establece tmp2 al comienzo de la función de inclusión while ( * tmp2 ! = ')' ) { tmp2 ++; // sigue incrementando tmp2 hasta capturar ')' [ paréntesis de cierre de la función de inclusión ] // comprobar si se alcanzó el final de la línea if ( * tmp2 == '\ 0' ) pasa a siguiente ; // luego valla a la próxima función VULN } x = tmp ; // establece x al comienzo de la función de inclusión while ( ( * x ! = '$' ) && ( x < tmp2 ) ) x ++; // sigue incrementando x hasta atrapar una var dentro de incluir functino o incluir paréntesis de cierre de funciones // verifica qué condición acaba de retener if ( * x == '$' ) { // BINGO , posible solicitud de RFI < img src = "https://underc0de.org/foro/Smileys/default/cheesy.gif" alt = "& # 58; D" title = "Cheesy" class = "smiley" / > printf ( "posible RFI en la línea:% u" , lino ) ; // si bShortDis entonces proporcionar nombre de archivo if ( bShortDis ) printf ( "en \" % s \ " \ n " , archivo ) ; sino printf ( " \ n " ) ; // de lo contrario solo nueva línea romper ; // rompe el bucle for } } siguiente : } if ( ! notend ) break ; // NO no end == end < img src = "https://underc0de.org/foro/Smileys/default/cheesy.gif" alt = "& # 58; D" title = "Cheesy" class = "smiley" /> } mientras ( 1 ) ; fclose ( f ) ; devolver TRUE ; } void php_search ( void ) { WIN32_FIND_DATA wfd ; MANGO fh ; char lpBuffer [ 320 ] ; char * lpFilePart ; fh = FindFirstFile ( "*. *" , & wfd ) ; if ( fh ! = INVALID_HANDLE_VALUE ) { hacer { // omitir '.' y '..' dirs if ( wfd . cFileName [ 0 ] == '.' ) continuar ; // si dir ingrésalo if ( wfd . dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) { if ( SetCurrentDirectory ( wfd . cFileName ) == TRUE ) { php_search ( ) ; // llamada recursiva SetCurrentDirectory ( ".." ) ; } continuar ; } // de lo contrario continuar nuestro proceso if ( GetFullPathName ( wfd . cFileName , 320 , lpBuffer , & lpFilePart ) == 0 ) continuar ; CharLower ( lpBuffer ) ; // comprobando si la extensión del archivo es php if ( memcmp ( & lpBuffer [ lstrlen ( lpBuffer ) - 3 ] , "php" , 3 ) == 0 ) { // omitir si bShortDis está configurado if ( ! bShortDis ) printf ( "Escaneando% s ... \ n " , lpBuffer ) ; php_scanfile ( lpBuffer ) ; } } , Mientras que ( FindNextFile ( FH , y DMA ) == TRUE ) ; FindClose ( fh ) ; // cierre del identificador de búsqueda } } BOOL begin_rfi_scan ( char * root ) { // primero establece el directorio raíz como el directorio actual if ( ! SetCurrentDirectory ( root ) ) volver FALSO ; // comienza la búsqueda de archivos php printf ( "Vulnerabilidades de RFI de inicio de búsqueda ... \ n " ) ; // si se da - s , informe al usuario que el modo está activado if ( bShortDis ) printf ( "Modo de visualización corta activado \ n " ) ; php_search ( ) ; printf ( "Terminado de Cazar. \ n " ) ; devolver TRUE ; } int main ( int argc , char ** argv ) { int pos = 1 ; // posición raíz en la línea cmd // muestra banner banner ( ) ; #ifndef _DEBUG // verifica si el directorio raíz se da en la línea cmd if ( argc < 2 ) { // muestra la pantalla de uso y sale uso ( argv [ 0 ] ) ; retorno 1 ; } #terminara si // - s se especifica conmutador if ( strcmp ( argv [ 1 ] , "-s" ) == 0 ) { bShortDis = VERDADERO ; // establecer bandera pos = 2 ; // cambia la posición raíz en la línea cmd } // el directorio raíz se da bien , luego escanea todos los archivos dentro de este directorio raíz #ifndef _DEBUG if ( ! begin_rfi_scan ( argv [ pos ] ) ) { #más if ( ! begin_rfi_scan ( DEBUG_ROOT ) ) { #terminara si printf ( "Error: inicializando el escáner RFI ... Inténtalo de nuevo" ) ; retorno 1 ; } devuelve 0 ; } [ / cita ] [ cita ] Es un escáner simple - RFI que escanea archivos - php o posibles vulnerabilidades como include ( ) , require ( ) ... etc y luego chekea si hay alguna variable en los argumentos de la función . Si la hay muestra el resultado para tu chekes si hay una RFI / LFI muy feliz xD ! * Nota : Podes poner un monton de scripts php dentro de una carpeta y cocorrer el escáner contra el mismo . El scaner scanneara todo el directorio raíz ( dentro de la lina cmd ) y te provera cada función funcional bugg junto con la línea y nombre del script |
RFI-Scanner
Suscribirse a:
Enviar comentarios
0 comentarios: sobre RFI-Scanner
Publicar un comentario para RFI-Scanner