关于SSRF与CSRF漏洞的解释

SSRF服务端请求伪造(外网访问内网)

SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造造成由服务端发起请求的一个安全漏洞。通常状况下,SSRF是要目标网站的内部系统。(由于他是从内部系统访问的,全部能够经过它攻击外网没法访问的内部系统,也就是把目标网站当中间人)php

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

通常来讲基本都是经过脚本去扫内网的ip、端口点到为止前端

一、SSRF造成缘由

SSRF 造成的缘由大都是因为服务端提供了从其余服务器应用获取数据的功能,且没有对目标地址作过滤与限制。好比从指定URL地址获取网页文本内容,加载指定地址的图片,文档,等等。程序员

即也就是说服务器端的验证并无对其请求如获取图片的参数(image=)作出严格的过滤以及限制,从而致使A网站能够从其余服务器的获取数据web

在这里插入图片描述

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

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

主要标志就是:xx.php?url=.....数据库

(也能够命令执行,须要条件。甚至脚本执行。。。。)后端

二、利用SSRF漏洞的目的

SSRF漏洞就是经过篡改获取资源的请求发送给服务器,可是服务器并无检测这个请求是否合法的,而后服务器以他的身份来访问其余服务器的资源。api

三、SSRF漏洞的用途

  • 能够对外网服务器所指向的内网、服务器本地进行端口扫描,获取一些服务的banner信息
  • 攻击运行在内网或服务器本地的应用程序(好比溢出)
  • 对内网web应用进行指纹识别,经过访问默认文件实现
  • 攻击内外网的web应用,主要是使用get参数就能够实现的攻击(好比struts2,sqli等
  • 利用file协议读取本地文件等

四、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)

http://192.168.18.23/pikachu/vul/ssrf/ssrf_fgc.php?file=php://filter/read=convert.base64-encode/resource=../../index.php

在这里插入图片描述

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

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

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

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

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

五、如何挖掘SSRF漏洞

  • 分享:经过URL地址分享网页内容
  • 转码服务
  • 在线翻译
  • 图片加载与下载:经过URL地址加载或下载图片
  • 图片、文章收藏功能
  • 未公开的api实现以及其余调用URL的功能
  • 从URL关键字中寻找

share
wap
url
link
src
source
target
u
3g
display
sourceURl
imageURL
domain
...

六、经常使用SSRF去作什么事

  • 利用执行脚本进行端口探测
  • 任意地址访问
  • 内网访问
  • 任意文件读取
  • 内网攻击

七、绕过方法(绕开通常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}$

对于这种过滤咱们能够采用改编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

二、利用解析URL所出现的问题

在某些状况下,后端程序可能会对访问的URL进行解析,对解析出来的host地址进行过滤。这时候可能会出现对URL参数解析不当,致使能够绕过过滤。

http://www.Jeromeyoung.com@192.168.0.1/

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

八、防御SSRF措施

(1)(黑名单)过滤10.0.0.0/8 、172.16.0.0/十二、192.168.0.0/1六、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混淆,更有甚者会将其和越权问题混为一谈,这都是对原理没搞清楚致使的。

一、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服务器被入侵所致使的你的金钱丢失。下面以CSRF攻击原理图给你们形象总结:

在这里插入图片描述

  1. 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登陆网站A;

  2. 在用户信息经过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登陆网站A成功,能够正常发送请求到网站A;

  3. 用户未退出网站A以前,在同一浏览器中,打开一个TAB页访问网站B;

  4. 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;

  5. 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的状况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求实际上是由B发起的,因此会根据用户C的Cookie信息以C的权限处理该请求,致使来自网站B的恶意代码被执行。

二、达成CSRF攻击的条件

  • 攻击创建在浏览器与Web服务器的会话之中
  • 会话期间须要受害者进行访问或者说是点击

若是以上任意一个不知足都不能达成跨站请求伪造攻击。即目标必须处于会话状态,且须要点击

说白了,CSRF攻击也就是所谓的钓鱼攻击。

三、CSRF分类

  • 站内
  • 站外

四、检测方法

  • 手工

检测CSRF漏洞是一项比较繁琐的工做,最简单的方法就是抓取一个正常请求的数据包,去掉Referer字段后再从新提交,若是该提交还有效,那么基本上能够肯定存在CSRF漏洞。

  • 工具
  • burp

  • CSRF Request Builder

  • CSRFTester

工具检测的原理:

以CSRFTester工具为例,CSRF漏洞检测工具的测试原理以下:使用CSRFTester进行测试时,首先须要抓取咱们在浏览器中访问过的全部连接以及全部的表单等信息,而后经过在CSRFTester中修改相应的表单等信息,从新提交,这至关于一次伪造客户端请求。若是修改后的测试请求成功被网站服务器接受,则说明存在CSRF漏洞,固然此款工具也能够被用来进行CSRF攻击。

五、如何挖掘CSRF漏洞

  • 扫描器(注意并非每一个页面爆没有token漏洞都是对的,由于前端的进行CSRF有毛用,主要就是对后台管理那一层的,因此不要盲目认为。),
  • 修改密码的地方
  • 添加用户的地方
  • 数据库备份的地方
  • 数据交易、支付等
  • 其余一些对话框的钓鱼页面
  • CSRF通常与XSS结合使用
  • 注意页面是否带token或者包中有没得Referer,Referer在包中删除是否依然能够访问url目标等。光靠一个Referer来讲也没用,Referer也能伪造

注意可能有预测的token,即有规律的token,若是是随机的就放弃吧。

六、经常使用攻击手段实例

通常的攻击思路:(首先,开源的web源码,攻击者了解网站的框架,搭建环境构造攻击url,例如数据备份的,下面实验中有过程。

去目标网站建立普通用户,发帖插入url等待目标管理会话在线状态浏览帖子,中招,攻击者访问备份下来的数据库,脱裤,完事。

1)、dz网站数据库备份(快速脱库)

两个ip:192.168.18.56:82攻击者本身的ip、192.168.18.62:86管理员的ip

总体思路:

实验步骤:攻击者本身搭建环境,以管理员身份登陆,建立普通帐户,以管理员身份进行数据备份,抓包,修改包的post数据,构造url为本身要求的。(这里url的IP地址为目标的IP地址)

复制好url,前往目标网站,注册,以普通用户身份登陆发帖带入url(试一下直接在文本中插入,按道理来讲须要自动运行地址而不是文本内容),等待管理员登陆且为会话状态点击查看攻击者发帖的内容,达成指定备份。

攻击者访问构造的url,脱库。

攻击者环境配置url(建立帐号忽略,直接上关键步骤):

在这里插入图片描述

本来应该这是样的:

在这里插入图片描述

在这里插入图片描述

当攻击者重构备份的文件夹名称和文件名的时候:

注意:这里构造是抓到包的时候抓了改,再放包,不是重发器里发一次。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

找到攻击url,构形成目标的地址:

http://192.168.18.62:86/dz/upload/uc_server/admin.php?m=db&a=operate&t=export&appid=0&backupdir=Jerome%26backupfilename%3Dtest

在目标网站上建立用户、发帖。

在这里插入图片描述

发帖成功:

在这里插入图片描述

如今当管理员登陆以后查看帖子,会发现是正常的帖子:

在这里插入图片描述

在这里插入图片描述

当管理员在线且点击了这篇帖子,结果就是数据库已经达成了备份,且能被攻击者访问。

在这里插入图片描述

这里得说明一下这个路径,在上面攻击者搭建的环境中,必定会去模拟攻击才知道最后的结果在哪一个路径下,上面省却了这个步骤,这里直接在目标机器上看结果。

在这里插入图片描述

2)、修改密码

修改密码的前提是:利用CSRF漏洞

以dvwa的低级为例,直接抓包:

在这里插入图片描述

在这里插入图片描述

上面把referer删除了,能够改密码,说明csrf可用。

构造对目标构造以下url,存在CSRF漏洞的状况下,一旦在线点击访问就能改密码:

http://192.168.18.62:86/dvwa/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change

在这里插入图片描述

说一下中级的:

中级的发现没法直接执行再改密码,先看源码:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

但经过观察数据包发现,其没有referer信息,那么对其进行了一个伪造Referer:

​ Referer:http://192.168.18.62:86/dvwa/vulnerabilities/csrf/

加入数据包中,发现密码被修改了。

在这里插入图片描述

(改密码也就是说:没得任何验证如没有验证码、没得token、没得Referer、没得原密码校验等,很容易就形成通杀直接,受害者回话状态点击插入了url的地址,直接被修改密码。)

3)、添加帐号

下面利用一个网站进行添加帐号操做:

首先,利用自建网站进行添加帐号操做,抓包将包生成为poc,创建test.html,废掉此包。

在这里插入图片描述

在这里插入图片描述

目前仍为管理登陆状态,在这个状态下点击了攻击者的test.html。看下效果:

在这里插入图片描述

在这里插入图片描述

攻击者的效果成功达成。

4)、自解压缩包

配置方式以下:

在这里插入图片描述

在这里插入图片描述

一旦解压就会打开百度,自行尝试吧。

七、防范方法

  • 验证HTTP Referer字段
  • 在请求地址中添加token并验证
  • 在HTTP头中自定义属性并验证
  • 在服务端严格区分好POST和GET的数据请求
  • 使用验证码或者密码确认方式进行
  • 白名单
相关文章
相关标签/搜索