【Web】文件包含+php伪协议例题wp

目录

①[SWPUCTF 2021 新生赛]include

②[SWPUCTF 2021 新生赛]PseudoProtocols

③[BSidesCF 2020]Had a bad day

④文件包含一些姿势(摘自ctfshow)

⑤[Geek Challenge 2019]Secret File

⑥[鹏城杯 2022]简单包含


也是基础之基础,权当快速复习

①[SWPUCTF 2021 新生赛]include

【Web】文件包含+php伪协议例题wp_第1张图片

开幕雷击,先让传个file,这里的传肯定不是在表单上传,经验告诉我们在url中?file=xxx即可

回显如下

【Web】文件包含+php伪协议例题wp_第2张图片

filter伪协议秒了

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

 但这里可能会有朋友有疑问,为什么不能直接包含flag.php呢

我的解答如下:

include('flag.php')并不会拿到 flag, 因为 include 的本质就是执⾏某个 php ⽂件,

include('flag.php') 跟你直接拿浏览器去访问 flag.php 没有任何区别(php被解析)

flag.php 的内容如下

$flag = 'xxx';

?>

include 之后程序只是定义了⼀个 $flag 变量, 也没有别的操作, 更别说查看 flag 了

正确的解法是⽤ php://filter , 将 flag.php 的内容进⾏ base64 编码, 然后传⼊ include

include 接受的内容如果以 开头, 则会把这段内容解析为 PHP 代码, 否则会将其视为纯⽂本, 啥也不⼲直接输出, 这也是为什么 base64 编码之后就能读到 flag.php 源码的原因

②[SWPUCTF 2021 新生赛]PseudoProtocols

明示文件包含起手

【Web】文件包含+php伪协议例题wp_第3张图片

直接filter伪协议读

解码得:

//go to /test2222222222222.php
?>

访问文件得

【Web】文件包含+php伪协议例题wp_第4张图片

文件读取内容要等于I want flag

则用data协议写入

payload:?a=data://text/plain,I want flag

【Web】文件包含+php伪协议例题wp_第5张图片

③[BSidesCF 2020]Had a bad day

博客题有点哈人()

进入题目,两个按钮,点击任意一个均出现一张照片,且URL参数提交相应的值

【Web】文件包含+php伪协议例题wp_第6张图片


利用php:filter读取index.php发现出错(其实就是题目自己拼接了.php后缀,挺常见)
php://filter/convert.base64-encode/resource=index.php

【Web】文件包含+php伪协议例题wp_第7张图片

去掉.php后缀名后成功获取到源码的base64值,解码后得到源码


  $file = $_GET['category'];
  if(isset($file)){
    if( strpos( $file, "woofers" ) !==  false || strpos( $file, "meowers" ) !==  false || strpos( $file, "index")){
      include ($file . '.php');
    }else{
      echo "Sorry, we currently only support woofers and meowers.";
    }
  }
?>

可以看到提交的参数必须包含三个关键字才能加载相应的函数,并且自动在后面加上php后缀名
php://filter可以在resource之前嵌套一层目录(这个特性可以积累一下),利用此原理获取flag
输入php://filter/convert.base64-encode/index/resource=flag,得到base64编码,解码后得到flag

(index换成woofers或meowers都行)

④文件包含一些姿势(摘自ctfshow)

(想到哪写到哪了)

1.data协议 php代码执行

【Web】文件包含+php伪协议例题wp_第8张图片

2.data协议 php代码执行+base64绕过

【Web】文件包含+php伪协议例题wp_第9张图片

3.日志包含+UA头代码执行

【Web】文件包含+php伪协议例题wp_第10张图片

⑤[Geek Challenge 2019]Secret File

(这题考察的主要是信息搜集能力,文件包含真的很简单)

【Web】文件包含+php伪协议例题wp_第11张图片

开幕雷击,啥也没有,直接看源码,发现一个href链接,点开跳转

【Web】文件包含+php伪协议例题wp_第12张图片

按一下试试

【Web】文件包含+php伪协议例题wp_第13张图片

啥也没看到,bp抓包

【Web】文件包含+php伪协议例题wp_第14张图片

访问得到如下源码:


    secret
    

filter没过滤,秒了

payload:

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

类似的可以参考一下[ACTF2020 新生赛]Upload

⑥[鹏城杯 2022]简单包含

源码起手,这不白送?

(ps:值得注意的是var/www/html是apache或者nginx的默认web路径,php文件一般在这一层)

【Web】文件包含+php伪协议例题wp_第15张图片

直接filter,秒...没秒掉?

竟然有waf!

(在RCE1一文中我曾表示遇到waf不要慌,可以通过各种手段读index.php源码,如cat,include,而这里显然是后者)

payload:flag=php://filter/convert.base64-encode/resource=index.php

base64解码后得到:

因为waf用的是&&连接,而后者我们无法绕过,只能从前者入手了

(前置知识:$_POST、file_get_contents (“php://input”) 和 $GLOBALS [‘HTTP_RAW_POST_DATA’] 这三个方法都是用来接收 post 请求的)

a=141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414&flag=php://filter/read=convert.base64-encode/resource=flag.php获得flag源码。

拿下!

你可能感兴趣的:(php,开发语言,CTF,WEB)