初步了解:看见哪些函数可以使用SSRF
curl_exec()用途:发起 HTTP 请求(如 GET/POST)。
风险:直接使用用户输入的 URL 参数,可能导致服务器访问任意目标。
示例代码
1
2
3$url = $_GET['url'];
$ch = curl_init($url);
curl_exec($ch);
file_get_contents()用途:读取文件或 URL 内容。
风险:若参数可控,可通过
file://协议读取本地文件,或通过http://访问内网资源。示例代码
1
$content = file_get_contents($_GET['url']);
fsockopen()用途:创建网络套接字连接。
风险:直接使用用户输入的 IP 和端口,可能导致端口扫描或访问内网服务。
示例代码
1
2
3$host = $_GET['host'];
$port = $_GET['port'];
$socket = fsockopen($host, $port);
stream_socket_client()- 用途:创建网络流连接。
- 风险:与
fsockopen()类似,参数可控时可访问任意地址。
file_put_contents()- 用途:写入文件或 URL 内容。
- 风险:结合
php://filter等协议可篡改文件内容。
parse_url()用途:解析 URL。
风险:若未严格验证 URL 格式,可能被利用构造恶意协议(如
dict://)。
1.前置知识:
为什么我们可以访问内网?—–NAT协议
NAT协议———–把我们的内网的ip作为公网的一个端口,当访问公网+那个端口时候,就会直接访问内网

2.实战:
步骤:
1.先尝试
1 | http://www.baidu.com/img/PC_wenxin_1142bc061306e094e6eddaa3d9656145.gif |
如果有返回就是存在SSRF
2.尝试读取本地文件
1 | ?url=file:///c:/windows/system32/drivers/etc/hosts |
3.可利用的协议
1 | file:/// -- 本地文件传输协议,主要用于访问本地计算机中的文件 |
4.简单的基础例题:
