SSRF
SSRF
很多web应用都提供了从其他的服务器上获取数据的功能。使用用户指定的URL,web应用可以获取图片,下载文件,读取文件内容等。这个功能如果被恶意使用,
可以利用存在缺陷的web应用作为代理攻击远程和本地的服务器。这种形式的攻击称为服务端请求伪造攻击(Server-side Request Forgery)。
常见利用手段:
1.对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息
2.攻击运行在内网或本地的应用程序(比如溢出)
3.对内网web应用进行指纹识别,通过访问默认文件实现
4.攻击内外网的web应用,主要是使用get参数就可以实现的攻击(比如struts2,sqli等)
5.利用file协议读取本地文件file:///etc/passwd
导致的风险:
1、会导致内网信息泄露,如端口、内部IP信息泄露等
2、作为跳板,攻击内网
3、利用特殊协议如file、golpher等进行高级利用
测试思路:
黑盒:页面中任意可以注入url的地方
白盒:关键字URL、openConnection、HttpClients.createDefault()、.execute(httpPost)、new HttpClient()、client.executeMethod(postMethod)、RestTemplate().exchange、@FeignClient、share、wap、url、link、src、target、targeturl、source、service、sourceURl、imageURL、domain、redirect
修复方法:
因为SSRF最大的风险是信息泄露探知内网的信息,因此针对SSRF存在如下几种修复方法:
1.过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
2.统一错误信息,避免用户可以根据错误信息来判断远程服务器的端口状态。
3. 以白名单形式限制请求的端口及IP地址,避免应用被用来获取获取内部数据信息。
4.禁用不需要的协议。仅仅允许http和https请求。可以防止类似于file://, gopher://, ftp://等引起的问题。