pikachu--SSRF
SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)SSRF形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。
接下来我们通过pikachu平台中的SSRF示例进行进一步学习。
一、SSRF(curl)首先我们大概了解一下在PHP中curl函数是用来干什么的。curl是一个库,能让你通过URL和许多不同种的服务器进行交流,并且还支持许多协议。curl可以支持https认证、http post、ftp上传、代理、cookies、简单口令认证等等功能。
下面我们看一下pikachu中该部分的代码:
从上一段代码中,可以看出客户端可以使用GET方法提交url参数和内容,下一段就是会把用户提交请求的URL返回客户端去执行。这里我们假设提交的是这样:这里我们提交了url参数和内容,服务器用函数curl_exec()函数执行,并将结果用echo $RES显示出来。
所以我们就可以利用curl_exec()函数去执行一些恶意操作。比如我们本机还装有sqli-lab,我们假设不用需外部访问。而这里我们就能构造这样的url去访问到:localhost/pikachu/vul/ssrf/ssrf_curl.php?url=http://127.0.0.1/sqli/
二、SSRF(file_get_content)file_get_content()函数的功能是对本地和远程的文件进行读取。下面我们看一下pikachu中该部分的代码:这里我们可以看到可以读取一个文件,如果是本地的直接加路径,远程的需要加入域名。
这里演示一下本地读取。我们现在D盘下创建一个文件1.txt,内容如下图
然后在客户端浏览器中输入:localhost/pikachu/vul/ssrf/ssrf_fgc.php?file=file:///D://1.txt这里我们可以看到讲本地文件内容读出来了。如果读取内网中的服务器信息,只要Web服务器有权限,就很有可能读取出来。