摘要:SSRF (Server-Side Request Forgery,服务器端请求伪造)是指由攻击者构造请求,然后利用服务器的漏洞以服务端的身份向内网发送请求对内网发起攻击。
本文分享自华为云社区《GaussDB(DWS)安全测试之SSRF漏洞》,作者: ACBD。
SSRF (Server-Side Request Forgery,服务器端请求伪造)是指由攻击者构造请求,然后利用服务器的漏洞以服务端的身份向内网发送请求对内网发起攻击。一般情况下,SSRF攻击的目标是外网无法访问的内部系统,因为请求是服务端发起的,所以服务端就能请求到与其网络通畅而与外网隔离的内网系统。
SSRF漏洞的形成大多是因为服务端可以从其他服务器获取数据,但没有对服务端的请求做校验,导致攻击者通过服务端向服务器发送事先构造好的请求,攻击者把存在漏洞的服务器作为跳板,从而达到访问内网服务器的目的。
如下图所示,服务器A存在SSRF漏洞可被攻击者访问,内网中的其他服务器不能被攻击者直接访问,攻击者就可以向服务器A发送请求,服务器A再向内部服务器发送请求,内部服务器返回数据给服务器A,服务器A再将内部服务器的响应数据返回给攻击者,服务器A作为中间人被攻击者利用,从而达到攻击者的目的。
利用file协议可以访问Web本地文件。如下图所示,在url后面拼接本地服务器文件地址(提前在C:\Users\Public下创建一个文件test.txt,写入内容“This is a test for SSRF!”),即可读取本地文件内容。
在我们利用SSRF漏洞去攻击内网服务器时,并不知道内网中有什么样的应用和IP,也不知道开放了什么端口以及端口对应的服务,此时我们可以利用SSRF漏洞先对内网做IP+端口的扫描。端口的开放、关闭状态不同,响应的返回时间也会有差别,据此就可以判断端口的开放状态。
如下图所示,不同的端口响应时间不同,如果端口的响应时间明显少于其他端口,则该端口很有可能是开放状态。
SSRF漏洞挖掘一般有两种思路,一种是黑盒的方法,另一种是白盒的方法。
黑盒的方法是找到所有调用外部资源的场景,进行漏洞排查,主要排查点包括
白盒的方法是从项目支持的网络协议、项目中使用的发起网络请求的类和API以及访问地址中是否有外部可控的变量三个方面进行排查。常见的协议有file、ftp、http、https等,关注能够利用上述协议发起网络请求的类,然后关注传入的变量是否外部可控,如果外部可控则可能存在问题。