长度限制过滤绕过

长度过滤绕过前置知识

相关命令

  1. >>>符号

  2. 命令换行符

  3. ls -t命令

  4. sh命令

  5. dir*rev命令

>>>符号

作用

  1. 通过>创建文件,写入内容
1
2
3
# > a 创建文件
# echo "benben" > a 将benben写入a文件中
# echo "aaaaaa" > a 将aaaaaa写入a文件,覆盖掉a文件中的原内容,
  1. 通过>>来追加内容
1
# echo "benben" >> a 在原来文件后面的内容追加benben 

命令换行符

\换行符

1
2
3
4
c\
\at
flag.php(前面有一个空格)
作用和 cat flag.php一样

ls -t命令

作用

将文件名按照时间顺序排列出来

ls排序按照先符号后数字再字符

sh命令

shell命令语言解释器

作用

  1. 执行交互式命令
    用户可直接在终端输入命令,sh 会逐行读取并执行:

    1
    sh -c "echo Hello, World!"  # 执行单条命令
  2. 运行脚本文件
    若文件包含一系列 Shell 命令(如 a 文件),可通过 sh 解释执行:

    1
    sh a  # 用 sh 解释器执行文件 a 中的命令
  3. 处理标准输入
    可从管道或重定向中读取命令:

    1
    echo "ls -l" | sh  # 通过管道传递命令给 sh

组合使用

关键点:文件名中的反斜杠使得ls -t输出的每行以\结尾,Shell将其视为续行符,从而将所有行合并为一条命令cat flag,实现绕过长度或关键字过滤。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
按照时间顺序反向依次创建文件
加入"\",把命令"ca" "t" "fl" "ag"连接起来
\\前面的\把后面的\实体化变成字符
# >ag
# >fl\\
# >t \\
# >ca\\
# ls -t

创建文件x,并把'ls -t'执行结果写入文件x中
# ls -t>x

执行x中的命令
# . x
# sh x

作用

当对命令长度有限制时,可以将很短的文件名拼接成可执行命令

dir*rev

dir

作用:

基本和ls一样

好处:

  1. 开头字符是d,使得它在alphabetical序中靠前

  2. 按列输出,不换行

*

*等同于$(dir ) ,会将内容中的第一个作为命令,第二个作为参数执行

1
2
# ls  得到echo flag
# *或$(dir *) 得到flag 因为执行了echo函数,输出后面的内容

rev

作用

反转文件每一行内容

1
2
# cat flag 输出 123456
# rev flag 输出 654321

长度过滤绕过

长度为7

长度为4