Limpiar servidor al que han hackeado todos los wordpress

Wordpress hacking sed awk

Limpiar un servidor al que han añadido lineas de código en los ficheros PHP, es algo habitual en servidores con WordPress + Cpanel / Plesk. Aunque cada proceso de infección es un mundo, publico este proceso porque los tips que desarrolla el artículo, pueden servir para muchas variaciones de trabajos a realizar en el mantenimiento de nuestro servidor, sobre todo después de una infección o hacking.

Limpiando un servidor al que han hackeado todos los wordpress

Ayer tuve que limpiar un servidor al que a través de un exploit en un blog con WordPress, unido a una falla de seguridad en el modelo Apache/Cpanel, le habían infectado todos los blog WordPress del servidor.

Analizando la infección (hack)

En cada WordPress habían ubicado un fichero llamado options.php que había sido el encargado de infectar todos los ficheros .php de esa cuenta. La característica diferenciadora, era que cada cuenta se le añadía una variable distinta a la primera linea.

Localización de los ficheros infectadores

Localizamos los ficheros options.php de todos los usuarios, cuya segunda cadena de la primera linea sea una variable (comienza por $) guardándolo en un fichero, por ejemplo options.txt (Preferimos el trabajo sobre ficheros, que en un encadenado de programación, por seguridad, ya que como en el ejemplo, hablamos de mas de cien mil ficheros infectados)

Localización de ficheros infectados de cada usuario

En un bucle for, sobre el fichero anterior, extraemos la variable del archivo infectador, que sabemos que es única por cada usuario, y guardamos el path del fichero, y la variable separados por comas.

Lectura y búsqueda de ficheros infectados

Con esa lista, tenemos la posibilidad de analizar cada usuario, que tiene una cadenas hack específica. Sabemos que todos los usuarios del sistema nuestro están en /home (si fuera de otra forma, porque existen /home2, /home3, /homen, tendríamos que modificar el código)

Como es una var por usuario, utilizaremos una variable de control para determinar cuando estamos trabajando con un usuario del que ya tenemos la variable.

Limpieza de ficheros infectados

Cuando comencé el artículo surgió un problema, que no había visto con anterioridad. (Fallo mío). El infectador añadía una cadena, y no todos los ficheros php, comienzan por

Así que mi planteamiento llevo a error. Aquí tubo que entrar el sistema de backups, para recuperar algunos ficheros en los que la limpieza había resultado dejar inconsistente el fichero.

Trabajar muchas horas es muy del sur de Europa, muy latino, y eso pasa factura. Un administrador de sistema no debería trabajar bajo presión, más de 6 horas, o las consecuencias pueden ser terroríficas un buen día, por mucho que su pericia supla la falta de sueño, cansancio o concentración

De esta forma la cuestión era borrar todo lo que existiera entre dos limitadores, incluidos ellos mismos. Bueno un poco de ayuda no esta mal, y puse un artículo Delete the characters of a line between two limiters including themselves y con ello cree el último trozo de código.


Imagen Designed by Freepik y modificada por Abdelkarim Mateos

Comparte este artículo

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax