关于SSRF与CSRF漏洞的解释

SSRF服务端请求伪造(外网访问内网)
SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF是要目标网站的内部系统。(因为他是从内部系统访问的,所有可以通过它攻击外网无法访问的内部系统,也就是把目标网站当中间人)

其实也就相当于一个中间人攻击(主要目的就是:由外网攻击者利用SSRF漏洞攻击内网)

一般来说基本都是通过脚本去扫内网的ip、端口点到为止

1、SSRF形成原因
SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,文档,等等。

即也就是说服务器端的验证并没有对其请求如获取图片的参数(image=)做出严格的过滤以及限制,从而导致A网站可以从其他服务器的获取数据

(默认网站webserver192.168.1.5的参数指定访问内网中的某台机器的内部资源地址,如果没有对其指定地址严格限制,那么就可能造成由webserver192.168.1.5这太机器访问内部的任意一台机器的资源。)——>>如:www.xxx.com/xx.php?image=URL,一般像分享、在线翻译这些功能地址。

即我们要对目标网站的架构了解,脑子了要有一个架构图。比如 : A网站,是一个所有人都可以访问的外网网站,B网站是一个他们内部的OA网站,我们普通用户只可以访问a网站,不能访问b网站。但是我们可以同过a网站做中间人,访问b网站,从而达到攻击b网站需求。

主要标志就是:xx.php?url=…

(也可以命令执行,需要条件。甚至脚本执行。。。。)

2、利用SSRF漏洞的目的
SSRF漏洞就是通过篡改获取资源的请求发送给服务器,但是服务器并没有检测这个请求是否合法的,然后服务器以他的身份来访问其他服务器的资源。

3、SSRF漏洞的用途
可以对外网服务器所指向的内网、服务器本地进行端口扫描,获取一些服务的banner信息
攻击运行在内网或服务器本地的应用程序(比如溢出)
对内网web应用进行指纹识别,通过访问默认文件实现
攻击内外网的web应用,主要是使用get参数就可以实现的攻击(比如struts2,sqli等
利用file协议读取本地文件等
4、SSRF漏洞的特性
SSRF的强大和成功几率由函数本身功能决定

即代码中是什么函数其功能有多强大,那么存在SSRF漏洞的话,漏洞利用的概率和影响力就有多大。比如下面的两个函数curl_init、file_get_contents:一个能达到执行脚本的地步,一个能达到读文件的地步。

实例
对于curl_init函数,利用这个远程包含的特性,使用端口扫描脚本http://192.168.18.62:86/bwapp/evil/ssrf-1.txt去扫描内网ip开放的端口

注意:这里为什么txt被执行了,因为这里有个包含漏洞才执行了

对于file_get_content函数:(不支持https,支持http,支持php://内置协议)

读文件需要base64编码(php://filter/read=convert.base64-encode/resource=xxx.php)


这里我得总结一下,上面为什么我需要用文件包含去实现我SSRF的目的?,而且为什么要用内置函数去读文件?,如果是这样我直接用文件包含不就行了么,简直跟我文件包含没有任何区别嘛。

其实这里文件包含是文件包含,SSRF是SSRF,二者之间是本质的不同,一个主要目的是包含文件,一个主要目的是通过中间服务器探测内网信息,这里只是借助了文件包含的能力举得例子,实际的例子多得很并不都涉及到文件包含,并不能混淆。就好比文件上传利用文件包含开启一句话一样。

以上只是对两个实例的说明。

其本质是:文件包含了站点web服务器上的东西,而ssrf的目的是打进内网,搞内网的东西。

不懂可以去wooyun看例子,ssrf是借助站点web服务器进入内网进行信息搜集。

5、如何挖掘SSRF漏洞
分享:通过URL地址分享网页内容
转码服务
在线翻译
图片加载与下载:通过URL地址加载或下载图片
图片、文章收藏功能
未公开的api实现以及其他调用URL的功能
 

6、常用SSRF去做什么事
利用执行脚本进行端口探测
任意地址访问
内网访问
任意文件读取
内网攻击
7、绕过方法(绕开一般ssrf的防护)
1、更改IP地址写法
一些开发者会通过对传过来的URL参数进行正则匹配的方式来过滤掉内网IP,如采用如下正则表达式:

^10(\.([2][0-4]\d|[2][5][0-5]|[01]?\d?\d)){3}$

^172\.([1][6-9]|[2]\d|3[01])(\.([2][0-4]\d|[2][5][0-5]|[01]?\d?\d)){2}$

^192\.168(\.([2][0-4]\d|[2][5][0-5]|[01]?\d?\d)){2}$
1
2
3
4
5
对于这种过滤我们可以采用改编IP的写法的方式进行绕过,例如192.168.0.1这个IP地址我们可以改写成:

(1)、8进制格式:0300.0250.0.1

(2)、16进制格式:0xC0.0xA8.0.1

(3)、10进制整数格式:3232235521

(4)、16进制整数格式:0xC0A80001

还有一种特殊的省略模式,例如10.0.0.1这个IP可以写成10.1

2、利用解析URL所出现的问题
在某些情况下,后端程序可能会对访问的URL进行解析,对解析出来的host地址进行过滤。这时候可能会出现对URL参数解析不当,导致可以绕过过滤。

http://www.Jeromeyoung.com@192.168.0.1/
1
当后端程序通过不正确的正则表达式(比如将http之后到com为止的字符内容,也就是www.Jeromeyoung.com,认为是访问请求的host地址时)对上述URL的内容进行解析的时候,很有可能会认为访问URL的host为www.Jeromeyoung.com,而实际上这个URL所请求的内容都是192.168.0.1上的内容。

8、防护SSRF措施
(1)(黑名单)过滤10.0.0.0/8 、172.16.0.0/12、192.168.0.0/16、localhost私有地址、IPv6地址

(2)(黑名单)过滤file:///、dict://、gopher://、ftp:// 危险schema

(3)使用地址白名单

(4)内网服务开启鉴权(Memcached, Redis, Elasticsearch and MongoDB)

(5)对回显内容进行识别,采取限制措施

(6)需要使用互联网资源(比如贴吧使用网络图片)而无法使用白名单的情况:首先禁用 CURLOPT_FOLLOWLOCATION;然后通过域名获取目标ip,并过滤内部ip;最后识别返回的内容是否与假定内容一致

CSRF跨站请求伪造(也叫点击攻击)
Cross-site request forgery 简称为“CSRF”,在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击就完成了。所以CSRF攻击也成为"one click"攻击。 很多人搞不清楚CSRF的概念,甚至有时候会将其和XSS混淆,更有甚者会将其和越权问题混为一谈,这都是对原理没搞清楚导致的。

1、CSRF攻击原理
程序员开发的时候,未对相关页面进行token和referer判断,造成攻击者可构造自己的URL地址欺骗目标用户进行点击。(点击后因为未对相关页面进行token和referer判断,即链接中没得带token或者数据包中没得referer这类的操作,所以链接地址没得校验操作直接执行了)其实也就是像下面的重要页面的防范措施没有做到位

以例子进行说明:

当我们打开网站或者登陆某个网站后,就会产生一个会话(这里指用户登陆后),这个会话可能是SESSION,Cookie控制,但是这是无关紧要的。唯一的重点是浏览器与服务器之间是在会话之中,在这个会话没有结束时候,你可以利用你的权限对网站进行操作,如进行发表文章,发邮件,删除文章等操作。当这个会话结束后,你在进行某些操作时候Web应用程序通常会来提醒你,您的会话已过期,或者是请重新登陆等提示。

这非常好理解,就像我们登陆网上银行后,Web浏览器已经跟可信的站点建立了一个经认证的会话。之后,只要是通过该Web浏览器这个认证的会话所发送的请求,都被视为可信的动作,例如转账,汇款等操作。当我们在一段时间内不进行操作后,在来重新做转账,或者汇款操作,那么这个站点可能会提示你:您的身份已过期,请重新登陆或者会话结束等消息。

而CSRF攻击则是建立会话之上的攻击。比如当你登陆了网上银行,正在进行转账业务,这时你的某个QQ好友(攻击者)发来一条消息(URL),这条消息是攻击者精心构造的转账业务代码。而且与你所登录的网站是同一个银行,你可能认为这个网站是安全的,并不是什么钓鱼网站之类的,然后打开了这条URL,那么你的账户的钱可能就在你的这一次小小点击上全部丢失。

怎么可能这么神奇呢?其实这并不神奇。主要是因为你的浏览器正处于与此网站的会话之中,那么一些操作都是合法的,而入侵者构造的这段代码只不过是正常的转账操作代码而已。比如说你想给用户spisec转账1000元,那么点击提交按钮之后,可能会发送以下请求:

http://www.taobao.com/pay.jsp?user=spisec&money=1000

而攻击者仅仅是改变一下user参数与money参数即可完成一次“合法”的攻击,如:

http://www.taobao.com/pay.jsp?user=hack&money=10000

当你访问了这条URL之后,就会自动向hack这个账户里面转入10000元。而这是你亲手造成的,并没因为有人去破解你的密码或者是Web服务器被入侵所导致的你的金钱丢失。
————————————————
版权声明:本文为CSDN博主「SeaOf0」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Jack0610/article/details/112723076

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值