Ryssland och Kroatien tog sig båda vidare till kvartsfinal i VM efter att ha vunnit sina åttondelsfinaler efter straffsparksläggning - och inte heller kvällens kvartsfinal skulle avgöras under ordinarie tid eller förlängning.
Kroatien hade det mesta av spelet under inledningen av matchen, men det var Ryssland som skulle ta ledningen genom ett kanonskott av Denis Tjerysjev efter en dryg halvtimmes spel.
Kroatien skulle dock svara bara åtta minuter senare, när Andrej Kramaric nickade in kvitteringen.
Andra halvleken var jämn, men det var Kroatien som var närmast ett segermål när Ivan Perisic träffade insidan av stolpen i den 60:e minuten.
Matchen gick till förlängning, där Kroatien skulle ta ledningen efter elva minuters spel när Domagoj Vida slog till och knoppade in en hörna till 2-1.
Kroatien såg ut att gå mot avancemang - men med fem minuter kvar av förlängningen nickade Mario Fernandes in 2-2 och tog matchen till straffar.
Straffläggning:
MISS, Smolov, 0-0, Ryssland
MÅL, Brozovic, 0-1, Kroatien
MÅL, Dzagojev, 1-1, Ryssland
MISS, Kovacic, 1-1, Kroatien
MISS, Fernandes, 1-1, Ryssland
MÅL, Modric, 1-2, Modric
MÅL, Ignasjevitj, 2-2, Ryssland
MÅL, Vida, 2-3, Kroatien
MÅL, Kuzjajev, 3-3, Ryssland
MÅL, Rakitic, 3-4, Kroatien
Stor hjälte för Kroatien blev Ivan Rakitic, som slog in den avgörande straffen. Kroatien tar sig till därmed semifinal i VM för andra gången i historien. Det tidigare tillfället var 1998 i Frankrike - då blev det till slut brons.
- Ett nytt drama för oss. Vi spelade inte bra i första halvleken, vi kontrollerade inte matchen som vi ville. Från starten av andra halvlek spelade vi mycket bättre, men tyvärr kunde vi inte avgöra matchen. Vi visade karaktär igen. Vi är i semifinal, vi kommer att njuta av den matchen, säger Kroatiens Luka Modric efter matchen enligt Fifa.
I semifinalen ställs Kroatien mot England, en match som spelas i Moskva på onsdag 11 juli. På den andra halvan av slutspelsträdet möts Frankrike och Belgien.
- Vi har tillräckligt med tid för att vila och förbereda oss bra, säger Modric.
Finalen spelas söndag 15 juli.
Startelvor:
Kroatien: Subasic - Vrsaljko, Lovren, Vida, Strinic - Rakitic, Modric - Rebic, Kramaric, Perisic - Mandzukic.
Ryssland: Akinfejev - Fernandes, Kutepov, Ignasjevitj, Kudrjasjov - Zobnin, Kuzjajev - Samedov, Golovin, Tjerysjev - Dziuba.