有长度限制的命令执行

前言

昨天看nepctf的梦里花开牡丹亭那题,最后遇到了有长度限制的命令执行,不过这题的命令执行长度限制在小于10个字符,直接构造即可。但是又想到自己之前还没有仔细学过有长度限制的命令执行,于是好好的来学一下。

9长度限制

也就是这道题了,怎么说呢,单纯的就获得flag来说,直接这样就可以了:

n\l /flag

剩下的就还是看接下来更短的命令执行的思路叭。

7长度限制

来源p神密友圈的7字符命令执行:
小密圈里的那些奇技淫巧

理解一下叭。比如这个命令:

echo Y2F0IC9mbGFn|base64 -d>feng

现在有了长度限制,能怎么办呢?思路就是把要执行的命令一点一点的写在文件名上,然后利用ls -t,按照时间对于文件进行排序,ls -t>0,就可以把文件名按照时间顺序排序写进0文件中。p师傅这里用的是w命令然后写进文件,但事实上,前面的w也可以省略:
在这里插入图片描述
文件内容可控又怎么样呢?还需要知道3个东西。

  • linux中可以用\使指令连接下一行,这样就可以写多行命令了。
  • 文件中前面命令出错,会自动跳过,不影响后面命令的执行。
  • 可以用sh,bash,source, .来执行一个脚本。
    在这里插入图片描述

比如这样:
在这里插入图片描述
至于为什么要两个\,是因为要转义,不然的话就会认为是当前的命令会连接下一行了:
在这里插入图片描述
此外,文件名中有空格之类的,同样需要转义。
这样写进0文件中的是这个:
在这里插入图片描述
0命令执行出错,执行下面的:

l\
s\

相当于这样:
在这里插入图片描述
这样的方式需要的最长的命令就是ls -t>0了,需要7个长度。

放一下对开始那个命令的构造:

>eng\\
>\>f\\
>-d\\
>4\ \\
>se6\\
>ba\\
>n\|\\
>GF\\
>9mb\\
>IC\\
>F0\\
>Y2\\
>o\ \\
>ech\\
ls -t>0
. 0

5长度限制命令执行

相比前面的七长度限制,5长度限制更多的就是想办法构造出ls -t>g
这里需要知道这些一个知识点:

>> 是追加内容
> 是覆盖原有内容

此外,ls结果的默认排序是字符串的那种排序,以字母序来排序。

扫描二维码关注公众号,回复: 13124394 查看本文章

因此看看这样:

>l\\
>s\\
>\ \\
>\>0
>-t\\

在这里插入图片描述
可以发现非常有意思的事情,就是ls排在了最后面,-t>0排在了最前面,因此可以利用追加:
在这里插入图片描述
注意中间的这里:

l\
s\
 \
-t\
>0

成功拼接出了ls -t>0
因此接下来再执行这个a文件,就可以执行ls -t>0了。
在这里插入图片描述
因此构造出ls -t>0总的就是这样:

>l\\
>s\\
>\ \\
>\>0
>-t\\
ls>a
ls>>a

接下来就和之前的7长度一眼了,依次把命令写道文件名里面,然后ls -t>0,再执行0文件,就可以实现任意命令执行了。

4长度命令执行

因为ls>>a的长度是5,因此追加也就用不了了。大师傅们想出了一种极其巧妙的构造思路,学习一下。

需要知道这些东西,摘录自yulige师傅的博客:

dir:虽然基本上和 ls 一样,但有两个好处,一是开头字母是d ,这使得它在 alphabetical 序中靠前,二是按列输出,不换行。

  • :相当于$(dir *),所以说如果文件名如果是命令的话就会返回执行的结果,之后的作为参数传入.

rev:可以反转文件每一行的内容。

比如这样:
在这里插入图片描述
就相当于执行$(dir *)
再摘录一下别的师傅的思想:

因为字符限制为4,ls>>?命令不能使用了,可以使用rev命令进行逆序。ls -t>g这个命令逆序也不能实现,因为t在字典序中是比s大。如果是逆序的话,需要一个比s小的字母。在ls中有个参数-h,它与-l一起使用,使输出更加具有可读性。与其他参数一起则没有影响。因此可以构造ls -th>g

看一下构造:

>dir
>sl
>g\>
>ht-

在这里插入图片描述

用dir的好处就在这里了,d可以排在前面,不影响这些。后面的g> ht- sl逆序后正好是ls -th >g。接下来这样:

*>v
>rev
*v>x

在这里插入图片描述
*之前提到了,Linux会把第一个列出的文件名当作命令,剩下的文件名当作参数。就相当于这样:
在这里插入图片描述

*>v就是把g> ht- sl写进文件v中,然后再写一个名字是rev的文件,接下来这个*v>x就非常巧妙了,满足*v的就是rev v,因此就相当于:
rev v>x,把v文件中的内容逆序后写进x中,这样就成功把ls -th >g写进了x,构造构造出了ls -th >g。极其巧妙。
接下来就和之前一样了,还是命令写到文件名中,然后执行x文件即可。

猜你喜欢

转载自blog.csdn.net/rfrder/article/details/115047047