介绍
简介(pikachu)
SSRF(Server-Side Request Forgery:服务器端请求伪造)
一般都是由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制
服务器端的验证没有对其请求获取图片的参数做出严格的过滤以及限制,导致网站可以从其他服务器的获取数据
一般来说SSRF是可以探测内网端口开放信息
使用这些函数不会有SSRF漏洞file_get_contents()、fsockopen()、curl_exec()
成因
ssrf形成的原因大都是服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制。比如从制定url地址获取网页文本内容。加载指定地址的图片,文档等等
- A网站,所有人可以访问的外网。B网站是他们内网,普通用户只可以访问a网站,不能访问b网站。但是我们可以通过a网站做中间人,访问b网站,达到攻击b网站的需求。正常用户访问网站:
- 1.输入url
- 2.发送请求
- A服务器接受请求(没有过滤),并处理–>返回用户响应
- 在哪里产生的ssrf漏洞呢?
- 在服务器端的验证没有对其请求获取图片的参数作出严格过滤以及限制,导致A网站可以从其他服务器获取数据
原理
file_get_contents:
SRF漏洞就是通过篡改获取资源的请求发送给服务器,但是服务器并没有检测这个请求是否合法的,然后服务器以他的身份来访问其他服务器的ssrf攻击可能存在任何语言编写的应用,我们通过一些php实现的代码来作为样例分析。代码的大部分来自于真实的应用源码。
寻找方法
- 通过url地址分享网页内容
- 转码服务
- 通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览:由于手机屏幕大小的关系,直接浏览网页内容的时候会造成许多不便,因此有些公司提供了转码功能,把网页内容通过相关手段转为适合手机屏幕浏览的样式。例如百度、腾讯、搜狗等公司都有提供在线转码服务。
- 在线翻译
- 图片加载与下载:通过url地址加载或下载图片
- 图片、文章收藏功能
- 未公开的api实现以及其它调用url功能
- 从url关键字中寻找
share、wap、url、src、 link、source 、target、u 、display 、sourceURl 、imageURL 、domain
- 所有通过调取外部资源的参数都有可能存在ssrf
用途
可以对外网、内网web应用进行指纹识别、通过访问默认文件实现
攻击内外网的web应用。主要是使用get参数就可以实现的攻击(比如struts、sqli等)
利用file协议读取本地文件
绕过
- 常见的绕过方式
1.利用解析URL出现的问题
- 限制为http://www.xxx.com 域名时(利用@)
可以尝试采用http基本身份认证的方式绕过
如:http://www.aaa.com@www.bbb.com@www.ccc.com,在对@解析域名中,不同的处理函数存在处理差异
在PHP的parse_url中会识别www.ccc.com,而libcurl则识别为www.bbb.com。
2.采用短网址绕过
比如百度短地址https://dwz.cn/
3.采用进制转换
127.0.0.1八进制:0177.0.0.1。十六进制:0x7f.0.0.1。十进制:2130706433.
实战
pikachu
ssrf(curl)
输入baidu.com
他就会把百度的搜索框调出来
继续试试校园网
点击here进入了官网
SSRF(file_get_content)
这里再读一首诗
查看源码,发现有一个这样的函数。这个函数可以对本地文件进行读取,也可以对远程文件进行读取
一样的,这里我们也可以将百度搬过来。但是这个php配置文件说了读取源码,那我们复制打开试试
复制
解码
<?php
/**
* Created by runner.han
* There is nothing new under the sun
*/
$SELF_PAGE = substr($_SERVER['PHP_SELF'],strrpos($_SERVER['PHP_SELF'],'/')+1);
if ($SELF_PAGE = "ssrf.php"){
$ACTIVE = array('','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','active open','active','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','');
}
$PIKA_ROOT_DIR = "../../";
include_once $PIKA_ROOT_DIR.'header.php';
<div class="main-content">
<div class="main-content-inner">
<div class="breadcrumbs ace-save-state" id="breadcrumbs">
<ul class="breadcrumb">
<li>
<i class="ace-icon fa fa-home home-icon"></i>
<a href="ssrf.php"></a>
</li>
<li class="active">概述</li>
</ul>
</div>
<div class="page-content">
<b>SSRF(Server-Side Request Forgery:æœåŠ¡å™¨ç«¯è¯·æ±‚ä¼ªé€ )</b>
<p>å
¶å½¢æˆçš„åŽŸå› å¤§éƒ½æ˜¯ç”±äºŽæœåŠ¡ç«¯<b>æä¾›äº†ä»Žå
¶ä»–æœåŠ¡å™¨åº”ç”¨èŽ·å–æ•°æ®çš„功能</b>,ä½†åˆæ²¡æœ‰å¯¹ç›®æ ‡åœ°å€åšä¸¥æ ¼è¿‡æ»¤ä¸Žé™åˆ¶</p>
导致攻击è€
å¯ä»¥ä¼ å
¥ä»»æ„çš„åœ°å€æ¥è®©åŽç«¯æœåС噍坹å
¶å‘起请求,å¹¶è¿”å›žå¯¹è¯¥ç›®æ ‡åœ°å€è¯·æ±‚的数æ®<br>
<br>
æ•°æ®æµ:攻击è€
----->æœåС噍---->ç›®æ ‡åœ°å€<br>
<br>
æ ¹æ®åŽå°ä½¿ç”¨çš„函数的ä¸åŒ,对应的影å“å’Œåˆ©ç”¨æ–¹æ³•åˆæœ‰ä¸ä¸€æ ·
<pre style="width: 500px;">
PHPä¸ä¸‹é¢å‡½æ•°çš„使用ä¸å½“会导致SSRF:
file_get_contents()
fsockopen()
curl_exec()
</pre><br>
如果一定è¦é€šè¿‡åŽå°æœåŠ¡å™¨è¿œç¨‹åŽ»å¯¹ç”¨æˆ·æŒ‡å®š("或è€
预埋在å‰ç«¯çš„请求")的地å€è¿›è¡Œèµ„æºè¯·æ±‚,<b>则请åšå¥½ç›®æ ‡åœ°å€çš„过滤</b>。
<br>
<br>
ä½ å¯ä»¥æ ¹æ®"SSRF"里é¢çš„é¡¹ç›®æ¥æžæ‡‚问题的原å›
</div><!-- /.page-content -->
</div>
</div><!-- /.main-content -->
<?php
include_once $PIKA_ROOT_DIR . 'footer.php';
?>
?>