FEAT:🚩 Daily-AlpacaHack 「Password, Please」Easy
bashの構文ミスによってワイルドカードが受け入れられる事を利用するMisc問題
FEAT:🚩 Daily-AlpacaHack 「Password, Please」Easy
20260802-daily_alpaca-misc-easy-password_please
Summary
本問は,bashの構文ミスによってワイルドカードが受け入れられる事を利用するMisc問題です.
- Category: Misc
- Description: Bashで初めてのパスワードチェッカーを書きました。ログインしてください。
- Tools & TechStack:
- sh
- Release: 2026/08/02
階層構造
1
2
3
4
5
6
7
.
├── chal.sh
├── compose.yaml
├── Dockerfile
└── flag.txt
1 directory, 4 files
ソースコードの調査
chal.sh
1
2
3
4
5
6
7
8
9
10
secret="${RANDOM}${RANDOM}${RANDOM}${RANDOM}"
printf 'Password: '
read -r password
if [[ $secret == $password ]]; then
cat /flag.txt
else
echo 'Access denied'
fi
${RANDOM} は 15bit ($0 \leq RAMDOM \leq 32767$) の範囲であるため,総当たり攻撃に対して脆弱です.
しかし,4つ連結しているため総当たり総数も多く,入力後に接続が切れるため,乱数の予測や総当たりは困難なようです.
そのため,シェルスクリプトの構文をよく調べることにしました.
解法
Bash の [[ ... ]] 内において,== (=) の右辺の変数をダブルクォートで囲まない ("$password") 場合,右辺の値はパターンマッチングとして解釈されます.
そのため,文字列の一致を行うために secret を予測せずとも,password に * を入力するだけで $secret の値が何であっても,常に true になります.
1
2
3
$ ./chal.sh
Password: *
Alpaca{REDACTED}
Post-Mortem & Dead ends
N/A
References
N/A
This post is licensed under CC BY 4.0 by the author.