haneuma.log

半分くらい忘備録でできてる

ksnctf #25 Reserved

ksnctf - 25 Reserved

最近全く手をつけていなかったので、ctf4b参加記事を書いたついでに解きました。

ときかた

問題文はこれ

length q chr uc and print chr ord uc qw q flock q and print chr oct ord q or no and print chr ord uc q each ne and print chr ord uc qw q gt q and print chr oct hex ord uc q my m and print chr ord uc q each ne and print chr ord qw q sin q and print chr oct ord uc q each le and print chr length q q splice srand getservbyname setnetent ne reset endprotoent foreach scalar rewinddir cos setnetent not else getprotobyname q and print chr ord qw q ge q and print chr ord uc q eval le and print chr ord uc qw q sin q and print chr ord uc qw q no q and print chr ord qw q use q and print chr ord q mkdir m and print chr ord q each le and print chr ord q pop and print chr oct ord q open no and print chr ord q eval le and print chr ord q eval le and print chr oct hex ord uc q gt log and print chr ord q q eq and print chr ord q q eq and print chr ord q q q and print chr ord qq q q and print chr ord uc q lt eval and print chr ord q chr lc and print chr ord q map m and print chr ord qw q ne q and print chr ord q mkdir m and print chr ord q q q and print chr ord q my alarm and print chr ord q pop and print chr ord qw q uc q and print chr oct oct ord uc qw q bind q and print chr ord q q eq and print chr ord q split s and print chr ord q open do and print chr ord q ge log and print chr ord qw q not q and print chr ord q oct no and print chr ord q xor x and print chr ord qw q die q and print chr ord q ne sin and print chr oct oct ord uc qw q fork q

暗号文にしてはlengthやprint等の普通に読める語が入ってるし、これは一体何なんだ…と思って放置していた問題でした。

とりあえず読めそうな語を見ていき、3分の1辺りにgetservbynameという語を発見しました。何かのプログラミング言語の関数っぽい語だと思って検索すると、getservbyname()はPHPの関数であることが判明しました。
ただ、PHPにしては文法おかしいしやっぱりよくわからないので、冒頭のlength q chrで検索するとこの問題文がPerlソースコードであることが判明しました。

Perlの世界には"Just another Perl hacker"という文字列を変わった書き方で出力させる遊びがあるらしく、その書き方の1つに予約語だけを用いるものがあるそうです。また、ppencodeで任意のテキストを予約語だけで出力させるソースコードが生成できるようです。問題文はここで生成されたソースコードっぽい。

ということで、問題文のソースコードを実行するとFLAGを得られました。