[极客大挑战 2019]Secret File1

知识点: 

文件包含漏洞:https://blog.csdn.net/Monsterlz123/article/details/93964916

文件包含定义: 服务器执行PHP文件时,可以通过文件包含函数加载另一个文件中的PHP代码,并且当PHP来执行,这会为开发者节省大量的时间。这意味着您可以创建供所有网页引用的标准页眉或菜单文件。当页眉需要更新时,您只更新一个包含文件就可以了,或者当您向网站添加一张新页面时,仅仅需要修改一下菜单文件(而不是更新所有网页中的链接)。造成方便的同时,也留下了隐患。

文件包含常用函数:

require()#函数出现错误的时候,会直接报错并退出程序的执行
require_once()#只包含一次
include()#在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行
include_once()#只包含一次

原理: 在进行文件包含的时候,没有对参数进行严格的过滤

​​​​​​​<?php 
  $filename = $_GET['filename'];
  include($filename);
?>
如上述例子 在引用filename函数时,没有过滤,直接引用了这个函数

文件包含分类:                                                                                                                         本地包含:可以进行一些本地的文件读取                                                                                 远程包含:可以对外网上的文件进行读取

远程文件包含: PHP的配置文件allow_url_fopen和allow_url_include设置为ON,include/require等包含函数可以加载远程文件,如果远程文件没经过严格的过滤,导致了执行恶意文件的代码,这就是远程文件包含漏洞。

条件

allow_url_fopen = On(是否允许打开远程文件)
allow_url_include = On(是否允许include/require远程文件)
php伪协议: php伪协议本来是方便使用的,但如果存在包含漏洞,攻击者可以充分利用读取或写入一些文件 这里介绍几个常用的
php://filter(本地磁盘文件进行读取)
php://input
file://伪协议 (读取文件内容)
php://filter用法 
?php://filter/convert.base64-encode/resource=xxx.php
 通过Base64解密后

成功读取

file://伪协议 (读取文件内容) 通过file协议可以访问本地文件系统,读取到文件的内容 

php://input 可以访问请求的原始数据的只读流。即可以直接读取到POST上没有经过解析的原始数据。enctype=”multipart/form-data” 的时候 php://input 是无效的。 用法:?file=php://input 数据利用POST传过去。

php://input(写入木马) 条件:php配置文件中需同时开启 allow_url_fopen 和 allow_url_include(PHP < 5.3.0),(不开启会报错)就可以造成任意代码执行,在这可以理解成远程文件包含漏洞(RFI),即POST过去PHP代码,即可执行。 如果POST的数据是执行写入一句话木马的PHP代码,就会在当前目录下写入一个木马。

php://input(读取post数据) 碰到file_get_contents()就要想到用php://input绕过,因为php伪协议也是可以利用http协议的,即可以使用POST方式传数据,具体函数意义下一项

php://input(命令执行) 条件:php配置文件中需同时开启 allow_url_fopen 和 allow_url_include(PHP < 5.30),就可以造成任意代码执行,在这可以理解成远程文件包含漏洞(RFI),即POST过去PHP代码,即可执行

修复方式

过滤../ ../
配置php.ini文件
都关闭allow_url_fopen 和 allow_url_include
设置白名单

重定向第一次请求和第二次请求非同一个请求

什么是重定向?

重定向(Redirect)就是通过各种方法将各种网络请求重新定个方向转到其它位置(如:网页重定向、域名的重定向、路由选择的变化也是对数据报文经由路径的一种重定向)。

有关重定向的其他补充:

https://blog.csdn.net/weixin_39934520/article/details/107775580 

打开靶场

发现什么都没有,之后查看页面源代码 ,发现 一个.php文件

 查看PHP文件,再查看该页面的源代码

 又发现一个.php文件

 再次查看该PHP文件

发现直接结束了,没有flag,并且./action.php文件直接跳转到end.php文件,所以可以确定存在重定向。

为了拦截action.php,我们可以使用BrupSuite来抓包重放

首先进行抓包

intercept is on:为拦截状态                                                                                                      intercept is off:为非拦截状态

抓包成功后进行重放包 

 

 发现一个secr3t.php文件

访问该文件源代码,得到一个字符串,flag放在了flag.PHP里

这是代码审计,即将file赋值给flag.php(利用文件包含,通过include函数来执行flag.php页面)

 访问flag.php文件及其源代码,并没有发现flag

考虑使用PHP伪协议过滤器filter再次访问

构造payload:

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

 在这个payload里,convert.base64-encode就是一个过滤器,而flag.php就是要过滤的数据流,也就是要读取的文件。

 出现一堆字符串考虑base64解码

 最终得到flag

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值