news 2026/6/24 6:23:01

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/6/7 4:41:35

HuggingFace镜像网站推荐:快速拉取大模型提升TTS训练效率

HuggingFace镜像网站推荐:快速拉取大模型提升TTS训练效率 在语音合成技术飞速演进的今天,GLM-TTS 这类基于大语言模型(LLM)架构的零样本语音克隆系统正逐步从实验室走向实际应用。只需一段几秒的参考音频,就能精准复刻…

作者头像 李华
网站建设 2026/6/22 12:43:58

镜像站点维护:定期同步更新GLM-TTS最新版本内容

镜像站点维护:定期同步更新GLM-TTS最新版本内容 在语音合成技术飞速演进的今天,企业对个性化、高保真语音生成的需求正以前所未有的速度增长。从智能客服到有声读物,从虚拟主播到无障碍阅读,越来越多的应用场景要求系统不仅能“说…

作者头像 李华
网站建设 2026/6/6 9:09:13

如何查看磁盘的目录的大小

工作中经常服务器磁盘空间满了的问题,这问题首先查出哪个目录的占据多少空间?比较好的命令:find / -type f -size 100M 2>/dell/null | xargs du -h | sort -hr |head -10

作者头像 李华
网站建设 2026/6/15 15:39:05

比加密更优雅

桌面文件“一键隐身”:测评一种比加密更优雅的数字隐私方案我们需要的,往往不是坚不可摧的堡垒,而是一道可以随时拉上的帘子。一、痛点切入:你的桌面,真的只属于你一个人吗?电脑桌面,是数字世界…

作者头像 李华
网站建设 2026/6/10 13:40:59

基于multisim的三路彩灯控制器电路设计

要求:(1)设计一种组合式彩灯控制电路,该电路由三路不同控制方法的彩灯组成,彩灯采用不同颜色的发光二极管来实现。(2)由1个开关控制,按1次亮红色彩灯,按 2次亮绿色彩灯,按 3次亮黄色彩灯,按 4次彩灯灭。 仿…

作者头像 李华