最近はかなりボケてきているのでAlpacaHackのDaily問題をといています
問題

hit-and-miss - AlpacaHack
🧩Regular Expression🧩
ソースコード
import os, re
FLAG = os.environ.get("FLAG", "Alpaca{REDACTED}")
assert re.fullmatch(r"Alpaca\{\w+\}", FLAG)
while pattern := input("regex> "):
if re.match(pattern, FLAG):
print("Hit!")
else:
print("Miss...")
このように正規表現に一致しなかったらMiss,一致したらHit!が表示されます

解法
フラグはAlpaca{何らかの文字列}であることがわかるので、
1. Alpaca{a を送信 → Miss (aではない)
2. Alpaca{b を送信 → Miss (bではない)
...
3. Alpaca{A を送信 → Hit! (1文字目はAだと判明)
4. Alpaca{Aaを送信 → Miss (Aaではない)
このようにブルートフォースで求めることができます
以下は、Go言語のプログラムです
package main
import (
"fmt"
"io"
"os/exec"
"strings"
)
func main() {
letter := "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_{}"
original := "Alpaca{"
current := original
index := 0
for {
cmd := exec.Command("nc", "IPあどれす", "46849")
stdin, _ := cmd.StdinPipe()
io.WriteString(stdin, current)
stdin.Close()
out, _ := cmd.Output()
if strings.Contains(string(out), "Hit!") {
original = current
if index == len(letter)-1 {
break
}
index = 0
}
index++
current = original + string(letter[index])
fmt.Println(current)
}
}


コメント