This WordPress blog was hacked for few hours on 24th December (nice Christmas present!) from Russia. WordPress Ce blog a été piraté pour quelques heures le 24 Décembre (joli cadeau de Noël!) De Russie. The hacker exploited several WordPress vulnerabilities in administrative scripts to gain full access to the website (as permitted to apache user), including the ability to upload & run scripts, delete any file owned by apache user, view the file and directories etc. This is a full disclosure on the how the site was hacked and how I detected and removed the hack along with few comments on the state of WordPress security. The Hacker WordPress exploité plusieurs vulnérabilités dans les scripts d'administration pour obtenir le plein accès au site (comme le permet à l'utilisateur apache), y compris la possibilité de télécharger et exécuter des scripts, de supprimer tout fichier appartenant à l'utilisateur apache, voir le fichier et les répertoires etc C'est une divulgation complète sur la façon dont le site a été piraté et comment je détectés et supprimés le hack avec quelques commentaires sur l'état de sécurité de WordPress. I added a WordPress plugin and made modifications to prevent any such hacking attempts in future using WordPress. J'ai ajouté un plugin WordPress et apporté des modifications à empêcher de tels tentatives de piratage à l'avenir en utilisant WordPress. This is a must read for WordPress bloggers. C'est un must pour lire bloggers de WordPress.


How the site hacking was detected? Comment le site de piratage a été détecté?

The website was normal. Le site a été normale. However when I tried to publish or even save a post, it simply showed a blank page. Toutefois, lorsque j'ai essayé de publier ou de mettre un même poste, il a montré tout simplement une page blanche. The post was never published or even saved. Le poste n'a jamais été publiés ou même enregistré. I knew something was wrong. Je savais que quelque chose n'allait pas.

My first suspect were couple of plugins which contacted external servers after a publish. Mon premier suspect a été couple de plug-ins qui est entrée en contact des serveurs externes après une publication. I disabled them. Je handicapés. I also disabled the ping sites as they were sometimes known to cause problems. J'ai également désactivé le ping sites car ils sont parfois connus pour causer des problèmes. None of that helped. Rien de tout cela a aidé. I progressively disabled all of the plugins. Je progressivement tous les handicapés de plugins. Even with all the plugins disabled, the post wouldn’t publish. Même avec tous les plug-ins handicapés, le poste ne serait pas publier. I was left with only one option. J'ai été à gauche avec seulement une option.

I decided to trace WordPress code to find out the cause of error. J'ai décidé de suivre code de WordPress pour trouver la cause d'erreur. I started with the file for post submission - post.php. J'ai commencé avec le fichier pour le poste présentation - post.php. I found something startling with WordPress code which seriously undermines its security, a flawed design choice but more on it later. J'ai trouvé quelque chose de surprenant avec WordPress code qui porte gravement atteinte à sa sécurité, une conception erronée mais plus de choix pour le terminer plus tard. post.php calls admin.php which calls wp-config.php which in turn calls wp-settings.php. post.php appels admin.php qui demande wp-config.php qui à son tour appelle wp-settings.php. wp-settings is an interesting file. wp-paramètres est un dossier intéressant. This file isn’t just about settings. Ce fichier n'est pas qu'une question de réglages. It loads tons of files, loads and executes the plugins and more. Il charge tonnes de fichiers, charges et exécute les plug-ins et bien plus encore. The problem was, as I originally suspected, in the plugins but which one? Le problème est, comme je l'ai initialement soupçonné, dans les plugins, mais lequel? The code which loads the plugins in WordPress is: Le code qui charge les plugins dans WordPress est:

 if ( get_option('active_plugins') ) {  $current_plugins = get_option('active_plugins');  if ( is_array($current_plugins) ) {   foreach ($current_plugins as $plugin) { if (” != $plugin && file_exists(ABSPATH . PLUGINDIR . ‘/’ . $plugin))     include_once(ABSPATH . PLUGINDIR . ‘/’ . $plugin); }  } } if (get_option ( 'active_plugins')) ($ current_plugins = get_option (' active_plugins'); if (is_array ($ current_plugins)) (foreach ($ current_plugins $ plugin) (if ( "! $ = plugin & & file_exists (ABSPATH. PLUGINDIR. '/'. $ Plugin)) include_once (ABSPATH. PLUGINDIR. '/'. $ Plugin);))) 

The active plugins, as you can see, are loaded directly with include_once. Les plugins actifs, comme vous pouvez le voir, sont chargées directement avec include_once. How do I find the plugin which while loading is causing the script to die? Comment puis-je trouver le plugin qui pendant le chargement est à l'origine du script de mourir?
I added simple syslog() statements before and after the plugin. J'ai ajouté simple syslog () les déclarations avant et après le plugin. However it generated copious output from all the traffic. Toutefois, il a généré de nombreuses sorties de tout le trafic.
Remember I was debugging on a heavily trafficked live site. Rappelez-vous, je le débogage a été lourdement sur un site en ligne victimes de la traite. So I added a define in post.php which I was checking before doing a syslog. J'ai donc ajouté un définir dans post.php que je vérifie avant de faire un syslog. The debugging code was: Le débogage de code:
if (” != $plugin && file_exists(ABSPATH . ‘wp-content/plugins/’ . $plugin)) { if ( "! $ = plugin & & file_exists (ABSPATH." wp-content/plugins / '. $ plugin)) (
if(defined(’TG_ADMIN’)) syslog(LOG_ALERT, “Loading $plugin…”); if (defined ( 'TG_ADMIN')) syslog (LOG_ALERT, "Chargement du plugin $…");
include_once(ABSPATH . ‘wp-content/plugins/’ . $plugin); include_once (ABSPATH. "wp-content/plugins / '. $ plugin);
if(defined(’TG_ADMIN’)) syslog(LOG_ALERT, “Loaded $plugin…”); if (defined ( 'TG_ADMIN')) syslog (LOG_ALERT, "Loaded $ plugin…");
} )

The result was surprising. Le résultat est surprenant. The first plugin loaded was not even a plugin I knew existed, let alone use it. Le premier plugin chargé n'était même pas un plugin je connaissais l'existence, encore moins l'utiliser. It was named ro8kbsmawge.txt. Il a été nommé ro8kbsmawge.txt. The full path to the plugin was /../../../../../../../../../../../../../../../../../../tmp/ro8kbsmawge.txt Le chemin complet vers le plugin a été /../../../../../../../../../../../../../../ ../../../../tmp/ro8kbsmawge.txt
Effectively the file path was /tmp/ro8kbsmawge.txt. En effet le chemin du fichier est / tmp/ro8kbsmawge.txt. A telltale sign of this hacker is the presence of the file ro8kbsmawge.txt in your tmp directory. Un témoin signe de ce pirate est la présence du fichier ro8kbsmawge.txt dans votre répertoire tmp.

I renamed the file and the problem was solved for now. Je le nom de fichier et le problème a été résolu pour le moment. I could publish posts finally. Je pourrais enfin publier de messages. However my site was still not secure against future attacks. Cependant mon site n'est toujours pas protégé contre de futures attaques. I will detail next at how I secured my site and provide more information on the perpetrator and how the site was hacked in the first place. Je détaillerai ensuite comment j'ai obtenu mon site et fournir de plus amples renseignements sur l'auteur et comment le site a été piraté en premier lieu.

How the site was hacked using WordPress? Comment le site a été piraté en utilisant WordPress?

The site exploited a vulnerability in /wp-admin/options.php which allowed it to get the authentication cookies it required to upload the file ro8kbsmawge.txt to my /tmp directory using /wp-admin/inline-uploading.php. Le site exploité une vulnérabilité dans / wp-admin/options.php qui lui ont permis d'obtenir l'authentification des témoins dont elle avait besoin pour télécharger le fichier ro8kbsmawge.txt à mon répertoire / tmp en utilisant / wp-admin/inline-uploading.php. It then used /wp-admin/plugins.php to activate the ro8kbsmawge.txt as a plugin while using options-misc along the way. Il a ensuite utilisé / wp-admin/plugins.php pour activer le ro8kbsmawge.txt comme un plugin en utilisant les options-misc en cours de route.

Finally the hacker accessed the site using his magic word piska233 and browsed few directories on my server before retiring for the day. Enfin, le hacker a accédé au site en utilisant son mot magique piska233 et parcouru quelques répertoires sur mon serveur avant de prendre sa retraite pour la journée. All of these was done within a span of 3 minutes which leads to the conclusion that a script was used to exploit the holes and orchestrate the hacking. Tous ces a été fait dans une période de 3 minutes qui conduit à la conclusion qu'un script a été utilisé pour exploiter les trous et orchestrer le piratage.

The full log, except the IP address 217.74.245.85 which was removed for redundancy, of hackers action on my site is: Le journal complet, à l'exception de l'adresse IP 217.74.245.85 qui a été retiré pour la redondance, les pirates de l'action sur mon site est:

[24/Dec/2007:07:40:22 -0600] “POST /wp-admin/options.php HTTP/1.0″ 200 1713 “http://blog.taragana.com/wp-admin/options.php” “Opera” [24/Dec/2007: 07:40:22 -0600] "POST / wp-admin/options.php HTTP/1.0" 200 1713 "http://blog.taragana.com/wp-admin/options.php" "Opéra"
[24/Dec/2007:07:40:24 -0600] “POST /wp-admin/options.php HTTP/1.0″ 302 471 “http://blog.taragana.com/wp-admin/options.php” “Opera” [24/Dec/2007: 07:40:24 -0600] "POST / wp-admin/options.php HTTP/1.0" 302 471 "http://blog.taragana.com/wp-admin/options.php" "Opéra"
[24/Dec/2007:07:40:26 -0600] “POST /wp-admin/inline-uploading.php?post=-1&action=upload HTTP/1.0″ 200 1645 “http://blog.taragana.com/inline-uploading.php?post=-1&action=upload” “Opera” [24/Dec/2007: 07:40:26 -0600] "POST / wp-admin/inline-uploading.php? Poste =- 1 & action = upload HTTP/1.0" 200 1645 "http://blog.taragana.com / inline-uploading.php? poste =- 1 & action = upload "" Opera "
[24/Dec/2007:07:40:29 -0600] “POST /wp-admin/inline-uploading.php?post=-1&action=upload HTTP/1.0″ 200 142 “http://blog.taragana.com/inline-uploading.php?post=-1&action=upload” “Opera” [24/Dec/2007: 07:40:29 -0600] "POST / wp-admin/inline-uploading.php? Poste =- 1 & action = upload HTTP/1.0" 200 142 "http://blog.taragana.com / inline-uploading.php? poste =- 1 & action = upload "" Opera "
[24/Dec/2007:07:40:52 -0600] “POST /wp-admin/options.php HTTP/1.0″ 200 1713 “http://blog.taragana.com/wp-admin/options.php” “Opera” [24/Dec/2007: 07:40:52 -0600] "POST / wp-admin/options.php HTTP/1.0" 200 1713 "http://blog.taragana.com/wp-admin/options.php" "Opéra"
[24/Dec/2007:07:40:54 -0600] “POST /wp-admin/options.php HTTP/1.0″ 302 471 “http://blog.taragana.com/wp-admin/options.php” “Opera” [24/Dec/2007: 07:40:54 -0600] "POST / wp-admin/options.php HTTP/1.0" 302 471 "http://blog.taragana.com/wp-admin/options.php" "Opéra"
[24/Dec/2007:07:40:57 -0600] “POST /wp-admin/inline-uploading.php?post=-1&action=upload HTTP/1.0″ 200 1645 “http://blog.taragana.com/inline-uploading.php?post=-1&action=upload” “Opera” [24/Dec/2007: 07:40:57 -0600] "POST / wp-admin/inline-uploading.php? Poste =- 1 & action = upload HTTP/1.0" 200 1645 "http://blog.taragana.com / inline-uploading.php? poste =- 1 & action = upload "" Opera "
[24/Dec/2007:07:41:11 -0600] “GET /wp-admin/options-misc.php HTTP/1.1″ 200 7764 “-” “Opera/9.24 (Windows NT 5.1; U; ru)” [24/Dec/2007: 07:41:11 -0600] "GET / wp-admin/options-misc.php HTTP/1.1" 200 7764 "-" "Opera/9.24 (Windows NT 5,1 U; ru)"
[24/Dec/2007:07:41:15 -0600] “GET /wp-admin/wp-admin.css?version=2.0.7 HTTP/1.1″ 304 - “http://blog.taragana.com/wp-admin/options-misc.php” “Opera/9.24 (Windows NT 5.1; U; ru)” [24/Dec/2007: 07:41:15 -0600] "GET / wp-admin/wp-admin.css? Version = 2.0.7 HTTP/1.1" 304 - "http://blog.taragana.com/ wp-admin/options-misc.php "" Opera/9.24 (Windows NT 5,1 U; ru) "
[24/Dec/2007:07:41:15 -0600] “GET /wp-includes/js/fat.js HTTP/1.1″ 304 - “http://blog.taragana.com/wp-admin/options-misc.php” “Opera/9.24 (Windows NT 5.1; U; ru)” [24/Dec/2007: 07:41:15 -0600] "GET / wp-includes/js/fat.js HTTP/1.1" 304 - "http://blog.taragana.com/wp-admin/options- misc.php "" Opera/9.24 (Windows NT 5,1 U; ru) "
[24/Dec/2007:07:41:12 -0600] “POST /wp-admin/inline-uploading.php?post=-1&action=upload HTTP/1.0″ 302 - “http://blog.taragana.com/inline-uploading.php?post=-1&action=upload” “Opera” [24/Dec/2007: 07:41:12 -0600] "POST / wp-admin/inline-uploading.php? Poste =- 1 & action = upload HTTP/1.0" 302 - "http://blog.taragana.com / inline-uploading.php? poste =- 1 & action = upload "" Opera "
[24/Dec/2007:07:41:21 -0600] “GET /wp-admin/plugins.php?action=activate&plugin=/../../../../../../../../../../../../../../../../../../tmp/ro8kbsmawge.txt&_wpnonce= HTTP/1.1″ 200 1474 “http://blog.taragana.com/wp-admin/plugins.php?action=activate&plugin=/../../../../../../../../../../../../../../../../../../tmp/ro8kbsmawge.txt” “Opera” [24/Dec/2007: 07:41:21 -0600] "GET / wp-admin/plugins.php? Action = activer le plugin & =/../../../../../../. ./../../../../../../../../../../../tmp/ro8kbsmawge.txt & _wpnonce = HTTP/1.1 "200 1474" http: / / blog.taragana.com / wp-admin / plugins.php? action = activer le plugin & =/../../../../../../../../../.. /../../../../../../../../ tmp/ro8kbsmawge.txt "" Opéra "
[24/Dec/2007:07:41:23 -0600] “GET /wp-admin/plugins.php?action=activate&plugin=/../../../../../../../../../../../../../../../../../../tmp/ro8kbsmawge.txt&_wpnonce=7b4c8019bd HTTP/1.1″ 302 - “http://blog.taragana.com/wp-admin/plugins.php?action=activate&plugin=/../../../../../../../../../../../../../../../../../../tmp/ro8kbsmawge.txt” “Opera” [24/Dec/2007: 07:41:23 -0600] "GET / wp-admin/plugins.php? Action = activer le plugin & =/../../../../../../. ./../../../../../../../../../../../tmp/ro8kbsmawge.txt & _wpnonce = 7b4c8019bd HTTP/1.1 "302 -" http : / / blog.taragana.com / wp-admin / plugins.php? action = activer le plugin & =/../../../../../../../../../. ./../../../../../../../../tmp/ro8kbsmawge.txt "" Opéra "
[24/Dec/2007:07:41:30 -0600] “GET /?piska23 HTTP/1.1″ 200 95716 “http://lamer/mwpep/?mode=shell&what=20″ “Opera/9.24 (Windows NT 5.1; U; ru)” [24/Dec/2007: 07:41:30 -0600] "GET /? Piska23 HTTP/1.1" 200 95716 "http://lamer/mwpep/?mode=shell&what=20" "Opera/9.24 (Windows NT 5,1 U; ru) "
[24/Dec/2007:07:41:36 -0600] “GET /?piska233 HTTP/1.1″ 200 15840 “-” “Opera/9.24 (Windows NT 5.1; U; ru)” [24/Dec/2007: 07:41:36 -0600] "GET /? Piska233 HTTP/1.1" 200 15840 "-" "Opera/9.24 (Windows NT 5,1 U; ru)"
[24/Dec/2007:07:41:44 -0600] “POST /wp-admin/options.php HTTP/1.1″ 302 471 “http://blog.taragana.com/wp-admin/options-misc.php” “Opera/9.24 (Windows NT 5.1; U; ru)” [24/Dec/2007: 07:41:44 -0600] "POST / wp-admin/options.php HTTP/1.1" 302 471 "http://blog.taragana.com/wp-admin/options-misc. php "" Opera/9.24 (Windows NT 5,1 U; ru) "
[24/Dec/2007:07:41:47 -0600] “POST /wp-admin/options.php HTTP/1.1″ 302 471 “http://blog.taragana.com/wp-admin/options-misc.php” “Opera/9.24 (Windows NT 5.1; U; ru)” [24/Dec/2007: 07:41:47 -0600] "POST / wp-admin/options.php HTTP/1.1" 302 471 "http://blog.taragana.com/wp-admin/options-misc. php "" Opera/9.24 (Windows NT 5,1 U; ru) "
[24/Dec/2007:07:41:55 -0600] “GET /?piska233&dira=/tmp HTTP/1.1″ 200 9930 “-” “Opera/9.24 (Windows NT 5.1; U; ru)” [24/Dec/2007: 07:41:55 -0600] "GET /? Piska233 & dira = / tmp HTTP/1.1" 200 9930 "-" "Opera/9.24 (Windows NT 5,1 U; ru)"
[24/Dec/2007:07:41:54 -0600] “GET /wp-admin/options-misc.php?updated=true HTTP/1.1″ 200 7842 “http://blog.taragana.com/wp-admin/options-misc.php” “Opera/9.24 (Windows NT 5.1; U; ru)” [24/Dec/2007: 07:41:54 -0600] "GET / wp-admin/options-misc.php? Mise à jour = true HTTP/1.1" 200 7842 "http://blog.taragana.com/wp- admin / options-misc.php "" Opera/9.24 (Windows NT 5,1 U; ru) "
[24/Dec/2007:07:42:36 -0600] “POST /index.php?piska233&dira=./ HTTP/1.1″ 200 36721 “http://blog.taragana.com/?piska233″ “Opera/9.24 (Windows NT 5.1; U; ru)” [24/Dec/2007: 07:42:36 -0600] "POST / index.php? Piska233 & dira =. / HTTP/1.1" 200 36721 "http://blog.taragana.com/?piska233" "Opera/9.24 (Windows NT 5,1 U; ru) "
[24/Dec/2007:07:43:23 -0600] “GET /index.php?piska233&dira=./wp-content/plugins/Wysi-Wordpress/themes/advanced/docs/es/images HTTP/1.1″ 200 6506 “-” “Opera/9.24 (Windows NT 5.1; U; ru)” [24/Dec/2007: 07:43:23 -0600] "GET / index.php? Piska233 & dira =. / wp-content/plugins/Wysi-Wordpress/themes/advanced/docs/es/images HTTP/1.1" 200 6506 "-" "Opera/9.24 (Windows NT 5,1 U; ru)"
[24/Dec/2007:07:43:38 -0600] “GET /wp-content/plugins/Wysi-Wordpress/themes/advanced/docs/es/images HTTP/1.1″ 301 298 “-” “Opera/9.24 (Windows NT 5.1; U; ru)” [24/Dec/2007: 07:43:38 -0600] "GET / wp-content/plugins/Wysi-Wordpress/themes/advanced/docs/es/images HTTP/1.1" 301 298 "-" "Opera/9.24 (Windows NT 5,1 U; ru) "
[24/Dec/2007:07:43:40 -0600] “GET /wp-content/plugins/Wysi-Wordpress/themes/advanced/docs/es/images/ HTTP/1.1″ 200 604 “-” “Opera/9.24 (Windows NT 5.1; U; ru)” [24/Dec/2007: 07:43:40 -0600] "GET / wp-content/plugins/Wysi-Wordpress/themes/advanced/docs/es/images / HTTP/1.1" 200 604 "-" "Opéra / 9.24 (Windows NT 5,1 U; ru) "

The good news is that no harm was done. La bonne nouvelle, c'est qu'aucun dommage est fait.

WordPress security issues & design flaw WordPress questions de sécurité et des défauts de conception

The basic design flaw is that loading WordPress configuration (required for database access for authentication checks) loads wp-settings which loads tons of other PHP files as well as all the WordPress plugins and any hacks. Le vice de conception de base est que le chargement de configuration de WordPress (pour les accès aux bases de données pour les contrôles d'authentification) charge wp-paramètres qui charge tonnes d'autres fichiers PHP ainsi que toutes les connexions de WordPress et toute hacks. All of these are done even before you have a chance to authenticate the user. Tous ces éléments sont fait avant même que vous avez une chance pour authentifier l'utilisateur. This is extremely dangerous for administration scripts as it allows a hacker to pass arguments to and execute gazillions of WordPress files which may or may not have proper security checks in place. C'est extrêmement dangereux pour l'administration des scripts car elle permet à un pirate informatique pour transmettre des arguments au gazillions et d'exécuter des fichiers de WordPress qui mai mai ou pas bon contrôles de sécurité en place. User authentication and entitlement should be done at the very beginning to prevent unauthenticated scripts from proceeding any further. L'authentification de l'utilisateur et le droit doit se faire au tout début pour éviter les scripts de non authentifiés d'aller plus loin. To do that wp-config must be modified to not include wp-settings. Pour ce faire wp-config doit être modifié de ne pas inclure wp-paramètres. It should be separately included where required, even at the cost of redundancy. Il devrait être inclus séparément le cas échéant, même au prix de licenciement. Administration scripts (under wp-admin) requires only wp-config to get the database details to authenticate the user and identify its entitlements. Des scripts d'administration (sous wp-admin) exige seulement wp-config pour obtenir la base de données d'informations pour authentifier l'utilisateur et d'identifier ses droits. After authentication the rest should be loaded. Après authentification le reste devrait être chargé. This flaw was exploited to get the authentication cookie details which was subsequently used. Cette irrégularité a été exploité pour obtenir le cookie d'authentification de détails qui a été utilisé par la suite. The exact exploit used in this case is hard to find from just server logs. Le exploiter exacte utilisée dans ce cas est difficile de trouver juste de logs du serveur. However it was caused by late authentication problem as described above. Toutefois, il a été causé par la fin de problème d'authentification tel que décrit ci-dessus.

There are were known issues with both options.php & upload script, some of which are detailed Il ya des problèmes connus ont été à la fois options.php et télécharger le script, dont certaines sont détaillées here ici .

One of the challenges with WordPress is that security considerations was mostly an afterthought (feel free to disagree) which were latched on as WordPress became more and more popular. L'un des défis avec WordPress est que des considérations de sécurité a été principalement une réflexion après coup (n'hésitez pas à en désaccord), qui ont été verrouillées comme WordPress est devenu de plus en plus populaire. You have to continuously update your WordPress to keep up with the latest patches. Vous devez continuellement mettre à jour vos WordPress et restez au fait des dernières mises à jour.

There are 71 reported security advisories in Secunia (22 reported in 2007) and 9 viruses based on WordPress (one from 2007). Il ya 71 avis de sécurité signalés dans Secunia (22 signalés en 2007) et de 9 virus basé sur WordPress (un à partir de 2007).

Most likely the site was hacked using the cookies authentication vulnerability as detailed Très probablement le site a été piraté en utilisant les cookies authentification vulnérabilité détaillée here ici .

Several WordPress plugins and themes also have security advisories: Plusieurs WordPress plugins et des thèmes ont également avis de sécurité:
- AdSense-Deluxe 0.x (plugin for WordPress) -- AdSense Deluxe-0.x (plugin pour WordPress)
- AndyBlue 1.x (theme for WordPress) -- AndyBlue 1.x (thème pour WordPress)
- Blix 0.x (theme for WordPress) -- Blix 0.x (thème pour WordPress)
- Blixed 1.x (theme for WordPress) -- Blixed 1.x (thème pour WordPress)
- BlixKrieg 2.x (theme for WordPress) -- BlixKrieg 2.x (thème pour WordPress)
- Blue Memories 1.x (theme for WordPress) -- Blue Memories 1.x (thème pour WordPress)
- myGallery 1.x (plugin for WordPress) -- MyGallery 1.x (plugin pour WordPress)
- PictPress 1.x (plugin for WordPress) -- PictPress 1.x (plugin pour WordPress)
- Pool 1.x (theme for Wordpress) -- Poule 1.x (thème pour Wordpress)
- Redoable 1.x (theme for WordPress) -- Redoable 1.x (thème pour WordPress)

You can read all the Secunia advisories on WordPress Vous pouvez lire tous les avis de Secunia sur WordPress here ici .

Who was the hacker? Qui est le pirate?

The IP address of the user responsible for hacking my site is 217.74.245.85 . L'adresse IP de l'utilisateur responsable de piratage mon site est 217.74.245.85. The IP address belongs to KUBANGSM-NET: L'adresse IP appartient à KUBANGSM-NET:

 % Information related to '217.74.245.0/24AS29497'  route:          217.74.245.0/24 descr:          KUBANGSM-NET origin:         AS29497 mnt-by:         KUBANGSM-MNT source:         RIPE # Filtered % Informations relatives à'217 .74.245.0/24AS29497 route: 217.74.245.0/24 descr: KUBANGSM-NET origine: AS29497 mnt-by: MNT-KUBANGSM source: RIPE # Filtered 

It is owned by: Elle est détenue par:

 person:       Volkov Denis address:      61, Gimnazicheskaya str. Personne-ressource: Denis Volkov adresse: 61, Gimnazicheskaya str. 350000, Krasnodar, Russia phone:        +7 8612 660126 fax-no:       +7 8612 401505 e-mail:       d.volkov@kuban.mts.ru nic-hdl:      VD370-RIPE source:       RIPE # Filtered 350000, Krasnodar, Russie Tél: +7 8612 660126 fax-no: +7 8612 401505 e-mail: d.volkov @ kuban.mts.ru nic-hdl: VD370-RIPE source: RIPE # Filtered 

Their website is Leur site est http://www.kuban.mts.ru/ . They appear to be legitimate mobile & internet service provider. Ils semblent être légitimes mobiles et fournisseur de services Internet. Most likely their internet service is being abused by the spammer. Les plus susceptibles de leur service Internet est victime de mauvais traitements par le spammeur. Nevertheless I decided to Néanmoins, j'ai décidé de ban this IP address from accessing my server interdire cette adresse IP d'accéder à mon serveur .

The hacker was most likely using Opera 9.24 browser (almost latest version) on Windows XP (NT 5.1). Le hacker a été probablement navigateur Opera 9,24 (près de la dernière version) sur Windows XP (NT 5.1). While user agent can be faked, there is no reason to suspect so in this case. Tout agent utilisateur peut être fausse, il n'ya aucune raison de soupçonner le cas en l'espèce. The user agent string also shows that he was using the russian language file of Opera. L'agent utilisateur chaîne montre également qu'il utilisait le fichier de langue russe de l'Opéra.

Magic Shell de mag capture d'écran

Anatomy of the hacking script Anatomie du piratage script

The hacking script is a php script with aa nice comment and TODO line: Le piratage est un script php script avec aa beau commentaire et TODO ligne:
/*Magic Include Shell by Mag icq 884888*/ / * Inclure Magic Shell par Mag icq 884888 * /
//TODO: ñëèòü ôàéëî íà ñâîé ôòï (!) / / TODO: ñëèòü ôàéëî íà ñâîé ôòï (!)

Effectively it is a file manager, probably adapted from any of the free php file manager’s on the net. En effet, il est un gestionnaire de fichiers, probablement à partir de n'importe quel adapté de la libre php du gestionnaire de fichiers sur le net. It allows you to: Il vous permet de:

  • Browse directories and files Parcourir les répertoires et fichiers
  • Edit files Éditer des fichiers
  • Rename files Renommer des fichiers
  • Delete files Supprimer les fichiers
  • zip & unzip files zip et décompresser les fichiers
  • Upload & download files & directories Transférer et télécharger des fichiers et répertoires
  • Execute arbitrary PHP scripts Exécuter des scripts PHP arbitraires
  • Execute arbitrary shell commands Exécuter des commandes shell arbitraires
  • Provides basic server, system & PHP information Serveur de base, des systèmes et des informations PHP

The bulk of the code is executed when it receives a particular query string to a normal HTTP GET request. La majeure partie du code est exécuté quand il reçoit une chaîne de requête à la normale une requête HTTP GET. So while http://blog.taragana.com/ will work as usual, http://blog.taragana.com/?piska233 will open with this magical hidden shell which will expose your entire website to an outside hacker. Ainsi, alors que http://blog.taragana.com/ fonctionne comme d'habitude, http://blog.taragana.com/?piska233 s'ouvrira avec cette magique caché shell qui exposent l'ensemble de votre site à l'extérieur un hacker.
Note: There is nothing magical about piska233. Note: Il n'ya rien de magique à propos de piska233. It is a password which was most likely allowed to be chosen and given as input to the original script which injected this trojan horse on my site. Il s'agit d'un mot de passe qui est fort probable que le droit d'être choisi et donné à titre de contribution au scénario original qui a injecté ce cheval de Troie sur mon site.

A trojan which protects itself against worms… Un trojan qui se protège contre les vers…

The trojan takes steps to protect itself against worm! Le cheval de Troie prend des mesures pour se protéger contre le ver! The code at the end which is always executed is: Le code à la fin qui est toujours exécuté est:

$post_arr=implode('.',$_POST); post_arr $ = implode ('.',$_ POST);
$get_arr=implode('.',$_GET); get_arr $ = implode ('.',$_ EEG);
$cook_arr=implode('.',$_COOKIE); cook_arr $ = implode ('.',$_ cookie);
$post_arr_key=implode('.',@array_flip($_POST)); post_arr_key $ = implode ('.',array_flip ($ _POST));
$get_arr_key=implode('.',@array_flip($_GET)); get_arr_key $ = implode ('.',array_flip ($ _GET));
$cook_arr_key=implode('.',@array_flip($_COOKIE)); cook_arr_key $ = implode ('.',array_flip ($ _COOKIE));
$other_shtuki=@file_get_contents('php://input'); other_shtuki $ = @ file_get_contents ( 'php: / / input');
$cracktrack = strtolower($post_arr.$get_arr.$cook_arr.$post_arr_key.$get_arr_key.$cook_arr_key.$other_shtuki); cracktrack $ = strtolower ($ post_arr. get_arr $. cook_arr $. post_arr_key $. get_arr_key $. cook_arr_key $. other_shtuki $);
$wormprotector = array('base64','user_pass','union','select','substring','or id='); wormprotector $ = array ( "base64 ',' user_pass', 'union', 'select', 'sous',' or id = ');
$checkworm = str_replace($wormprotector, '*', $cracktrack); checkworm $ = str_replace ($ wormprotector, '*', $ cracktrack);
if ($cracktrack != $checkworm) die(""); if ($ cracktrack! checkworm = $) die ("");

It checks for certain keywords (in $wormprotector array) within GET, POST & COOKIE data. Il vérifie pour certains mots clés (dans wormprotector $ array) au sein de GET, POST et COOKIE données. When they are present it simply aborts. Quand ils sont présents, il s'arrête tout simplement. This is one of the means to detect the current version of the script. C'est un des moyens pour détecter la version actuelle du script. This is also the reason why it failed to submit a post. C'est aussi la raison pour laquelle elle n'a pas réussi à présenter un poste. An url such as this would also die - http://localhost/wordpress/?select as would http://localhost/wordpress/?base64. Une URL comme celle-ci ne meurent aussi - http://localhost/wordpress/?select de même que http://localhost/wordpress/?base64.
However there is nothing to be happy about. Toutefois, il n'ya rien à être heureux. It will take less than a minute to modify the script and make it immune to detection in WordPress. Il prendra moins d'une minute pour modifier le script et rendent insensibles à la détection dans WordPress.

How to protect your WordPress site from hacking? Comment protéger votre site WordPress de piratage?

You can protect your administration scripts (scripts under wp-admin), where most attacks originate including this one, by restricting access to your admin scripts to specific IP address or IP address range. Vous pouvez protéger votre administration scripts (scripts sous wp-admin), où sont originaires la plupart des attaques dont celle-ci, en limitant l'accès à votre admin scripts pour l'adresse IP ou plage d'adresses IP. You can also add a basic authentication on top of WordPress by using your httpd.conf file or .htaccess. Vous pouvez également ajouter une authentification de base au-dessus de WordPress en utilisant votre fichier httpd.conf ou. Htaccess. This adds a layer of security which any hacker will have to overcome before he gets to your WordPress vulnerabilities. Cela ajoute une couche de sécurité tout hacker qui devra surmonter avant qu'il arrive à votre WordPress vulnérabilités.

WordPress should be upgraded as regularly as possible. WordPress devrait être mis à jour aussi régulièrement que possible. However that is easier said than done. Quoi qu'il est plus facile à dire qu'à faire. Normally I prefer to wait a few versions before the new versions stabilize. Normalement, je préfère attendre un peu avant les versions les nouvelles versions se stabiliser.

WordPress security vulnerabilities affects every one of us, WordPress based bloggers. WordPress failles de sécurité affecte chacun d'entre nous, en fonction des bloggers de WordPress. While I was fully aware of the possibilities and even thought of writing a plugin to address these issues before, I decided to wait (and address more urgent issues or so I thought) relying on the law of probability to protect my sites; after all there are several million WordPress blogs out there, how much chance of being targeted by a hacker? Alors que j'étais tout à fait conscient des possibilités et même la réflexion, l'écriture d'un plugin pour répondre à ces questions avant, j'ai décidé d'attendre (et l'adresse des questions plus urgentes ou alors j'ai pensé) en se fondant sur la loi de probabilité pour protéger mes sites, après tout ce qu'il sont plusieurs millions de blogs de WordPress là-bas, combien de chances d'être visés par un hacker? Well, as it turns out, I was wrong. Eh bien, comme il s'avère que j'avais tort.
To simplify securing WordPress, I have created a plugin, to be released soon, which leverages these ideas and more to secure your WordPress installations. Pour simplifier l'obtention de WordPress, j'ai créé un plugin, qui sera publié bientôt, qui met à profit ces idées et plus de garantir votre installation de WordPress. It works with your .htaccess but it also works even when .htaccess facility is not available. Il fonctionne avec votre compte. Htaccess, mais elle travaille aussi quand même. Htaccess n'est pas disponible. I have already started using it on my blogs. J'ai déjà commencé à utiliser sur mon blog.