csrf&ssrf漏洞详解

CSRF

什么是CSRF?

跨站请求伪造也叫CSRF/XSRF

攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。如下:其中Web A为存在CSRF漏洞的网站,Web B为攻击者构建的恶意网站,User C为Web A网站的合法用户。

CSRF攻击的危害

CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求

CSRF危害:以你的名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账

问题包括:个人隐私泄露以及财产安全

CSRF实现条件

受害者必须一次完成两个步骤:

1.登录受信任的网站,并在本地生成Cookie

2.在不登处(退出)网站的情况下,访问危险网站(攻击者引导你访问的站点)

一下为CSRF产生的场景:

1.你不能保证你登录一个网站后,不在打开一个web页面并访问另外的网站

2.你不能保证你关闭浏览器后,你本地的Cookie立刻过期,事实上,关闭一个浏览器不能结束一个会话,但大多数人都会错误的认为关闭浏览器就等于退出登录/结束会话了

3.所谓的攻击网站,可能是一个存在其他漏洞的可信任的经常被人访问的网站

CSRF的防御

1.尽量使用POST,限制GET

2.将Cookie设置为HttpOnly

3.增加token验证

4.增加Referer识别

SSRF——服务端请求伪造

什么是SSRF

​ SSRF是一种由攻击者构造形成由服务器发起请求的一个安全漏洞,一般情况下攻击者是无法从外网访问内网的,正因为它是由服务器端发起的,所起它能够请求到与服务端相连的 而与外网隔离的内部系统

SSRF 攻击的原理

​ 大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址进行过滤和限制

​ 比如从指定URL地址获取网页文本内容,加载指定地址的图片和下载等

SSRF攻击的危害

​ SSRF可以对外网,服务器所在内网,本地进行端口扫描,攻击运行在本地或内网的应用,或者利用File协议读取本地文件

1.让服务端去访问相应的网址

2.让服务端去访问自己所处内网的一些指纹文件来判断是否存在相应的cms

3.可以使用file、dict、gopher、ftp、协议进行请求访问相应的文件

4.攻击内网的web应用(可以想内部任意主机的任意端口发送精心构造的数据包{payload})

5.攻击内网应用程序(利用跨协议通信技术)

6.判断内网主机是否存货:方法是访问是否由端口开放

7.Dos攻击(请求大文件,始终保持连接keep-alive-always)

SSRF攻击防御

1.修改配置文件,加上认证功能

2.对目标地址进行严格过滤

3.过滤返回的信息

4.统一错误信息

5.限制请求的端口

6.禁止不常用的协议

7.对DNS Rebinding,考虑使用DNS或者HOST白名单

SSRF漏洞可能存在的地方

1.能够对外发起网络请求的地方就可能存在SSRF漏洞

2.从远程服务器请求资源(Upload ,from ,URL,Import&EXport,CouchDB )

3.数据库内置功能(Oracle,MongDB,MSSQL,Postgres,CouchDB)

Webmail 收取其他邮箱邮件(POP3,IMAP,SMTP)

文件处理,编码处理,属性信息处理(ffmpeg,ImageMagic,DOCX,PDF,XML)

SSRF使用到的相关协议

Dict协议:

​ Dict协议,字典服务器协议,dict是基于查询响应的TCP协议,它的目标,并允许客户端在使用过程中访问更多的字典,Dict服务器和而客户机使用的端口TCP2628;主要用来探测内网端口协议

http协议:

​ 主要用来发送http协议,获取超文本内容,包括文字、图片、视频、音频、等常用互联网资源

File协议:

​ 本地文件传输协议,File协议主要用于访问本地计算机中的文件,就如同在Windows资源管理器中打开文件一样

Gopher协议:(没什么用)

​ Gopher协议是互联网上使用的分布型的文件收集获取网络协议,gopher协议实在HTTP协议出现之在Internet常见的重用协议,但是现在已经很少用了

利用curl命令的相关操作

curl -v ‘file://127.0.0.1/etc/passws’===利用file协议查看passwd文件

curl -v ‘dict://127.0.0.1:22’===利用dict协议探测端口是否存活

SSRF-PHP相关危险函数

​ SSRF涉及到危险函数主要是用于网络访问,支持伪协议的网络获取

以PHP为例:

file_get_content()—从用户指定的URL获取图片,然后把它用一个速记文件名保存在本地硬盘

fsockopen()—

curl_exec()—使用curl获取数据

SSRF的绕过技巧

​ 后台一般会对用户的请求中携带的内部ip地址或者HOST进行过滤主要有一下几种方式进行绕过:

1.更改ip地址写法

2.利用解析URL所出现的问题

3.利用320跳转

4.通过非HTTP协议

5.DNS Rebinding

6.利用ipv6

7.利用IDN

更改ip地址写法绕过

​ 后台对传入的ip地址会进行过滤,此时需要对ip地址进行转换格式绕过过滤,对于这种过滤我们采用改编ip的写法进行绕过

以192.168.0.1举例

更改ip地址的写法:

8进制格式:0300.0250.0.1

16进制格式:0xC0.0xA8.0.1

10进制整数格式:3232235521

16进制整数格式:0XC0A80001

合并后两位:1.1.278/1.1.755

合并后三位:1.278/1.755/3.14.159267

利用解析URL出现问题绕过

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

比如:http://www,baidu.com@192.168.0.1/

​ 当后端程序通过不正确的正则表达式(不如将http知道到com为止的内容认为是访问请求的host地址)对上述URL进行解析的时候很有可能会认为访问URL的host地址为www.baidu.com,而实际上这个URL所请求的地址是192.168.0.1

利用302跳转绕过

​ 如果后端服务器在接受到参数后,正确的解析了URL的host,并且经行了过滤,这个时候我们可以用302跳转的方式进行绕过

在网络上有一个非常神奇的服务,http://xip.io当我们访问这个网站的子域名是。例如192.168.0.1.xip.io就会自动重定向到192.168.0.1

利用DNS Rebinding

​ 对于常见的ip限制,后端服务器可能通过

攻击者注册一个域名(如attacker.com),并在攻击者控制下将其代理给DNS服务器。 服务器配置为很短响应时间的TTL记录,防止响应被缓存。 当受害者浏览到恶意域时,攻击者的DNS服务器首先用托管恶意客户端代码的服务器的IP地址作出响应。 例如,他们可以将受害者的浏览器指向包含旨在在受害者计算机上执行的恶意JavaScript或Flash脚本的网站。
恶意客户端代码会对原始域名(例如attacker.com)进行额外访问。 这些都是由同源政策所允许的。 但是,当受害者的浏览器运行该脚本时,它会为该域创建一个新的DNS请求,并且攻击者会使用新的IP地址进行回复。 例如,他们可以使用内部IP地址或互联网上某个目标的IP地址进行回复

害者的浏览器指向包含旨在在受害者计算机上执行的恶意JavaScript或Flash脚本的网站。
恶意客户端代码会对原始域名(例如attacker.com)进行额外访问。 这些都是由同源政策所允许的。 但是,当受害者的浏览器运行该脚本时,它会为该域创建一个新的DNS请求,并且攻击者会使用新的IP地址进行回复。 例如,他们可以使用内部IP地址或互联网上某个目标的IP地址进行回复


版权声明:本文为weixin_56714714原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。