SSRF漏洞
SSRF漏洞
SSRF意为服务端请求伪造(Server-Side Request Forge)。攻击者利用SSRF漏洞通过服务器发起伪造请求,就这样可以访问内网的数据,进行内网信息探测或者内网漏洞利用
SSRF漏洞形成的原因是:应用程序存在可以从其他服务器获取数据的功能,但对服务器的地址没有做严格的过滤,导致应用程序可以访问任意的URL链接。攻击者通过精心构造URL连接,可以利用SSRF漏洞进行以下攻击:
(1) 通过服务器获取内网主机、端口和banner信息
(2) 对内网的应用程序进行攻击,例如Redis、JBoss等
(3) 利用file://伪协议读取文件
(4) 可以攻击内网程序,造成缓冲区溢出
SSRF高危触发点:
(1)图片加载与下载:通过URL地址加载或下载图片
(2)从远程服务器请求资源
(3)数据库内置功能(Orage,MongoDB,MSSQL,Posgres,couchDB)
(4)Web Mail收取其他邮箱邮件
(5)文件处理、编码处理、属性信息处理(FFmpeg,docx,pdf,XML处理)
SSRF漏洞代码分析
漏洞示例代码:
<?php if(isset($_GET['url'])) { $link=$_GET['url']; $filename='./'.rand().'.txt'; $curlobj=curl_init($link); curl_setopt($curlobj,CURLOPT_FILE,$link); curl_setopt($curlobj,CURLOPT_HEADER,0); $result=curl_exec($curlobj); curl_exec($curlobj); curl_close($curlobj); fclose($link); file_put_contents($filename, $result); echo $result; } ?>
以上代码通过curl_exe函数对访问传入的URL数据进行请求,并返回请求的结果。
1.文件读取
通过file://伪协议读取常见的文件,例如/etc/passwd 我的是windows环境所以简单测试读取windows下的win.ini文件
pyaload:
http://192.168.1.6/index.php?url=file://C:\Windows\win.ini
2.端口探测
url没有经过严格的过滤,因此攻击者就可以构造任意的URL利用SSRF漏洞。例如可以通过http://127.0.0.1:3306来探测此服务器是否开启了3306端口
测试3306端口payload:
http://192.168.1.6/index.php?url=http://127.0.0.1:3306
测试3389端口payload:
http://192.168.1.6/index.php?url=http://127.0.0.1:3389
返回数据为空,返回延迟比较长 说明不存在此端口
3.内网应用攻击
通过SSRF漏洞可以进行端口信息探测,也可以对内网存在远程命令执行漏洞的应用进行攻击
(1)信息探测
利用SSRF端口信息探测方法通过内网发现了内网有一台主机开启了JB服务
(2)访问jmx控制台
(3)部署木马
(4)获得webshell
(5)执行命令
待更新。。。。。
其他常见漏洞代码
漏洞代码1 file_get_contents()
<?php if(isset($_POST['url'])) { $content=file_get_contents($_POST['url']); $filename='./images/'.rand().'.img'; file_put_contents($filename,$content); echo $_GET['url']; $img="<img src=\"".$filename."\"/>"; } echo $img; ?>
通过post请求传入我们要读取的文件 这样我们win.ini文件就写入到了图片中
打开图片查看 得到我们需要的信息
SSRF漏洞修复
(1)过滤请求协议,只允许http或者https开头的协议
(2)严格限制访问的IP地址,只允许访问特定的IP地址
(3)限制访问的端口,只允许访问特定的端口
(4)设置统一的错误信息,防止造成信息泄露
前言
参考学习:https://www.cnblogs.com/wangshuwin/p/7642693.html
《web安全原理分析与实践》——SSRF漏洞