Web漏洞之SSRF初探

介绍

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

SSRF漏洞形成的原因大多是因为服务端提供了从其他服务器应用获取数据的功能且没有对目标地址作过滤和限制

SSRF漏洞的危害

  • 扫描内网开放的端口
  • 读取主机任意文件
  • 攻击内网应用,redis,mysql等

攻击危害如下:

  • 对内网Web应用进行指纹识别,端口扫描,识别资产信息。
  • 攻击内外网的Web应用,使用Gohper协议发送HTTP GET请求攻击如:Thinkphp\Struts2。
  • 利用 file 协议读取文件。

SSRF分类

有回显

显示对攻击者的响应,因此在服务器获取攻击者要求的URL后,它会将响应内容发送给攻击者。返回结果到客户端,比如传过去www.baidu.com,客户端回显百度HTML源码,并解析。

无回显

响应结果不会返回到客户端攻击者将提供url,但是该url中的html数据不会返回给攻击客户端。要在这种情况下确认漏洞,攻击者必须使用Dnslog类工具。

PHP中造成SSRF漏洞函数

  1. curl_exec() 前端传进来的 url 被后台使用 curl_exec() 进行请求
  2. file_get_contents() 将整个文件或一个url所指向的文件读入一个字符串中
  1. fsockopen():打开一个网络连接或者一个Unix 套接字连接。

curl_exec

前端传进来的 url 被后台使用 curl_exec() 进行请求,然后将请求的结果返回给了前端。

<?php
// 创建一个cURL资源
$ch = curl_init();

$url = @$_GET['url'];
// 设置URL和相应的选项
curl_setopt($ch, CURLOPT_URL, $url);

// 抓取URL并把它传递给浏览器
curl_exec($ch);

// 关闭cURL资源,并且释放系统资源
curl_close($ch);
?>

file_get_contents()

把整个文件读入一个字符串中。

使用file_get_contents函数从用户指定的url获取图片

<?php

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

SSRF利用到的协议

http协议

将页面html代码返回到客户端。

file协议

本地文件传输协议,主要用于访问本地计算机中的文件。

伪协议读取本地文件
url=file///D://phpStudy/PHPTutorial/WWW/test.dtd

dict协议

字典服务器协议,dict是基于查询相应的TCP协议。

dict协议与http协议可用来探测内网的主机存活与端口开放情况。

gopher协议

互联网上使用的分布型的文件搜集获取网络协议, 可以发送 GET、POST 请求 , 如果发起post请求,回车换行需要使用%0d%0,参数之间的&也需要进行URL编码

格式:URL:gopher://<host>:<port>/<gopher-path>_后接上TCP数据流

使用Gopher发送http数据包步骤

1、构造HTTP数据包

2、URL编码、替换回车换行为%0d%0a

3、发送gopher协议

gopher协议时在url后加入一个字符(该字符可随意写)

curl gopher://192.168.1.2/_QWER
接收后内容_下划线就消失了
所以在URL后需要随便跟一个字符。

GET请求

构造HTTP数据包

URL编码、替换回车换行为%0d%0a,HTTP包最后加%0d%0a代表消息结束

发送gopher协议, 协议后的IP一定要接端口
<?php
    echo "Hello ".$_GET["user"]."\n"
?>

  1. 构造http数据包
GET /index.php?user=Admin HTTP/1.1
Host: 121.5.154.136
  1. URL编码
curl gopher://121.5.154.136:80/_GET%20/index.php%3fname=Margin%20HTTP/1.1%0d%0AHost:%20121.5.154.136%0d%0A

POST请求

POST与GET传参的区别:它有4个参数为必要参数

需要传递Content-Type,Content-Length,host,post的参数

切记:Content-Length和POST的参数长度必须一致

  1. 我们正常HTTP发送POST请求
POST /ssrf/base/post.php HTTP/1.1
host:121.15.154.136
Content-Type:application/x-www-form-urlencoded
Content-Length:10
 
user=Admin
  1. 进行URL编码:
curl gopher://121.5.154.136:80/_POST%20/index.php%20HTTP/1.1%0d%0AHost:121.5.154.136%0d%0AContent-Type:application/x-www-form-urlencoded%0d%0AContent-Length:10%0d%0A%0d%0Auser=Admin%0d%0A

常见绕过方式

1. 限制 http://www.bbbbb.com 域名

• 采用http基本身份认证的绕过方式,即使用@绕过。如:http://xxxx.com@127.0.0.1

• 注意:在对@解析域名中,不同的处理函数存在处理差异。如:在PHP的parse_url中会识别www.ccc.com,而libcurl则识别为www.bbb.com

2.绕过IP限制

• 采取特殊域名,如:xip.io可以指向任意域名,即127.0.0.1.xip.io,可解析为127.0.0.1

• 采取进制转换。如:127.0.0.1 转换成十六进制 0x7f.0.0.1

• 多进制混合 IP,如 http://0177.0x0.0x0.1,相当于 127.0.0.1

3.绕过 URL 解析限制

• URL 欺骗方式,如

http://127.1.1.1@127.2.2.2,http://evil$http://google.com,http://google.com#@http://evil.com……

• 302 跳转切换协议,如请求头注入"Location: dict://http://lagou.com"

• Unicode 转换,如

http://evil.c ℀.http://office.com

• 采取短网址绕过,站长工具短网址 http://tool.chinaz.com/tools/dwz.aspx

Gopher打redis:SSRF--gopher协议打FastCGI_Z3eyOnd的博客-CSDN博客

SSRF打FastCGI:SSRF漏洞之FastCGI利用篇【二】 - FreeBuf网络安全行业门户

SSRF挖掘(功能点)

  1. 分享:通过URL地址分享网页内容。
  2. 转码服务:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览:由于手机屏幕大小的关系,直接浏览网页内容的时候会造成许多不便,因此有些公司提供了转码功能,把网页内容通过相关手段转为适合手机屏幕浏览的样式。例如百度、腾讯、搜狗等公司都有提供在线转码服务。
  1. 在线翻译:通过URL地址翻译对应文本的内容。提供此功能的国内公司有百度、有道等。
  2. 图片、文章收藏功能:此处的图片、文章收藏中的文章收藏就类似于分享功能中获取URL地址中title以及文本的内容作为显示,目的还是为了更好的用户体验,而图片收藏就类似图片加载。
  1. 未公开的api实现以及其他调用URL的功能:此处类似的功能有360提供的网站评分,以及有些网站通过api获取远程地址xml文件来加载内容。
  2. 图片加载与下载:通过URL地址加载或下载图片,图片加载远程图片地址此功能用到的地方很多,但大多都是比较隐秘,比如在有些公司中的加载自家图片服务器上的图片用于展示。
  1. 从URL关键字中寻找
share
wap
url
link
src
source
target
u
display
sourceURl
imageURL
domain

微信公众号搜索

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值