echo被禁用写入webshell[记一次有意思的出题记录]
最近在给社团的同学们出RCE部分的题,我就在想能不能出的有意思点,于是有了这道题目:
R C E to RCE
第一次出这种类型的题,借用了CTFSHOW的过滤
正如我之前在线下分享的时候说过的一句话,做CTF题有时候需要有题目理解能力,很多时候从题目的名称都能窥探到这个题目的大概方向。为了这句话,我想了一段时间,题目究竟叫什么比较好。最后定了这个题目名称。零散的RCE最后拼接成了RCE这个单词。就如同这个题目一样,零散的三个片段并不能做什么,然而当三者聚合在一起,却可以RCE(命令执行)。
0x00 出题背景
其实这个题目也是那天跟大佬们学习的一种方法,在我们本次的环境当中,我无法使用原payload中的<>
代替空格,于是以为本题无解。然而平台上却有人做出了这道题。后来得知,使用了<
来代替空格。经过试验,确实如此。我又想尝试>
这个是否也可以代替空格。于是输入payload ls>-al
却并没有代替空格,反而生成了一个文件-al
。猛然想起这是Linux的重定向符
,他会将结果输入到指定的文件。就这样,有了这道题。
同时,在社团下课的时候,大家绕过这道题的时候,有同学曾产生过一个疑问,为什么我ls
以后会出现例如 f???.???的文件,怎么写进去的呢?或许跟重定向有关。
0x01 解题
首先ls查看目录:
会发现这个ls很奇怪,怪就怪在多了个A。
此时,如果你不查看网页源代码,将错过预期解
查看网页源代码:
会发现其中居然有一个webshell。
实际上这个webshell是这么组成的:
会发现我往目录里写了两个文件,现在是否豁然开朗了?
直接输入:
ls>f.php
即可
之后到f.php代码执行:
右键查看源代码即可。
需要注意两个问题:
1.不能重定向到数字开头的,如:1.php 因为会被过滤
2.不能重定向到大写字母开头的,如:F.php 此时F.php会进入webshell,导致错误:
3.不能写在e之前的字母,如 a.php
仍然会导致错误
所以本题的限制条件比较多,写马的时候应该注意ls重定向问题。
题目比较简单,实际环境或许是echo被禁用是否可以写入一个webshell的问题