[AlpacaHack]Writeup for hit-and-miss

最近はかなりボケてきているので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)
	}
}

コメント

タイトルとURLをコピーしました