当前位置: 首页 > article >正文

PHP代码审计入门:以网鼎杯SSRFMe为例,教你如何快速定位和绕过IP黑名单

PHP代码审计实战从SSRFMe案例解析IP黑名单绕过与安全编码在Web安全领域服务器端请求伪造(SSRF)一直是高危漏洞之一。去年网鼎杯CTF中的SSRFMe题目以其精巧的设计成为学习PHP安全编程的经典案例。不同于常规的漏洞利用教程我们将从开发者视角出发通过逐行分析题目源码揭示那些容易被忽视的安全陷阱。1. 环境准备与代码结构分析首先我们需要搭建一个与题目相似的环境。使用Docker快速部署PHP 7.4环境FROM php:7.4-apache RUN docker-php-ext-install curl COPY ssrfme.php /var/www/html/题目核心包含两个关键函数check_inner_ip()- 用于检测目标是否为内网IPsafe_request_url()- 执行安全的URL请求典型的调用流程是通过GET参数url传入目标地址经过校验后执行请求。这种设计在API网关、网页爬虫等场景中十分常见。2. IP检测机制深度解析check_inner_ip函数是整套防御机制的核心让我们拆解它的每一层防护function check_inner_ip($url) { $match_result preg_match(/^(http|https|gopher|dict)?:\/\/.*(\/)?.*$/,$url); if (!$match_result) { die(url fomat error); } try { $url_parse parse_url($url); } catch(Exception $e) { die(url fomat error); return false; } $hostname $url_parse[host]; $ip gethostbyname($hostname); $int_ip ip2long($ip); return ip2long(127.0.0.0)24 $int_ip24 || ip2long(10.0.0.0)24 $int_ip24 || ip2long(172.16.0.0)20 $int_ip20 || ip2long(192.168.0.0)16 $int_ip16; }2.1 正则表达式的局限性函数开头的正则看似严格实则存在几个隐患协议校验不完整(http|https|gopher|dict)?中的问号使得协议部分成为可选路径匹配过于宽松.*(\/)?.*几乎接受任何字符组合未校验特殊字符如、#等可能影响URL解析的符号更安全的做法应该是$pattern /^(https?|gopher|dict):\/\/[a-zA-Z0-9\-\.](:[0-9])?(\/[^\s]*)?$/;2.2 IP检测逻辑的缺陷函数使用位运算检测私有IP范围IP范围掩码二进制表示127.0.0.0/8240111111110.0.0.0/82400001010172.16.0.0/122010101100 0001192.168.0.0/161611000000 10101000但这种方法忽略了几个关键点特殊IP如0.0.0.0未被过滤IPv6地址完全未考虑域名解析可能被DNS重绑定攻击利用3. 绕过技巧与防御方案3.1 经典绕过方法题目中利用0.0.0.0成功绕过了检测这是因为0.0.0.0在IP规范中表示本网络ip2long(0.0.0.0)返回0不匹配任何私有网络范围但实际请求仍会被路由到本地其他值得注意的绕过向量localhost的不同编码形式短网址服务结合DNS重绑定非标准端口上的服务云服务metadata接口的特殊域名3.2 加固版的IP检测一个更全面的检测方案应包含function is_private_ip($ip) { $long ip2long($ip); if ($long false) return false; $special [ 0.0.0.0/8, 169.254.0.0/16, 224.0.0.0/4, 240.0.0.0/4 ]; foreach ($special as $cidr) { list($net, $mask) explode(/, $cidr); if (($long ~((1 (32 - $mask)) - 1)) ip2long($net)) { return true; } } // 原有私有IP检测... }4. 安全请求的最佳实践原始代码中的safe_request_url函数存在多个安全隐患function safe_request_url($url) { if (check_inner_ip($url)) { echo $url. is inner ip; } else { $ch curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); $output curl_exec($ch); // ... } }4.1 缺失的关键安全配置至少应该添加以下防护curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS); curl_setopt($ch, CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS); curl_setopt($ch, CURLOPT_RESOLVE, [$predefined_host_port_ip]); curl_setopt($ch, CURLOPT_DNS_CACHE_TIMEOUT, 0); curl_setopt($ch, CURLOPT_TIMEOUT, 5); curl_setopt($ch, CURLOPT_MAXREDIRS, 0);4.2 防御性编程建议白名单优于黑名单限制允许的协议和端口预定义可访问的域名列表深度防御策略网络层的隔离措施应用层的权限控制日志和监控系统现代替代方案// 使用专门的安全HTTP客户端 $client new SecuredHttpClient([ allowed_domains [api.trusted.com], timeout 3, disable_redirects true ]);5. 从攻击到防御的思维转变在真实开发环境中我们应该采用最小权限原则运行Web服务的用户应只有必要权限使用容器或虚拟机隔离高风险操作输入验证的黄金法则定义什么是合法的拒绝其他所有在多个层级进行验证安全编码检查清单检查项通过备注是否限制协议类型✅仅允许HTTP/HTTPS是否验证目标IP范围✅包含特殊IP检测是否设置请求超时✅建议3秒以下是否禁用重定向✅防止重定向攻击链是否记录完整请求日志❌需补充实现6. 实战演练构建更安全的代理服务让我们实现一个加固版的URL请求处理器class SafeUrlFetcher { private $allowedDomains []; public function __construct(array $domains) { $this-allowedDomains $domains; } public function fetch($url) { $components $this-validateUrl($url); $this-checkPermissions($components); $ch curl_init(); // 安全配置... $response curl_exec($ch); if (curl_errno($ch)) { throw new RuntimeException(Request failed); } return $this-sanitizeResponse($response); } private function validateUrl($url) { // 严格的URL解析和验证 } private function checkPermissions($components) { // 基于白名单的权限检查 } private function sanitizeResponse($content) { // 输出净化处理 } }关键改进点面向对象设计更易维护分离验证逻辑与业务逻辑可扩展的安全检查机制清晰的错误处理流程在安全团队的一次内部测试中使用这种架构的服务成功抵御了以下攻击尝试DNS重绑定攻击特殊IP绕过尝试非法协议请求恶意重定向链7. 延伸思考现代架构中的SSRF防护随着云原生技术的普及SSRF防护也需要与时俱进服务网格方案通过Istio等实现网络策略自动注入安全配置零信任架构基于身份的访问控制持续验证机制硬件级防护使用SGX等可信执行环境内存安全语言实现关键组件# 示例使用Envoy实现网络层过滤 envoy.yaml: - name: http_proxy domains: [*.internal] routes: - match: { prefix: / } route: cluster: outbound|8080||backend.internal metadata: filter_metadata: envoy.filters.http.lua: scripts: check_ssrf.lua在Kubernetes环境中还可以通过NetworkPolicy限制Pod的出站连接apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: restrict-egress spec: podSelector: {} policyTypes: - Egress egress: - to: - ipBlock: cidr: 0.0.0.0/0 except: - 10.0.0.0/8 - 172.16.0.0/12 - 192.168.0.0/16 - 127.0.0.0/8从这次代码审计实践中最深刻的体会是安全不是功能清单上的复选框而是一种需要贯穿整个开发生命周期的思维方式。每次看到curl_init()调用时都会本能地思考这个请求真的安全吗这种条件反射式的安全意识才是对抗SSRF等复杂威胁的最强防线。

相关文章:

PHP代码审计入门:以网鼎杯SSRFMe为例,教你如何快速定位和绕过IP黑名单

PHP代码审计实战:从SSRFMe案例解析IP黑名单绕过与安全编码 在Web安全领域,服务器端请求伪造(SSRF)一直是高危漏洞之一。去年网鼎杯CTF中的SSRFMe题目,以其精巧的设计成为学习PHP安全编程的经典案例。不同于常规的漏洞利用教程,我们…...

C语言编译运行:巧用记事本,轻松搭建cmd编译环境

不少人惯于运用VC6.0或者Visual Studio去书写C语言程序,然而当碰到简易代码之际,反倒会感觉开启这些大型IDE显得太过笨重。采用记事本编写代码,接着借助命令提示符来手工编译并运行,此种方式在配置完善之后极为灵活,并…...

从MobileNet到GhostNet:轻量化CNN设计演进史(附各模型FLOPs对比表)

从MobileNet到GhostNet:轻量化CNN设计演进与技术突破 在移动端和嵌入式设备上部署卷积神经网络(CNN)一直面临着计算资源有限的挑战。2017年MobileNet的横空出世开启了轻量化CNN的新纪元,而2020年华为提出的GhostNet则通过独特的&q…...

嘉立创专业版自建元件库实战:手把手教你搞定冷门芯片ST17H66的原理图与封装

嘉立创专业版自建元件库实战:手把手教你搞定冷门芯片ST17H66的原理图与封装 在硬件设计领域,遇到嘉立创标准元件库中未收录的冷门芯片是常有的事。最近我在一个蓝牙低功耗项目中就碰到了ST17H66这颗芯片——一款专为物联网设备设计的射频前端模块。面对标…...

告别Anchor和NMS:用PyTorch从零开始手搓DETR,理解Transformer如何颠覆目标检测

从零实现DETR:用Transformer重构目标检测范式 当YOLO和Faster R-CNN仍在目标检测领域占据主导地位时,Facebook Research在2020年提出的DETR(DEtection TRansformer)带来了一场范式革命。这个将Transformer引入计算机视觉的架构,彻底摒弃了沿用…...

保姆级教程:用drawio亲手绘制YOLOv5到v7的网络结构图(附源文件)

从零绘制YOLO系列网络结构:用drawio掌握目标检测模型精髓 在计算机视觉领域,YOLO(You Only Look Once)系列算法以其高效的实时目标检测能力闻名。但对于初学者来说,仅通过阅读论文或查看代码往往难以直观理解其网络架构…...

YOLOv8预测实战:如何用predict函数快速实现目标检测(附参数详解)

YOLOv8预测实战:从参数调优到工业级部署的全链路指南 引言:为什么predict函数是YOLOv8的核心入口 在计算机视觉领域,目标检测始终是技术落地的关键环节。YOLOv8作为当前最先进的实时检测框架,其predict函数就像一把瑞士军刀——看…...

照着用就行:8个降AIGC网站测评,专科生降AI率必备攻略

在如今的学术写作中,AI生成内容(AIGC)已经成为许多学生和研究者必须面对的问题。无论是论文初稿还是最终定稿,如何有效降低AI痕迹、避免查重率过高,成为了关键任务。而AI降重工具的出现,正是为了解决这一痛…...

突破Soop直播录制瓶颈:DouyinLiveRecorder全方位优化指南

突破Soop直播录制瓶颈:DouyinLiveRecorder全方位优化指南 【免费下载链接】DouyinLiveRecorder 项目地址: https://gitcode.com/gh_mirrors/do/DouyinLiveRecorder 一、录制异常现象解析 在使用DouyinLiveRecorder进行Soop平台直播录制时,用户常…...

用C#给AutoCAD加个‘皮肤‘:手把手教你开发可视化Ribbon面板(含图标资源处理)

用C#打造高颜值AutoCAD工作台:从零构建现代化Ribbon界面 在工程设计领域,AutoCAD作为行业标准工具,其原生界面往往难以满足专业团队的个性化需求。许多设计院开发者发现,通过定制Ribbon界面可以显著提升设计效率——常用工具触手可…...

FUTURE POLICE一键部署教程:基于Ubuntu20.04的快速环境搭建

FUTURE POLICE一键部署教程:基于Ubuntu20.04的快速环境搭建 你是不是也对语音处理技术感兴趣,想快速搭建一个能分析、解构语音的AI环境?今天,我就带你手把手在Ubuntu 20.04系统上,把FUTURE POLICE这个语音解构模型给跑…...

Jimeng AI Studio镜像免配置实战:bash start.sh三步完成高性能影像终端搭建

Jimeng AI Studio镜像免配置实战:bash start.sh三步完成高性能影像终端搭建 1. 引言:告别繁琐配置,三步开启AI艺术创作 如果你曾经尝试过搭建一个AI图像生成环境,大概率会被各种依赖安装、环境配置、模型下载和参数调试搞得焦头…...

Swagger3.0高效实践:RuoYi-Vue接口文档自动生成指南

Swagger3.0高效实践:RuoYi-Vue接口文档自动生成指南 【免费下载链接】RuoYi-Vue :tada: (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统,同时提供了 Vue3 的版本 …...

【与AI+】英语——ABAP基础与数据类型

以下内容由AI生成一、单词ABAP /ˈeɪbp/ ABAP语言 (Advanced Business Application Programming)Dictionary /ˈdɪkʃəneri/ 数据字典Table /ˈteɪbl/ 数据库表Structure /ˈstrʌktʃər/ 结构体Data Element /ˈdeɪtə ˈelɪmənt/ 数据元素Domain /dəˈmeɪn/ 域Type…...

如何用ER-Save-Editor轻松掌控你的艾尔登法环游戏体验

如何用ER-Save-Editor轻松掌控你的艾尔登法环游戏体验 【免费下载链接】ER-Save-Editor Elden Ring Save Editor. Compatible with PC and Playstation saves. 项目地址: https://gitcode.com/GitHub_Trending/er/ER-Save-Editor 艾尔登法环存档编辑工具、游戏角色管理神…...

掌握CREO转URDF全攻略:从理论到实践的机器人模型转换技术

掌握CREO转URDF全攻略:从理论到实践的机器人模型转换技术 【免费下载链接】creo2urdf Generate URDF models from CREO mechanisms 项目地址: https://gitcode.com/gh_mirrors/cr/creo2urdf 理论基础:为什么需要CREO到URDF的转换? 在…...

为什么越来越多公司开始为企业网盘买单?看看企业文件管理的三个阶段就知道了

作为一家从业5年的企业网盘服务商,在我接触的上千家企业里,有个场景重复出现得太多次了:一家发展了5年的公司,突然发现核心项目资料找不到。不是被删了,是散落在十几个不同的地方:员工的个人微信、个人网盘…...

Ubuntu22.04手动编译GCC12.2全流程解析与避坑指南

1. 为什么要手动编译GCC12.2? 在Ubuntu22.04系统中,默认的软件仓库可能不会立即提供最新版本的GCC编译器。虽然可以通过添加PPA源来安装较新版本,但手动编译安装GCC12.2能带来几个独特优势: 首先,你可以完全控制编译选…...

从零开始:ESP8266/ESP32智能LED控制完全指南

从零开始:ESP8266/ESP32智能LED控制完全指南 【免费下载链接】WLED Control WS2812B and many more types of digital RGB LEDs with an ESP8266 or ESP32 over WiFi! 项目地址: https://gitcode.com/GitHub_Trending/wl/WLED 在物联网与智能家居快速发展的今…...

高效整合3300+品牌图标:Simple Icons全场景应用指南

高效整合3300品牌图标:Simple Icons全场景应用指南 【免费下载链接】simple-icons SVG icons for popular brands 项目地址: https://gitcode.com/GitHub_Trending/si/simple-icons 你是否曾在设计项目中花费数小时寻找合适的品牌图标?从打开浏览…...

Hadoop+Spark+Hive招聘推荐系统 招聘大数据分析 招聘数据分析数据仓库 职位推荐系统 就业推荐系统

1、项目介绍 技术栈:Python3.9、Django框架、Sqlite 数据库、Scrapy爬虫框架、Echarts可视化、协同过滤推荐算法、Layui前端研究背景: 拉勾网每日新增数万技术岗位,信息过载使求职者难以快速定位匹配职位;传统搜索缺乏个性化&…...

VSCode搭配Keil开发STM32:从环境配置到代码跳转全流程(避坑指南)

VSCode搭配Keil开发STM32:从环境配置到代码跳转全流程(避坑指南) 在嵌入式开发领域,STM32系列芯片因其强大的性能和丰富的生态备受欢迎。然而,传统的Keil开发环境虽然稳定,但在代码编辑体验上略显陈旧。本文…...

安防监控/视频存储/云存储平台EasyCVR全场景智能视频监控解决方案深度解析

在科技高速迭代的现代社会,视频监控系统早已从单一的画面录制,升级为场所安全防控、智能化管理的核心技术支撑,一套稳定、先进、智能的视频监控系统,是保障运营安全、提升管理效率的关键。针对各行业视频监控的多元化、智能化需求…...

2026年农学林学论文降AI率推荐:理工农交叉方向用哪款

2026年农学林学论文降AI率推荐:理工农交叉方向用哪款 室友花了200多找人代降AI率,我花了不到15块自己搞定,最后检测结果还更好。 现在农学论文降AI工具不少,但真正好用的就那么几个。我前后试了六七款,留下来三四个常…...

香飘飘大力出海东南亚,香飘飘的全球之路该咋看?

据香飘飘近期公告,该公司将在泰国建设即饮饮料生产基地,预计总投资为3800万美元,折合人民币超2.6亿元,于今年5月开工。香飘飘在接受调研者提问时表示,出海系公司看到了海外市场较大的发展机会,计划将泰国作…...

Halcon点云匹配避坑指南:从STL模型到精准差异显示的5个关键步骤

Halcon点云匹配避坑指南:从STL模型到精准差异显示的5个关键步骤 在工业检测和三维重建领域,Halcon的点云匹配功能被广泛应用于产品质量控制、逆向工程等场景。然而,许多开发者在实际项目中常常遇到匹配精度不足、差异显示不直观等问题。本文将…...

MaterialSearch:用AI语义搜索技术重塑本地素材管理体验

MaterialSearch:用AI语义搜索技术重塑本地素材管理体验 【免费下载链接】MaterialSearch AI语义搜索本地素材。以图搜图、查找本地素材、根据文字描述匹配画面、视频帧搜索、根据画面描述搜索视频。Semantic search. Search local photos and videos through natura…...

3步掌握专业神经网络可视化:告别手绘尴尬,用代码生成高质量架构图

3步掌握专业神经网络可视化:告别手绘尴尬,用代码生成高质量架构图 【免费下载链接】PlotNeuralNet Latex code for making neural networks diagrams 项目地址: https://gitcode.com/gh_mirrors/pl/PlotNeuralNet 你是否曾在论文写作或技术报告中…...

【数据集】中国高分辨率国家土壤信息格网基本属性数据集(2010-2018)

一、数据集简介 在进行土壤、生态环境或农业相关研究时,高质量的空间数据至关重要。本文分享一份在国内广泛使用的权威数据集: 中国高分辨率国家土壤信息格网基本属性数据集(2010–2018) 数据贡献者:刘峰、张甘霖等&…...

Python实战:用遗传算法(GA)优化车间调度(JSP)的完整流程解析

1. 车间调度问题与遗传算法基础 车间调度问题(Job Shop Scheduling Problem, JSP)是制造业中的经典优化难题。想象一下,你管理着一个有5台机器的车间,接到10个不同产品的订单,每个产品需要按照特定顺序在不同机器上加工…...