NuScenesAnalysis 实战:nuScenes 数据统计、类别分布与场景筛选
2026/10/16 12:29:18
重点是理解CURL函数和file_get_contents函数引发的漏洞
使用的php版本是5.6.9
curl不是单独的函数,是基于libcurl库的一套请求工具集,所以支持的协议比较多
php中内置的简单文件/资源读取函数,重点是轻量级
ssrf的最基础前提了通过查看后端源码分析
if(isset($_GET['url'])&&$_GET['url']!=null){//直接获取GET请求传入的URL值$URL=$_GET['url'];$CH=curl_init($URL);curl_setopt($CH,CURLOPT_HEADER,FALSE//只返回响应体curl_setopt($CH,CURLOPT_SSL_VERIFYPEER,FALSE//禁用SSL证书校验$RES=curl_exec($CH);//发送请求curl_close($CH);echo$RES;//直接将请求结果返回}CURl函数默认支持多种协议,包括http/https,file,dict,**gopher**等多种协议壹、http
贰、file
访问windows的早期配置文件
叄、其他的协议只要修改协议名和遵循格式就行
防护手段:
if(isset($_GET['url'])&&$_GET['url']!=null){//接收前端URL没问题,但是要做好过滤,如果不做过滤,就会导致SSRF$URL=$_GET['url'];$CH=curl_init($URL);//协议判断$url_info=parse_url(strtolower($URL));if(!in_array($url_info['scheme'],array('http','https'))){//scheme: 协议类型 die('出错了1');}// 定义访问白名单$list=['info1.php'];// 访问文件判断$filename=basename($url_info['path']);if(!in_array($filename,$list)){die('出错了2');//还存在/../等绕过方式}// 服务器判断$system_ip=['127.0.0.1','192.168.1.1'];//访问白名单 // 要实现还是验证具体的ip地址,这只是验证的是字符串$host=$url_info['host'];if(!in_array($host,$system_ip)){die('出错了3');}这样可以初步过滤和防护ssrf漏洞,但还是有问题哦
if(isset($_GET['file'])&&$_GET['file']!=null){$filename=$_GET['file'];$str=file_get_contents($filename);echo$str;}file_get_contents函数发送请求,无任何过滤防护手段file_get_contents()支持的协议比较少,包括http/https,file,ftp协议壹、连接外部的资源
贰、访问文件
叄、伪协议访问后端源码
肆、其他的协议也是类似的操作
if(isset($_GET['file'])&&$_GET['file']!=null){$filename=$_GET['file'];$url_info=parse_url(strtolower($filename));// 协议判断if(!in_array($url_info[scheme],array('http','https'))){//scheme: 协议类型die('出错了1');}// 定义访问白名单$list=['info2.php'];// 访问文件判断$file=basename($url_info['path']);if(!in_array($file,$list)){die('出错了2');//还存在/../等绕过方式}// 服务器判断$system_ip=['127.0.0.1','192.168.1.1'];//访问白名单$host=$url_info['host'];if(!in_array($host,$system_ip)){die('出错了3');}//要实现还是验证具体的ip地址,这只是验证的是字符串$str=file_get_contents($filename);echo$str;}allow_url_fopen/allow_url_include,限制open_basedir,禁用危险函数