SSRF
简介
SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF是要目标网站的内部系统。(因为他是从内部系统访问的,所有可以通过它攻击外网无法访问的内部系统,也就是把目标网站当中间人
原理
攻击者通过控制内网一台服务器进而攻击在同一内网的其他的服务器
原因
服务器端的验证并没有对其请求获取图片的参数(image=)做出严格的过滤以及限制,导致A网站可以从其他服务器的获取数据
简析
SSRF漏洞就是通过篡改获取资源的请求发送给服务器,但是服务器并没有检测这个请求是否合法的,然后服务器以他的身份来访问其他服务器的资源。
用途
可以对外网、服务器所在的内网、本地进行端口扫描,获取一些服务器的banner(指纹信息)信息
攻击运行在内网或本地的应用程序(比如溢出)
对内网的web进行指纹识别,通过访问默认文件实现
攻击内外网的web应用,主要是使用get参数就可以实现的攻击(比如struts2 sqli等)
利用file协议读取本地文件
分析
SSRF攻击结果由函数本身来决定,函数的功能越强大,攻击的成功的几率就越大,如:curl_init 、 file_get_contents、 fsockopen(白盒测试,代码审计)
实例
curl_init()
端口探测
可以请求目标主机同一网段的其他主机服务
文件读取
可以读取目标主机本地的文件,用于webshell
file_get_contents()
访问内网的其他主机
通过php协议读取php文件
因为是base64编码过的。所以讲所有信息进行解码以后就能看到,默认就是ssrf目录。所以不需要加../,也可以换成其他目录读取文件,如:c:/xxx.php或者d:/xxx/yyy/zzz.php
指纹识别
如何挖到SSRF漏洞(黑盒测试)
1) 分享:通过url地址分享网页的内容
2) 转码服务
3) 在线翻译
4) 图片加载与下载;通过url地址加载与下载图片
5) 图片、文章收藏功能
6) 未公开的api实现与其他调用得url的功能
7) 从url关键词来查找【share/wap/url/link/src/source/target/display/sourceURL/imageURL/domain/...】
ssrf和redis
ps:这里选择的redis是redis-6.0.1.16,在高本版的redis中修复了这个漏洞。kali2021
安装过程
cd 到redis所在目录,如果出现tab补全失效。可以使用base -i
make进行编译
cd 到src目录。将redis-server复制到uer/bin中
返回上一级。将redis.conf复制到/etc下
进入etc目录。启动redis服务加载redis.conf文件并在后台运行
查看redis是否启动
修改配置文件
将bind改为0.0.0.0
将防火墙关闭以及保护模式
连接redis
实操
开启Apache服务
定义 web站点路径并生成webshell文件。写入一句话木马进入文件
服务端验证一句话木马
使用剑蚁连接
注意事项
在redis使用webshell时一定要注意:
1.redis-cli连接到redis,出现不能连接注意redis-server版本是否过高。查看reids.conf中bind是否是0.0.0.0以及protected-mod是否为no
2.配置文件配置成功后。要重新加载配置文件
3.目标服务器是否开启web功能,确认web路径
4.web目录是否具有写入权限
整体流程
1.目标服务器中需要有redis服务,且对外开放
2.目标服务器中需要有web服务,且确认web目录以及目录的权限
3.连接reids成功后。在redis中为web站点目录植入shell脚本