1.客户端请求
客户端请求指的是由客户端设备(如个人计算机、智能手机、平板电脑等)或软件(浏览器、各种APP)发出的请求,以获取指定的网页、图片、视频或其他资源。比如当用户在浏览器中输入URL或点击链接时,浏览器会自动发起HTTP请求,请求服务器返回指定的资源。
2.服务器端请求
服务器上的应用程序或服务会提供一些功能接口,比如API接口,用于与其他服务进行数据交互。这些由服务器向其他的服务器发起的请求称之为服务器端请求。
3.服务器端请求伪造
服务器端请求伪造(Server-side Request Forgery) 简称SSRF,是指攻击者通过伪造服务器端请求,从而使服务器发起对第三方系统的攻击或访问。攻击者通常会使用受害者服务器上的应用程序作为代理来发起请求,以使请求看起来像是由服务器发起的。
4.漏洞场景
以百度在线翻译为例,其允许用户传入URL,然后百度在线翻译会去请求该URL将的到的结果进行翻译并返回给用户。
在这个过程中,如果百度在线翻译没有对用户传入的URL进行验证,则攻击者可以传入一个百度的内网地址,那么百度翻译就会请求这个内网地址将得到的结果进行翻译并返回给攻击者,从而攻击者就成功的获得了百度翻译这个服务器的内网其他信息。
5.漏洞函数
PHP:
这些函数用于发出HTTP请求,包括常见的函数如curl_exec() 、file_get_contents()、fsockopen()。如果这些函数允许从用户输入中获取URL,但未正确验证和过滤用户输入,攻击者可以通过在URL中注入恶意代码来触发SSRF漏洞。
JAVA:
仅支持HTTP/HTTPS协议的类:HttpClient 类、HttpURLConnection 类、 OkHttp 类、 Request 类
支持sun.net.www.protocol所有协议的类:URLConnection 类、URL类、ImageIO 类
(1)Curl_exec()
格式: curl_exec(resource Sch)
作用:执行CURL会话
<?php
// 创建一个cURL资源
$ch = curl_init();
// 设置URL和相应的选项
curl_setopt($ch, CURLOPT_URL, "https://www.baidu.com/");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
// 抓取URL并把它传递给浏览器
curl_exec($ch);
// 关闭cURL资源,并且释放系统资源
curl_close($ch);
?>