ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SSRF学习(未写完)

2022-07-28 18:02:59  阅读:236  来源: 互联网

标签:http 未写 SSRF url 学习 DNS file com


SSRF学习(未写完)

SSRF简介

​ SSRF,Server-Side Request Forgery,服务端请求伪造,是一种由攻击者构造形成由服务器端发起请求的一个漏洞。一般情况下,SSRF 攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)

​ SSRF 形成的原因往往是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。 如:从指定URL地址获取网页文本内容,加载指定地址的图片,下载等。利用的就是服务端的请求伪造。SSRF 使用有缺陷的 Web 应用程序作为代理来攻击远程和本地服务器。

例子:

GET /index.php?url=http://10.1.1.1/ HTTP/1.1
Host: example.com

攻击者不能直接访问10.1.1.1,但是可以通过example.com访问10.1.1.1,这就是SSRF

如下图所示

Penetration testing - SSRF vulnerability summary

SSRF漏洞场景

  • 能够对外发起网络请求的地方,就可能存在 SSRF 漏洞
  • 从远程服务器请求资源(Upload from URL,Import & Export RSS Feed)
  • 数据库内置功能(Oracle、MongoDB、MSSQL、Postgres、CouchDB)
  • Webmail 收取其他邮箱邮件(POP3、IMAP、SMTP)
  • 文件处理、编码处理、属性信息处理(ffmpeg、ImageMagic、DOCX、PDF、XML)

SSRF漏洞危害

  • 读取或更新内部资源,造成敏感的内网文件泄露
  • 对外网服务器所在的内网进行端口扫描,获取内网服务的banner等信息
  • 将含有漏洞防主机用作代理/跳板攻击内网主机,从而绕过防火墙攻击内网系统

涉及后端PHP函数

​ 任何语言都可能存在SSRF漏洞,接下来仅列举PHP中常出现SSRF漏洞的函数

curl_exec()

用于执行给定的CURL会话。

如以下代码所示

<?php
$ch = curl_init();// 创建一个CURL资源
// 设置URL和相应的选项
curl_setopt($ch, CURLOPT_URL, $_REQUEST['url']);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);// 抓取URL并把它传递给浏览器
curl_close($ch);// 关闭CURL资源,并且释放系统资源
?>

此时就可以利用url参数,实现对内网文件的访问,如 url=127.0.0.1/README.md

file_get_contents

file_get_content函数从用户指定的url获取内容,file_put_content函数把一个字符串写入文件中。

如以下代码所示

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

​ 这段代码使用 file_get_contents 函数从用户指定的 URL 获取图片内容。然后通过file_put_content把它用一个随机文件名保存在硬盘上,最后展示给用户。此处就可以实现访问内网文件。

fsockopen()

​ 打开一个网络连接或者一个Unix套接字连接

​ fsockopen函数实现对用户指定url数据的获取,该函数使用socket(端口)跟服务器建立tcp连接,传输数据。

<?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; 
    } 
}
?>

​ 以上实例函数调用fsockopen函数实现接收数据,并最终返回函数。可能造成内网数据泄露。

涉及协议

file伪协议

file://

可以访问本地的文件,在有辉县的情况下可以读取任何文件,如

http://127.0.0.1/ssrf.php?url=file:///etc/passwd
http://127.0.0.1/ssrf.php?url=file:///var/www/html/flag.php

dict协议

扫描端口

gopher协议

进行post等 关键是url编码处理

常见绕过方式

更改ip地址为其他进制绕过

通过短地址302重定向跳转绕过

添加@解析url绕过

特殊数字绕过( Enclosed alphanumerics)

ⓔⓧⓐⓜⓟⓛⓔ.ⓒⓞⓜ  >>>  example.com
List:
① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳ 
⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇ 
⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛ 
⒜ ⒝ ⒞ ⒟ ⒠ ⒡ ⒢ ⒣ ⒤ ⒥ ⒦ ⒧ ⒨ ⒩ ⒪ ⒫ ⒬ ⒭ ⒮ ⒯ ⒰ ⒱ ⒲ ⒳ ⒴ ⒵ 
Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ 
ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ 
⓪ ⓫ ⓬ ⓭ ⓮ ⓯ ⓰ ⓱ ⓲ ⓳ ⓴ 
⓵ ⓶ ⓷ ⓸ ⓹ ⓺ ⓻ ⓼ ⓽ ⓾ ⓿

DNS重绑定绕过

http://blog.leanote.com/post/snowming/e2c24cf057a4

防御

  • 禁用不需要的协议。仅仅允许 http 和 https 请求。可以防止类似于 file:///,gopher://等引起的问题。
  • 设置url和ip白名单
  • 请求url时,禁止 30x跳转

注:此流程图对DNS重绑定无法防御,暂未学习到如何防御DNS重绑定

暂未学习如何防御DNS重绑定暂未学习如何防御DNS重绑定暂未学习如何防御DNS重绑定

参考资料

https://ctf-wiki.org/web/ssrf/#ssrf_1

https://tttang.com/archive/1648/#toc__1

http://blog.leanote.com/post/snowming/e2c24cf057a4

https://developpaper.com/penetration-testing-ssrf-vulnerability-summary/

https://blog.csdn.net/qq_43378996/article/details/124050308?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165709675416782248553668%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165709675416782248553668&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-124050308-null-null.142%5Ev31%5Epc_rank_34,185%5Ev2%5Econtrol&utm_term=SSRF&spm=1018.2226.3001.4187

标签:http,未写,SSRF,url,学习,DNS,file,com
来源: https://www.cnblogs.com/qweg/p/16529616.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有