0x00 什么是SSRF
SSRF(Server-Side Request Forgery:服务器端请求伪造)是一种有攻击者构造形成有服务器发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。
0x01 SSRF是如何产生的
SSRF形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页完本内容、加载指定地址的图片、下载等。
0x02 SSRF的利用场景
1
2
3
4
5
6
7
8
9
10
11
12
|
<meta charset="utf-8"/>
<?php
////////////////////////////////////
// 1# file_get_conttents:
////////////////////////////////////
$url = $_GET['url'];
$url = "http://".$url;
echo $url;
$con = file_get_contents($url);
echo $con;
|
当一个可以接受URL的网站(美图秀秀中可以通过URL上传图片)当该站没有对用户输入的URL进行过滤时,该情景与上面的代码测试的环境基本一样,这是可以对其内网进行探测。
1
2
|
http://127.0.0.1/Sec_Php/Lab/ssrf.php
?url=127.0.0.1
|
这时可以通过该网站主机作为跳板对内网进行探测。
搜狐某云服务API接口导致SSRF/手工盲打到Struts2命令执行
也可以通过该漏洞对服务器任意文件读取:
0x03 如何防御
1.过滤放回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
2.统一错误信息,避免用户可以根据错误信息来判断远程服务器的端口状态。
3.限制请求的端口为http常用的端口,比如,80,443,8080,8090。
4.黑名单内网IP。避免应用被用来获取内网数据,攻击内网。
5.禁用不需要的协议。仅仅允许http和https请求。
本文转自 nw01f 51CTO博客,原文链接:http://blog.51cto.com/dearch/1793814,如需转载请自行联系原作者