CTFSHOW-WEB入门-命令执行29-32

news/2025/2/2 9:36:18/
  1. 题目:web 29
    1. 题目:
    2. 解题思路:分析代码:
error_reporting(0);
if(isset($_GET['c'])){//get一个c的参数$c = $_GET['c'];//赋值给Cif(!preg_match("/flag/i", $c)){eval($c);//if  C变量里面没有flag,那么就执行C的php代码}}else{highlight_file(__FILE__);
}
3. 又因为ls 命令查看当前目录下的文件,cat命令可以查看文件内容,于是首先ls,在cat,由于过滤了flag,于是可以使用占位符*,代表一个或者多个任意字符:![](https://cdn.nlark.com/yuque/0/2025/png/39210681/1737520641889-74901bc4-59ac-434d-bff6-756a3d7e6bee.png)cat时发现啥也没有,于是查看源代码:![](https://cdn.nlark.com/yuque/0/2025/png/39210681/1737520695912-2b4adc20-da31-4ed1-9322-f3e2bb4630bc.png)
4. 知识点:eval()函数、system()函数
PHP 中,eval() 函数用于将字符串作为 PHP 代码执行。它可以动态地执行代码,但同样也带来了安全性和性能方面的风险。
语法
eval(string $code);
参数: $code 是要执行的 PHP 代码的字符串。
返回值: eval() 返回执行代码的结果。如果代码中没有返回值,则返回 NULLsystem() 函数是 PHP 中的一个内置函数,主要用于执行 shell 命令并直接输出结果到输出流。
语法
string system(string $command, int &$return_var = null);
参数:
$command: 要执行的 shell 命令(字符串)。
$return_var(可选):如果提供,该参数会被赋值为命令执行的返回状态码(整型)。
  1. 题目:web 30
    1. 题目:
    2. 解题思路:首先分析代码:
error_reporting(0);
if(isset($_GET['c'])){$c = $_GET['c'];//前面都和上一个题目差不多,下下面就不一样了if(!preg_match("/flag|system|php/i", $c)){eval($c);//这里过滤了flag system  php//那么就要考虑一下system的替代函数}}else{highlight_file(__FILE__);
}
3. 法一:shell_exec()![](https://cdn.nlark.com/yuque/0/2025/png/39210681/1737522032059-e2e23ef3-86f8-4bc9-abe0-7c1e5a3f509d.png)![](https://cdn.nlark.com/yuque/0/2025/png/39210681/1737522067949-f240f434-d89b-47f5-9f50-a991a29f1743.png)法二:exec():![](https://cdn.nlark.com/yuque/0/2025/png/39210681/1737522116551-d62389bd-f95a-4a69-ae77-4080ca116ccf.png)法三:passthru():![](https://cdn.nlark.com/yuque/0/2025/png/39210681/1737522171707-b88cd03e-67c4-4211-97b7-16193257df8b.png)
4. 知识点:system的替代函数:
PHP中,如果你想要执行系统命令而不直接使用system()函数,可以考虑以下几个替代方法:
1.shell_exec():这个函数用于执行整个外部命令并返回完整的输出结果。
$output = shell_exec('ls -l');
2.exec():类似于shell_exec(), 可以执行一个命令,并获取其输出,但它会替换掉当前脚本的所有输出。
$command = 'ls -l';
exec($command, $output, $return_var);
3.passthru():只适用于输出到终端,不会返回输出值,适合执行那些不需要结果的命令。
passthru('ping google.com');
4.proc_open():提供更大的控制力,允许创建进程管道,适用于复杂系统调用和数据交互。
$descriptorspec = array( 0 => array("pipe", "r"), 
// stdin is a pipe that the child will read from 1 => array("pipe", "w"), // stdout is a pipe that the child will write to 2 => array("pipe", "w") // stderr is a pipe that the child will write to );
$process = proc_open('/bin/ls', $descriptorspec, $pipes); // ... then you can communicate with the process through the pipes
  1. 题目:web 31
    1. 题目:
    2. 解题思路:分析题目代码,可以知道总共过滤了一下内容:flag system php sort shell . 空格 单引号,于是可以采用新加参数输入:也可以使用反字节符号配合echo,执行的效果类似于system,例如echo ls再利用tac加%20(空格)绕过空格和cat:(这里%20不行,可以用%09制表符)
    3. 知识点: 空格绕过,命令执行
  2. 题目:web 32
    1. 题目:
    2. 解题思路:看到题目发现过滤了很多东西 flag system PHP cat shell 句号 空格 单引号 反引号 echo 分号和 括号,那么需要使用括号的函数passthru()system()shell_exec()exec()都不行,反引号echo也不行,于是就得通过其他方法绕过,有个文件包含函数,尝试使用一下:c=include$_GET[“1”]?>&1=/var/log/nginx/access.log,由于是nginx服务器:可以考虑一下使用日志包含:将日志文件请求抓包后,修改ua头,改为命令:获得flag:也可以使用伪协议读取flag.php:获得php文件的base64编码:在解码就可以:得到flag:
    3. 知识点:php中不需要使用括号的函数:
1. includerequire
这两个函数用于包含和执行指定的文件。它们可以在没有括号的情况下使用:
include 'file.php'; // 可以不使用括号
require 'file.php'; // 可以不使用括号
2. echoprint
这两个语言结构用于输出内容。它们可以在没有括号的情况下使用:
echo 'Hello, World!'; // 可以不使用括号
print 'Hello, World!'; // 可以不使用括号
3. issetempty
这两个函数用于检查变量的状态。它们也可以在没有括号的情况下使用:
if isset($var) { // 可以不使用括号// 代码
}
if empty($var) { // 可以不使用括号// 代码
}
4. list
list 结构用于将数组中的值赋给变量。它可以在没有括号的情况下使用:
list($a, $b) = array(1, 2); // 需要括号,但可以在赋值时不使用
5. exitdie
这两个函数用于终止脚本的执行。它们可以在没有括号的情况下使用:
exit; // 可以不使用括号
die; // 可以不使用括号
4. 关于php中的分号有这样一个特殊情况:最后一个?>之前可以不用分号
分号
PHP用分号来分隔简单的语句。复合语句用大括号来标记代码块,如条件测试或循环,在大括号后面不要用分号。和其他语言不一样的是,在PHP中右括号(?>)前的分号不是必选的。

/


http://www.ppmy.cn/news/1568663.html

相关文章

【python】python油田数据分析与可视化(源码+数据集)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。 【python】python油田数据分析与可视化&#xff08…

学术总结Ai Agent中firecrawl(大模型爬虫平台)的超简单的docker安装方式教程

之前开源了学术总结ai agent,但是对非计算机专业来说,门槛有点高,再加上docker hub镜像被屏蔽,更是不容易上手啊。也有考虑用dify或者扣子去复刻一个,但是从专业用户的角度出发通过界面来拖拽配置实在是不高效&#xf…

ZZNUOJ(C/C++)基础练习1041——1050(详解版)

1041 : 数列求和2 题目描述 输入一个整数n&#xff0c;输出数列1-1/31/5-……前n项的和。 输入 输入只有一个整数n。 输出 结果保留2为小数,单独占一行。 样例输入 3 样例输出 0.87注意sum 1相当于sumsum1 注意sum * 1相当于sumsum*1 C语言版 #include<stdio.h> // 包含…

OpenCV:特征检测总结

目录 一、什么是特征检测&#xff1f; 二、OpenCV 中的常见特征检测方法 1. Harris 角点检测 2. Shi-Tomasi 角点检测 3. Canny 边缘检测 4. SIFT&#xff08;尺度不变特征变换&#xff09; 5. ORB 三、特征检测的应用场景 1. 图像匹配 2. 运动检测 3. 自动驾驶 4.…

从零开始构建一个JAVA项目

本篇文章将从结构框架入手&#xff0c;系统介绍一个完整Java程序的结构步骤&#xff0c;不涉及JAVA基础代码学习。 在本文章中先简单介绍Maven、Spring、MyBatis三种Java类型。 一、分类介绍 首先我们先来了解Java程序的类型&#xff0c;不同类型结构略有区别。Java程序的类型…

arkui-x 页面封装为自定义组件,巧用controller

鸿蒙开发中&#xff0c;有时会需要将某些页面封装为自定义组件&#xff0c;方便复用。 页面的入口为&#xff1a; Entry Componentstruct XXX { 。。。。。。 自定义组件的入口为&#xff1a; Component export struct XXXX { 。。。。。。 但是页面与自定义组件在生命周期…

Python-基于PyQt5,pdf2docx,pathlib的PDF转Word工具

前言:日常生活中,我们常常会跟WPS Office打交道。作表格,写报告,写PPT......可以说,我们的生活已经离不开WPS Office了。与此同时,我们在这个过程中也会遇到各种各样的技术阻碍,例如部分软件的PDF转Word需要收取额外费用等。那么,可不可以自己开发一个小工具来实现PDF转…

Python NumPy(6):修改数组形状、翻转数组、修改数组维度

1 修改数组形状 函数描述reshape不改变数据的条件下修改形状flat数组元素迭代器flatten返回一份数组拷贝&#xff0c;对拷贝所做的修改不会影响原始数组ravel返回展开数组 1.1 numpy.reshape numpy.reshape 函数可以在不改变数据的条件下修改形状&#xff0c;格式如下&#x…