news 2026/5/1 10:00:22

pikachu靶场ssrf通关学习(含基础防护)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
pikachu靶场ssrf通关学习(含基础防护)

重点是理解CURL函数和file_get_contents函数引发的漏洞

使用的php版本是5.6.9

(一)、查看页面信息

一、CURL

curl不是单独的函数,是基于libcurl库的一套请求工具集,所以支持的协议比较多

二、file_get_content

php中内置的简单文件/资源读取函数,重点是轻量级

  1. 查看后发现都存在用户可控的请求传入到服务器,那就是存在ssrf的最基础前提了
  2. 那这里就详细尝试包含(http访问文件,file读取文件,dict扫描其他主机)

(二)、CURL关卡

一、代码审计

通过查看后端源码分析

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;//直接将请求结果返回}
  1. 直接获取请求中的URL值,未作任何过滤操作操作
  2. CURl函数默认支持多种协议,包括http/httpsfiledict,**gopher**等多种协议
二、协议访问

壹、http

  • 直接访问网站下的其他文件和百度网站,都可以访问成功(重点是没有过滤)

贰、file

访问windows的早期配置文件

叄、其他的协议只要修改协议名和遵循格式就行

三、防护

防护手段:

  1. 过滤协议,只允许http和https协议
  2. 控制访问的文件(使用文件映射比较好)
  3. 验证访问的ip地址
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漏洞,但还是有问题哦

(三)、file_get_content关卡

一、代码审计
if(isset($_GET['file'])&&$_GET['file']!=null){$filename=$_GET['file'];$str=file_get_contents($filename);echo$str;}
  1. 可以看到非常的简单,直接获取GET请求中的file值后使用file_get_contents函数发送请求,无任何过滤防护手段
  2. 需要注意的是函数只能接受GET请求的参数
  3. file_get_contents()支持的协议比较少,包括http/httpsfileftp协议
二、协议访问

壹、连接外部的资源

贰、访问文件

叄、伪协议访问后端源码

  • 可以看出后端会直接返回输出的信息,那就输入不存在的文件导致报错,看看后端路径

  • 通过php的伪协议输出了后端源码

肆、其他的协议也是类似的操作

三、防护手段
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;}
  • 这是最简单的过滤防止ssrf漏洞,但还是有问题哦

四、配置防护

  1. php.ini中关闭allow_url_fopen/allow_url_include,限制open_basedir,禁用危险函数
  2. web服务器的危险请求拦截
  3. 设置防护防火墙,警用特殊IP地址
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 8:39:34

组合逻辑电路设计快速理解:关键时序参数与传播延迟关系图解

组合逻辑电路设计的时序密码:传播延迟如何决定系统命运你有没有遇到过这样的情况?代码写得完美无缺,功能仿真全部通过,结果一上板——数据错乱、状态机跑飞。查来查去,问题竟然出在一条看似简单的组合逻辑路径上。没错…

作者头像 李华
网站建设 2026/5/1 7:11:20

通俗解释UDS 28服务如何影响网络通信

一文讲透UDS 28服务:如何精准“掐断”ECU通信流你有没有遇到过这种情况——正在给某个ECU刷写软件,结果总线上传来一堆无关报文,导致编程反复超时失败?或者在远程诊断时,多个节点抢着回复,搞得诊断仪应接不…

作者头像 李华
网站建设 2026/5/1 6:16:13

Dark Mode暗黑主题:保护开发者深夜工作的视力健康

Dark Mode 暗黑主题:守护开发者深夜工作的视觉健康 在人工智能与大模型技术飞速演进的今天,语音合成系统(Text-to-Speech, TTS)早已不再是实验室里的概念玩具。从智能客服到虚拟主播,从无障碍阅读到个性化内容生成&…

作者头像 李华
网站建设 2026/5/1 6:14:58

加载状态提示:明确告知用户GLM-TTS正在处理中

加载状态提示与零样本语音克隆:提升 GLM-TTS 交互体验的关键实践 在当前 AI 音频生成技术飞速发展的背景下,用户对语音合成系统的期待早已超越“能说话”这一基本功能。人们希望系统不仅声音自然、支持个性化音色,还能在操作过程中给予清晰反…

作者头像 李华
网站建设 2026/5/1 7:48:10

AI原生应用领域语义检索:助力智能决策的实现

AI原生应用的语义检索:从“关键词匹配”到“理解意图”,让智能决策更“懂你” 关键词 语义检索、AI原生应用、向量数据库、大语言模型(LLM)、向量嵌入、上下文理解、智能决策 摘要 当你问Siri“推荐一家适合带孩子吃的西餐厅”…

作者头像 李华
网站建设 2026/4/18 5:34:15

Windows平台离线安装Vivado的正确姿势

在无网环境中成功部署Vivado:Windows平台离线安装实战指南 你有没有遇到过这样的场景?项目紧急启动,FPGA开发环境却迟迟搭不起来——因为目标主机被严格隔离, 完全断网 。军工、航天、金融等高安全等级行业常见这种“内网孤岛”…

作者头像 李华