SSRF漏洞初识

文章目录

      • 一 、介绍
      • 二、成因
      • 三、SSRF 漏洞出现的场景
          • PHP相关函数
      • 四、ssrf利用
      • 五、漏洞判断
        • 1.回显
        • 2.延时
        • 3.DNS请求
      • 六、防御

一 、介绍

ssrf(Server-Side Request Forgery:服务器端请求伪造): 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)

二、成因

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

也就是说,对于为服务器提供服务的其他应用没有对访问进行限制,如果我构造好我的访问包,那我就有可能利用目标服务对他的其他服务器应用进行调用。

三、SSRF 漏洞出现的场景

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

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

3.数据库内置功能(Oracle、MongoDB、MSSQL、Postgres、CouchDB)

4.Webmail 收取其他邮箱邮件(POP3、IMAP、SMTP)

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

PHP相关函数

1.file_get_contents
语法:file_get_contents(path,include_path,context,start,max_length)
path必需,其他可选

把整个文件读入一个字符串中。 就是读取文件但是我们知道读取文件,其实也是能够对外发起请求的

2.fsockopen()
语法:int fsockopen(string hostname, int port, int [errno], string [errstr], int [timeout]);

它是打开一个网络连接,linux套接字连接。可以理解的就是肯定会对外发起一个请求,然后你会看到它的参数,第1个host name,肯定是一个IP或者就是主机名,port就是个端口号。

3.curl_exec()
SSRF漏洞初识_第1张图片

四、ssrf利用

攻击者可以利用 SSRF 实现的攻击主要有 5 种:

1.可以对外网、服务器所在内网、本地进行端口扫描,获取一 些服务的 banner 信息
2.攻击运行在内网或本地的应用程序(比如溢出)
3.对内网 WEB 应用进行指纹识别,通过访问默认文件实现
4.攻击内外网的 web 应用,主要是使用 GET 参数就可以实现的攻击(比如 Struts2,sqli 等)
5.利用 file 协议读取本地文件等

五、漏洞判断

URL中关键字常用 关键字:share,url,link,src,source,target,sourceURl,imageURL,domain…

1.回显

假如百度会做一个请求,这个请求肯定是对外发起,然后才会有数据带回来,很明显它能够对外发起请求。但是实际过程中,真的想去挖他们的洞,或者发现这种缺陷,去找这种东西的话,其实没有那么容易,很多时候我们就要去判断这个地方能否对外发起请求,发起请求的验证其实就是一个其中的一个点。其实很好理解了,发了一个请求把信息给带回来回显到页面。

2.延时

比如百度它带的回来,访问一个谷歌,非常慢,一直转等待响应,然后这里就会形成一个差异。差异的对比是非常重要的,能够去验证你的思路就是能是否成功,那么延时就是一个非常好的判断依据。

3.DNS请求

DNS请求也是一样的,有的时候也很难判断。很多大的厂商他们只要是返回失败的,都不会有任何的回显,显示回来延时你也可能体会不到,但是它还是有可能去发出一个真实请求的,很难去验证。

只要能够去验证它能够发起请求,它就有可能说存在一个SSRF,发请求不代表它肯定存在,有可能存在,这时候你才再去做一个深挖,看有没有什么利用空间。

六、防御

1,过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。

2, 统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。

3,限制请求的端口为http常用的端口,比如,80,443,8080,8090。

4,黑名单内网ip。避免应用被用来获取获取内网数据,攻击内网。

5,禁用不需要的协议。仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp:// 等引起的问题。

你可能感兴趣的:(安全)