写在前面的话
大晚上的吃完自助2点多都没睡意,于是就在床上敲了一下这篇总结了
7长度限制
前置知识
-
输入重导向 > 定向输出到文件,如果文件不存在,就创建文件;
-
“\” linux中可以用\使指令连接下一行,这样就可以写多行命令了。
-
ls -t 按文件最近修改时间( i 节点中的 mtime )而不是按文件名字典序排序,新文件 靠前。
-
文件中前面命令出错,会自动跳过,不影响后面命令的执行。
-
Shell 脚本的执行方式通常有如下三种:
-
bash script-name 或者 sh script-name;
-
path/script-name或者./script-name;
-
sourcescript-name或者. script-name。
推荐用第一种
bash file
sh file
第三种. file
第二种要文件有执行权限故不推荐
Linux 中执行Shell 脚本的方式(三种方法)_linux启动sh脚本命令-CSDN博客
所以思路就是把命令拆分写入几个文件的文件名中,然后利用 ls -t 整合起来放进另一个文件 file ,最后
. file
执行即可比如执行 ls
>s\\ # \\ 转义 \ 防止shell 以为是命令拼接符号 >l\\ ls -t>0
cat 一下 0,可以发现都写进去了
然后
. 0
执行脚本可以发现确实符合第四条 文件中前面命令出错,会自动跳过,不影响后面命令的执行。
可以发现最长的长度就是
ls -t>0
7了上点难度假如要执行
echo Y2F0IC9mbGFn|base64 -d>1
怎么办?(Y2F0IC9mbGFn -> cat /flag)echo Y2F0IC9mbGFn|base64 -d>1
>\>1 # 其实命令最后可以不用加 \\ 命令拼接的 >-d\\ se64\ \\ ba\\ Fn\|\\ mbG\\ IC9\\ Y2F0\\ ho\ \\ ec\\ ls -t>0
cat 0 可以发现命令都集齐了
然后
. 0
执行将exp写入1,最后. 1
执行脚本即可 -
没啥问题,注意 命令里的空格,> ,| ,或者其他特殊字符一定要转义。
5长度限制
前置知识
- ‘>>’ 追加文件内容
- ls 默认字典序升序
主要思路是缩短 ls -t>0
这一步骤的长度,把这条命令拆分到各个文件中去
>l\\
>s\\
>\ \\
>-t\\
>\>0
我们发现以这种格式拆分时,会得到这种排序
我们将 ls 得到的写入 a 文件中,然后再 ls 追加一次
于是乎中间就能拼凑出
l\
s\
\
-t\
>0
第一个 ls 负责提供 \l,\s;第二个 ls 提供,这也幸亏 a 排序是在 >0 和 l\ 之间.
后面的步骤就是做一遍七长度做的事情,ls -t>0 替换成 . a
>s #最后命令不要加 \\ 了,不然会把下面无关的字符拼起来
>l\\
. a
. 0
4长度限制
前置知识
-
输入统配符* ,Linux会把第一个列出的文件名当作命令,剩下的文件名当作参数
-
dir:虽然基本上和 ls 一样,但有两个好处,一是开头字母是d ,这使得它在 alphabetical 序中靠前,二是按列输出,不换行。
-
rev:可以反转文件每一行的内容。
因为是四个字符,所以 ls>>? 肯定是不能用了。
看一下构造:
>dir
>sl
>g\>
>ht-
ls 看一下
可以看到 dir 排在最前面
*>v
>rev
*v>x
*>v 表示 执行 dir 并输出到 v 中
*v>x 很巧妙,这里这里目录下这么多文件,只有 rev 能执行成功(rev v>x)
整理一下,依靠这些我们得到了
>dir
>sl
>g\>
>ht-
*>v
>rev
*v>x
一个包含 ls -th > g
的 x文件。所以到时候一切照旧,最后把 ls -t>0
,. 0
换成
. x
. g
即可