当前位置: 首页 > article >正文

CTF WEB题

[文件包含,少许难度]

地址:攻防世界

代码审计

WRONG WAY!
<?php
include("flag.php"); #包含了一个“flag.php”文件
highlight_file(__FILE__); #来显示当前文件的源代码
if(isset($_GET["file1"]) && isset($_GET["file2"])) #isset()是一个内置函数,用于检查变量是否存在且为非null。 检查是否设置了get参数“file1”和“file2” 且 有值
{
$file1 = $_GET["file1"]; #get传入一个"file1"赋值给$file1
$file2 = $_GET["file2"]; #get传入一个"file2"赋值给$file2
if(!empty($file1) && !empty($file2)) #检查是否“$file1和$file2” 都不为空
{
if(file_get_contents($file2) === "hello ctf") #(file_get_contents($file2) 是一个内置函数,用于将整个文件的内容读取到一个字符串中的函数调用,file2是一个文件路径。 这里是检查读取file2 文件中的内容 是否和"hello ctf" 完全相等
{
include($file1); # 满足上述条件,才可以执行 include($file1),出发文件包含漏洞,“$file1”的文件可以读取 “flag.php” 的内容
}
}
else
die("NONONO"); #否则,输出“NONONO”
}

详细介绍

(file_get_contents($file2) 一个内置函数,用来读取文件的内容,$file2 是包含文件路径的变量,file_get_contents 函数会打开该文件,并且将文件的所有内容会作为一个字符串返回,打开失败时,则返回false

最后包含file1,我们希望得到flag,获取内容,可以用filter读取

file1和 file2 要存在,且都不为空,file2 的内容为 hello ctf

因为file2 的内容为 hello ctf 可以用php://input 和data:// 进行绕过

 payload1:?file1=php://filter/read/convert.base64-encode/resource=flag.php&file2=data://text/plain,hello ctf  
 payload2:?file1=php://filter/read/convert.base64-encode/resource=flag.php&file2=php://input  

总结:

整体来说不难,主要是代码审计,配合文件包含php伪协议即可,多多重复,你也行!


http://www.kler.cn/a/589721.html

相关文章:

  • 每日一题--进程与协程的区别
  • 【在校课堂笔记】Python 第5节课 总结
  • axios 和 fetch异同点
  • Java继承与反思,单例模式与静态的思考
  • 【redis】Jedis 操作 Redis 基础指令(下)
  • Mysql中创建表时的约束条件
  • 力扣刷题——2181.合并零之间的节点
  • Java中的GC是什么?
  • STM32U575RIT6单片机(四)
  • 基于WebRTC与P2P技术,嵌入式视频通话EasyRTC实现智能硬件音视频交互,适配Linux、ARM、RTOS、LiteOS
  • 深度学习处理时间序列(1)
  • 嵌入式学习笔记-C语言知识点:栈的作用,C语言函数参数的入栈顺序,C++ 拷贝构造函数,数组名和指针的区别与联系,指针运算,指针和引用
  • Apache Spark_解决生产环境数据倾斜问题方案及思路
  • Tomcat新手入门指南:从零开始安装与基本配置
  • Python驱动CATIA自动化建模:科赫雪花算法实现与工程应用
  • 《解锁华为黑科技:MindSpore+鸿蒙深度集成奥秘》
  • 咪咕MG101_晨星MSO9380芯片_安卓5.1.1_免拆卡刷固件包
  • Bash语言的手动测试
  • Keepalived 多主模型与 LVS 高可用
  • 基于System V的共享内存函数使用指南