ログイン
編集不可のページディスカッション情報添付ファイル
"CTF/Writeup/tkbctf4/gradius"の差分

MMA
1と2のリビジョン間の差分
2014-11-03 21:43:52時点のリビジョン1
サイズ: 26
編集者: ytoku
コメント:
2014-11-03 21:53:36時点のリビジョン2
サイズ: 889
編集者: nomeaning
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 2: 行 2:
与えられたファイルを実行すると入力待ちとなり、入力すると数字と'wrong'という文字列が返却された。
いろいろ試していると、数字は先頭からの合っている文字列だろうと推測出来た。
{{{
$ ./gradius
> a
< 0
< wrong

$ ./gradius
> k
< 1
< wrong
}}}
プログラムを書いて先頭から1文字ずつ特定していった。
{{{#!highlight ruby
require 'shellwords'
r, cnt = '', 1
while true
  (1..255).each do |i|
    ret = `echo #{Shellwords.escape(r + i.chr)} | ./gradius`
    unless /wrong/ =~ ret
      puts ret
      exit 0
    end
    if ret.split[0].to_i == cnt
      r += i.chr
      p r
      cnt += 1
    end
  end
end
}}}

{{{
$ ruby solve.rb
"k"
"kk"
"kkj"
"kkjj"
"kkjjh"
"kkjjhl"
"kkjjhlh"
"kkjjhlhl"
"kkjjhlhlb"
FLAG{!!D4GG3R!!}
}}}

gradius (binary 100)

与えられたファイルを実行すると入力待ちとなり、入力すると数字と'wrong'という文字列が返却された。 いろいろ試していると、数字は先頭からの合っている文字列だろうと推測出来た。

$ ./gradius
> a
< 0
< wrong

$ ./gradius
> k
< 1
< wrong

プログラムを書いて先頭から1文字ずつ特定していった。

   1 require 'shellwords'
   2 r, cnt = '', 1
   3 while true
   4   (1..255).each do |i|
   5     ret = `echo #{Shellwords.escape(r + i.chr)} | ./gradius`
   6     unless /wrong/ =~ ret
   7       puts ret
   8       exit 0
   9     end
  10     if ret.split[0].to_i == cnt
  11       r += i.chr
  12       p r
  13       cnt += 1
  14     end
  15   end
  16 end

$ ruby solve.rb
"k"
"kk"
"kkj"
"kkjj"
"kkjjh"
"kkjjhl"
"kkjjhlh"
"kkjjhlhl"
"kkjjhlhlb"
FLAG{!!D4GG3R!!}

CTF/Writeup/tkbctf4/gradius (最終更新日時 2014-11-03 23:45:12 更新者 ytoku)