SSRF 服务端请求伪造
一, 介绍
SSRF
(Server-Side Request Forgery
,服务器端请求伪造
)是一种恶意网络行为,
攻击者可以利用这种漏洞发送来自服务器的请求,以访问或操作服务器通常无法访问的内部资源。SSRF通常存在于应用程序中,该应用程序接受用户提供的URL,并基于该URL发出服务器端的HTTP请求。
二, php常用请求函数
1. file_get_contents()
// 直接访问一个URL地址,并输出结果
$resp = file\_get\_contents("http://192.168.112.188/security/login.html");
echo $resp;
2. fsockopen()
// 实例化一个到www.baidu.com:80的连接,超时时间30秒
$fp = fsockopen("www.baidu.com", 80, $errno, $errstr, 30);
$fp = fsockopen("192.168.112.188", 80, $errno, $errstr, 30);
// 拼接HTTP请求头
$out = "GET /security/login.html HTTP/1.1\r\n";
$out .= "Host: 192.168.112.188\r\n";
$out .= "Connection: Close\r\n\r\n";
// 将请求头写入$fp实例开始发送
fwrite($fp, $out);
// 按行读取响应并输出
while (!feof($fp)) {
echo fgets($fp, 1024);
}
fclose($fp);
3. curl_exec()
GET请求
$ch = curl\_init(); // 创建一个cURL资源,GET请求
// 设置URL和选项
curl\_setopt($ch, CURLOPT\_URL, "http://192.168.112.200/index.html");
curl\_setopt($ch, CURLOPT\_HEADER, 0); // 不返回响应头信息
curl\_exec($ch); // 抓取URL并把它传递给浏览器
curl\_close($ch); // 关闭cURL资源,并且释放系统资源
POST请求
$url = 'http://192.168.112.200/security/login.php';
$data = 'username=root&password=root&vcode=0000';
$ch = curl\_init();
$params[CURLOPT\_URL] = $url; // 请求url地址
$params[CURLOPT\_HEADER] = false; // 是否返回响应头信息
$params[CURLOPT\_RETURNTRANSFER] = true; // 是否将结果返回
$params[CURLOPT\_FOLLOWLOCATION] = false; // 是否重定向
$params[CURLOPT\_TIMEOUT] = 30; // 超时时间
$params[CURLOPT\_POST] = true; // 本次发送POST请求
$params[CURLOPT\_POSTFIELDS] = $data; // 给POS