以pikachu靶场ssrf(curl)为例:
你会发现什么也没防御项访问基本的文件内容,端口开放都是可以看到的,没有任何防御措施。
我们去查看一下他的源码有没有过滤什么
没有任何过滤,咱么尝试进行过滤一下,禁止使用dict,file 等协议的黑名单
注:为了保险将原有的代码复制一份在进行测试黑白名单
黑名单:
简单来说就是什么不能访问咱就构造啥
$URL =$_GET['url'];
$lin =array(
"file" => "",
"dict" => ""
);
$URL1 = str_replace(array_keys($lin),$lin,$URL);
if ($URL1 != $URL){
exit("你想咋滴!退");
};
场景测试:
防御成功。
尝试只能允许http和HTTPS协议
白名单:
$URL =$_GET['url'];
$octet = explode( ":", $URL);
if($octet[0]=="http" | $octet[1]=="https"){
echo $octet;
die("小子你想干啥?");
}
$URL=$octet[0].":".$octet[1];
测试场景:
输入http协议的可以通过
输入file协议就会拦截不让访问
防御成功。