SSRF(服务器端请求伪造)
0x01. 相似原理:
翻译: 提供需要翻译的文字 -> 翻译软件 -> 返回翻译后的数据 A 控制 B 去访问 C 网页翻译原理: 方案A: 1.请求目标站点 2.获取浏览器上面的目标站点数据 3.翻译软件把数据返回 方案B: 1.提供目标网址给翻译网站 2.翻译网站代访问,得到目标网站数据 3.翻译网站返回翻译后的数据
SSRF:指攻击者能够从易受攻击的Web应用程序发送设计的请求对其他网站进行攻击(利用一个可发起网络请求的服务当做跳板来攻击其他目标)
0x02. SSRF的核心是攻击内网
通过SSRF可以做到如下:
- 扫描内部网络
- 向内部任意主机和任意端口发送数据包
- DOS
- 暴力穷举:网络请求
有些时候厂商为什么会用已知漏洞组件
- 使用的时候没有漏洞
- 爆发漏洞管理员没关注
- 漏洞修复有风险
- 内网不会被黑客访问到。 防御SSRF方法: 1.正则匹配法 内网ip:http://内网IP地址 禁止url写内网ip http://www.baidu.com@59.63.200.79:8003 @绕过 当@被禁止时可以用DNS方法: dnslog中的所有url都是访问127.0.0.1 访问网站的协议有很多: 使用file协议读取本地文件 用法:file:/// 读取文件 使用dict(可探测端口) 用法:dict://地址 端口 dict://127.0.0.1:81 Redis:缓存数据库(默认情况没有密码) 但是只有本机能够访问 SSRF -> 1.可作为跳板 2.可以攻击内网网站 3.可以攻击内网的服务
0x03. 如何发现ssrf:
传参出现协议头: http:// http://www.baidu.com/s?wd=ip 协议:http:// 任意其他协议都可以试试SSRF 传参出现文件名: a.txt => b.php (x.后缀) http://www.baidu.com/?id=1.php (1)文件读取 (2)文件包含 (3)任意文件下载
0x04. SSRF、CSRF、XSS的区别:
CSRF: 利用cookie,让浏览器偷偷发包 CSRF(客户端请求伪造、跨站请求伪造) -> 控制受害者的浏览器发起网络请求 核心:浏览器在用户不知情的情况下偷偷发送数据包 XSS: 窃取cookie,在浏览器上执行
SSRF:在服务器上执行,让服务器偷偷发包 (跟后端有关,与前端无关) SSRF(服务端请求伪造) -> 控制目标服务器发起网络请求
代码语言:javascript复制如何防御SSRF
正则匹配法,禁止访问内网ip 127.0.0.1,@绕过
有防御肯定有绕过,dnslog中的所有域名都是访问127.0.0.1
测试
代码语言:javascript复制打开靶场,让输入想访问的地址
这里就填写baidu.com
可以发起网络请求,存在SSRF,但SSRF的核心就是攻击内网,试试访问127.0.0.1:80能不能够访问到
成功访问到127.0.0.1:80,所以页面有相同 既然能够访问到,那就用burp跑一下,用dict探测端口开放了哪些
代码语言:javascript复制这时候还没跑完,但是有看到开放了80 81端口,先让他跑着,手动访问一下81端口看有没有什么内容。
发现页面是没有任何东西,但是打开页面源代码,发现了flag。
进阶内容(利用gopher、redis getshell)
0.01. 安装Redis
在kali中安装redis,安装版本命令下载压缩包 :
wget http://download.redis.io/releases/redis-2.8.17.tar.gz
解压:tar xzf redis-2.8.17.tar.gz
进入到redis目录:cd redis-2.8.17
make
然后进入到src文件夹,./redis-server
启动redis服务
然后再./redis-cli
启动redis 输入ping 如果返回pong就正常正常启动了
0x02. 创建根目录并配置redis
首先需要用到root权限,进入home文件夹后创建一个wwwroot文件夹,在wwwroot中创建一个default文件夹,以便存放后续的一句话木马。
/home/wwwroot/default
是网站的根目录.
这里我保存失败了,需要用ROOT权限来启动Redis,又重新来过,用root权限开启redis服务器以及运行redis
0x03. 开启Wireshark监听网卡
打开Wireshark,选择kali网卡进行监听,然后在redis中,刚刚创建好的根目录下写入一个一句话木马。
在Wireshark中右键 -> 追踪TCP流 -> 复制所有内容进行url编码
由于事先没有开启wireshark监听网卡,所以这里我开启wireshark之后,又重新创建了一个一句话木马
在wireshark中,直接右键追踪-TCP流
将数据复制下来,进行url编码
url编码之后加上gopher
的前缀,然后放到搜索框内,点击执行,上面这张图因为没有将?进行url编码导致失败,一定要将问号也进行url编码.
总结一下遇到的问题:
1.下载安装redis之后用root权限运行redis相关服务、启动
2.开启wireshark监听网卡之后再用redis执行恶意语句
3.首先需要想办法获取到网站的目录
4.在对追踪到的tcp数据流内容进行url编码的时候,换行需要用
来代替,问号用?,然后加上gopher前缀gopher://127.0.0.1:6379/ 其中6379是redis默认端口号