针对 SSRF 漏洞的黑白名单限制
`
前言
SSRF (Server-Side Request Forgery) 漏洞是一种安全漏洞,攻击者可以借助该漏洞向目标服务器发起请求,获取敏感信息或者执行恶意操作。以下是 SSRF 漏洞的危害:
-
获取敏感信息:攻击者通过 SSRF 漏洞可以访问内部网络,获取敏感数据如数据库密码、加密秘钥等,对受害者造成重大损失。
-
网络攻击:攻击者可以通过 SSRF 漏洞访问内部网络服务,如 SSH、定时任务等,进一步控制服务器,发起网络攻击。
-
服务拒绝:攻击者可以通过 SSRF 漏洞向目标服务器发起大量请求,让服务器瘫痪或者变得不可用。
-
跨站点请求伪造:攻击者可以利用 SSRF 漏洞构造恶意请求,使目标服务器与其他站点通信,触发跨站点请求伪造漏洞。
综上所述,SSRF 漏洞的危害非常大,攻击者可以利用该漏洞获取受害人敏感信息,进而通过控制目标服务器发起攻击,并且对目标服务器造成不可逆的损失。
下面我们通过pikachu
靶场来演示如何防范 SSRF 漏洞。
漏洞复现
首先来演示一下
pikachu
靶场中的 ssrf 漏洞
这里可以看到让我们点击
会跳转出一首诗,但是我们可以看到这里
url
框中出现了url=http://127.0.0.1/pikachu/vul/ssrf/ssrf_info/info1.php
,这就是漏洞点,我们可以通过这个漏洞访问目标机的文件
?url=file://c:\windows\system32\drivers\etc\hosts
这里就打开了hosts文件
防护
这里就是文件路径,我们可以先看一看文件内容
可以看到这个文件目录下有两个
.php
文件,其中漏洞出现的文件是在ssrf_curl.php
文件中
防护的方式不外乎两种,一种是黑名单,一种是白名单,下来分别展示
黑名单
黑名单的作用主要是限制某些对象的行为或访问权限,防止其对系统或者用户造成威胁或者骚扰
代码如下:
//黑名单.pho
$URL = trim($_GET['url']);
echo $URL."<br \>";
$substitutions = array(
'file' => '',
'system32' => '',
'windows' => '',
'c:' => '',
);
$URL = str_replace( array_keys( $substitutions ), $substitutions , $URL);
echo ('黑客');
第一步将GET接收到的
url
中的空格全部去掉
第二步定义一个数组,将key转换为value
第三步是将出现的在url中的key转换为value,然后保存带url中
白名单
白名单是针对特定项目或系统而设立的一种安全机制,它允许指定的特定用户或客户端进入系统或使用功能,其他用户或客户端则被禁止。
代码如下:
$URL = trim($_GET['url']);
$octet = explode( "." , $URL);
echo $octet[1]."<br \>";
if ($octet[1] != "php"){
die("抓到你了");
}
$URL=$octet[0].".".$octet[1];
第一步将GET接收到的
url
中的空格全部去掉
第二步创建一个数组将获取的url以.
为关键字分开
第三步判断第二部分是否为php