跳转至

SSRF

SSRF

概念

SSRF,Server-Side Request Forgery,服务端请求伪造,是一种由攻击者构造形成由服务器端发起请求的一个漏洞。一般情况下,SSRF 攻击的目标是从外网无法访问的内部系统。
漏洞形成的原因大多是因为服务端提供了从其他服务器应用获取数据的功能且没有对目标地址作过滤和限制。

利用

  1. 可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的 banner 信息
  2. 攻击运行在内网或本地的应用程序(比如溢出)
  3. 对内网 WEB 应用进行指纹识别,通过访问默认文件实现
  4. 攻击内外网的 web 应用,主要是使用 GET 参数就可以实现的攻击(比如 Struts2,sqli 等)
  5. 利用 file 协议读取本地文件等

建立ssrftest.php

<?php
function curl($url){
                $ch = curl_init();
                curl_setopt($ch, CURLOPT_URL, $url);
                curl_setopt($ch, CURLOPT_HEADER, 0); 
                curl_exec($ch);
                curl_close($ch); 
}
$url = $_GET['url'];
curl($url);
?>

dict协议查看端口

开着就显示
http://127.0.0.1/php/csrf/ssrftest.php?url=dict://127.0.0.1:80
image.png

file协议读取文件

http://127.0.0.1/php/csrf/ssrftest.php?url=file://D://anquan//localtest//WWW//php//csrf//1.txt
image.png

函数

file_get_contents()

这段代码使用 file_get_contents 函数从用户指定的 URL 获取图片。然后把它用一个随即文件名保存在硬盘上,并展示给用户。

<?php
if (isset($_POST['url']))
{ 
    $content = file_get_contents($_POST['url']); 
    $filename ='./images/'.rand().'.jpg'; 
    file_put_contents($filename, $content); 
    echo $_POST['url']; 
    $img = "<img src=\"".$filename."\"/>"; 
    echo $img;
}
else
{
    echo "no url!";
}
?>

用phpstudy请求https的图片可能会出问题
解决:打开你的php.ini配置文件,定位到下图蓝色所示的位置,把extension=php_openssl.dll 前面的; 分号去掉。

image.png

fsockopen()

<?php 
function GetFile($host,$port,$link) { 
    $fp = fsockopen($host, intval($port), $errno, $errstr, 30); 
    if (!$fp) { 
        echo "$errstr (error number $errno) \n"; 
    } else { 
        $out = "GET $link HTTP/1.1\r\n"; 
        $out .= "Host: $host\r\n"; 
        $out .= "Connection: Close\r\n\r\n"; 
        $out .= "\r\n"; 
        fwrite($fp, $out); 
        $contents=''; 
        while (!feof($fp)) { 
            $contents.= fgets($fp, 1024); 
        } 
        fclose($fp); 
        return $contents; 
    } 
}
?>

IP绕过

添加端口

短网址

指向任意IP的域名

xip.io
127.0.0.1.xip.io就会跳转到127.0.0.1

进制转换

0177.0.0.1 -> 127.0.0.1(八进制)
0x7f.0.0.1 -> 127.0.01(十六进制)
0x7f000001 -> 127.0.0.1(十六进制整数)
2130706433 -> 127.0.0.1(十进制整数)

www.baidu.com@127.0.0.1会以www.baidu.com的身份访问127.0.0.1
image.png

gopher协议

懵了,再说吧

在redis中利用

在mysql中的利用

原文: https://www.yuque.com/hxfqg9/web/gh1ztw