Writeup 2026_0826

Día Nacional de la Alpaca - AlpacaHack
日本語訳したら下の方にアルパカの話がされてるのでスペイン語に戻した抜き出す。

Password, Please - AlpacaHack

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

乱数で作られるsecretとpasswordを比較して一緒だったらflagが見れる。
""で囲まれてないとパターンとして比較がされちゃうからワイルドカードが使える。

Happy Birthday - AlpacaHack

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from hashlib import sha256
from os import getenv

FLAG = getenv("FLAG", "Alpaca{REDACTED}")


def H(m):
return sha256(m).digest()[:5]


a = bytes.fromhex(input("user hex > "))
b = bytes.fromhex(input("admin hex > "))

ok = (
a != b
and a.startswith(b"user=")
and b.startswith(b"admin=")
and H(a) == H(b)
)

print(FLAG if ok else "nope")

user=,admin=で始まっててハッシュ値のhexの先頭5バイトが一致してたらフラグがわかる。
256 ^ 5 = 2 ^ 40 = 1000 ^ 4で約1兆くらいなので、あらかじめuser=から始まるハッシュ値をたくさん生成しておき、admin=から始まるハッシュ値をたくさん生成すれば、どこかでぶつかるだろうという推測ができます。
誕生日のパラドックスの応用で、ハッシュ関数で生成される値が偶然衝突するような確率が高いことを利用するもの。

Author

kiku

Posted on

2026-08-26

Updated on

2026-08-26

Licensed under