CSRF与SSRF

前言

最近比赛有点多,赶紧把学到的东西记下了,比赛一忙起来,就又没时间写博客了,fighting!!!

一、CSRF与SSRF简述

1,CSRF

CSRF,本名为Cross-site requestforgery,也就是跨站请求伪造。
是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。
一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内网。也就是说可以利用一个网络请求的服务,当作跳板进行攻击)
说到CSRF,不得不提一下XSS。CSRF看起来好像和XSS跨站脚本攻击有着“不得不说的秘密”,实则却是两个不同维度的情况。从名字上来看,同为跨站攻击,XSS攻击是跨站脚本攻击,CSRF攻击是请求伪造,也就是CSRF攻击本不是出自用户之手,却经过第三方恶意攻击者的处理,伪装成了受信任用户的“亲历亲为”。
我们所能见到的大部分网站,都是通过cookie等方式记录、分辨出受信任用户的身份,再予以授权的。所以要伪造用户的正常操作,最好的方法是通过XSS或链接引导等途径,让用户在本机发起自己所不知道的危险请求,使得恶意攻击有机可乘,获取用户cookie等信息,以达到身份伪装目的。看到这里不知您是否有所明白,XSS是实现CSRF的诸多途径中的一条,但并不是唯一的一条。
我们平日里做的web漏洞挖掘,一般都是在用户修改密码界面验证CSRF漏洞,因为这是最能体现该漏洞危害的地方之一。就如前文所说,XSS可以在用户不知情的情况下,引导用户点击恶意链接修改用户密码。

在这里插入图片描述CSRF能够做的事情
以你的名义:

发邮件
发消息
财产操作比如转账,或者购买商品
修改密码
删除文章

CSRF漏洞的防御
从漏洞原理来看

关键操作增加验证码(比如说支付密码)
验证referer
使用Token

2,SSRF

SSRF,也就是Server Side RequestForgery—服务器端请求伪造。从字面上来看,与CSRF不同的是,它是服务器端发出的请求伪造而非从用户一端提交。因为它是由服务端发起的,所以它能够请求到与它相连但与外网隔离的内部系统。由于服务端提供了从其他服务器应用获取数据的功能(例如分享等功能)且没有对目标地址做过滤与限制,给予了攻击者乘虚而入的机会。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。SSRF是利用存在缺陷的web应用作为代理攻击远程和本地的服务器。
我们来举个例子说,如何查询自己的外网IP?最简单的可能就是百度搜索框中输入“IP”进行查询。
在这里插入图片描述
图中111.113.*.83,这是我的原IP,如果我用其他服务器载入这个网页的话,比如用某翻译的浏览器插件翻译当前页面:

在这里插入图片描述
可以看到我的IP变成了61.135.217.12,地址也换了,这就是SSRF漏洞。图中的结果并不是翻译插件直接翻译网页内容,而是用该插件的服务器加载了此页面。虽然服务器并不是恶意,但我们所收到的信息还是出现了偏差。
总的来说,CSRF是服务器端没有对用户提交的数据进行严格的把控,导致攻击者可以利用用户的Cookie信息伪造用户请求发送至服务器。而SSRF是服务器对用户提供的可控URL地址过于信任,没有经过严格检测,导致攻击者可以以此为跳板攻击内网或其他服务器。

二、CSRF和SSRF漏洞

1.CSRF漏洞分类

GET型
GET型CSRF漏洞,只需要构造URL,然后诱导受害者访问利用。
CSRF最初的一个错误观点,认为CSRF只能有GET请求发起,因此一些开发者认为只要把重要的操作改为只允许POST请求就能防止csrf
对于很多网站来说,即使是一些重要的操作使用POST来提交请求,但是服务端在接受请求的时候未严格的区分GET和POST。攻击者依然可以用GET来请求表单的提交地址。
比如在PHP中,如果使用的是$_REQUEST,而$_REQUEST既可以接受GET请求也可以接受POST请求。

POST型
POST型CSRF漏洞,需要构造自动提交或点击提交的表单,然后诱导受害者访问或点击利用。如果服务端已经区分了GET和POST,只用$_POST来接收请求数据。最简单的方法就是在攻击页面构造好一个form表单,然后用javascript自动提交这个表单。
CSRF漏洞危害
未验证 Referer或者使用不适当的 Token 导致用户或者管理员可被 CSRF添加、修改、删除等操作

2.SSRF漏洞分类

容易出现SSRF的地方

转码服务
在线翻译
图片加载与下载(通过URL地址加载或下载图片)
图片、文章收藏功能
网站采集、网页抓取的地方。
头像的地方。(远程加载头像)
一切要你输入网址的地方和可以输入ip的地方。
从URL关键字中寻找:share、wap、url、link、src、source、target、u、3g、display、sourceURl、imageURL、domain

利用SSRF可以实现的攻击

可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner 信息
攻击运行在内网或本地的应用程序
对内网 WEB 应用进行指纹识别,通过访问默认文件实现(如:readme文件)
攻击内外网的 web 应用,主要是使用 GET 参数就可以实现的攻击(如:Struts2,sqli)
下载内网资源(如:利用file协议读取本地文件等)
进行跳板
无视cdn
利用Redis未授权访问,HTTP CRLF注入实现getshell

SSRF漏洞相关函数和协议
1.函数
file_get_contents()、fsockopen()、curl_exec()、fopen()、readfile()等函数使用不当会造成SSRF漏洞
(1)file_get_contents()

<?php
$url = $_GET['url'];;
echo file_get_contents($url);
?>

file_get_content函数从用户指定的url获取内容,然后指定一个文件名j进行保存,并展示给用户。file_put_content函数把一个字符串写入文件中。

(2)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; 
	} 
}
?>

fsockopen函数实现对用户指定url数据的获取,该函数使用socket(端口)跟服务器建立tcp连接,传输数据。变量host为主机名,port为端口,errstr表示错误信息将以字符串的信息返回,30为时限
(3)curl_exec()

<?php 
if (isset($_POST['url'])){
	$link = $_POST['url'];
	$curlobj = curl_init();// 创建新的 cURL 资源
	curl_setopt($curlobj, CURLOPT_POST, 0);
	curl_setopt($curlobj,CURLOPT_URL,$link);
	curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1);// 设置 URL 和相应的选项
	$result=curl_exec($curlobj);// 抓取 URL 并把它传递给浏览器
	curl_close($curlobj);// 关闭 cURL 资源,并且释放系统资源
 
	$filename = './curled/'.rand().'.txt';
	file_put_contents($filename, $result); 
	echo $result;
}
?>

curl_exec函数用于执行指定的cURL会话
注意

1.一般情况下PHP不会开启fopen的gopher wrapper
2.file_get_contents的gopher协议不能URL编码
3.file_get_contents关于Gopher的302跳转会出现bug,导致利用失败
4.curl/libcurl 7.43 上gopher协议存在bug(%00截断) 经测试7.49 可用
5.curl_exec() //默认不跟踪跳转,
6.file_get_contents() // file_get_contents支持php://input协议

2.协议
(1)file: 在有回显的情况下,利用 file 协议可以读取任意内容
(2)dict:泄露安装软件版本信息,查看端口,操作内网redis服务等
(3)gopher:gopher支持发出GET、POST请求:可以先截获get请求包和post请求包,再构造成符合gopher协议的请求。gopher协议是ssrf利用中一个最强大的协议(俗称万能协议)。可用于反弹shell
(4)http/s:探测内网主机存活

参考博客:
SSRF漏洞的利用与攻击内网应用
简述CSRF、SSRF的区别

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值