Sri Lanka produced an excellent batting performance to chase down 322 for the loss of just three wickets, to defeat India at The Oval.
After being outplayed in their opening game, everybody was expecting Sri Lanka to bow down to the mighty Indians, but their batsmen all stepped up to leave all four teams in Group B on two points with one game each remaining.
India face a do-or-die game against South Africa on Sunday, while the Sri Lankans will do battle against Pakistan in what have realistically turned into a pair of quarter-finals.
Angelo Mathews steered his side to victory with an unbeaten 52 from 45 deliveries as the Champions Trophy came to life in London.
Indians post 321 despite Kohli duck
Such has been their way over the past two years, India's openers got off to a circumspect start during the first power-play, with Rohit Sharma and Shikhar Dhawan both seeing off the new ball.
The pair both made half-centuries in the opening victory over Pakistan, and they each did so once again at The Oval, with Sharma first to fall in the 25th over for a run-a-ball 78 which included six fours and three glorious maximums.
Indian skipper Virat Kohli then came and went for a five-ball duck, and after Yuvraj Singh was bowled for just seven by Asela Gunaratne, India's strong start was slowed and they found themselves 179-3 with 16 overs remaining.
The left-handed Dhawan remain unmoved at the other end though, and he went through to an excellent century from 112 balls to register his third three-figure score in the history of the Champions Trophy in just seven innings. The Sunrisers Hyderabad opener eventually fell for 125, but had created the perfect platform for his middle-order to fire India past 300.
That is precisely what they did, with the 35-year-old MS Dhoni doing most of the heavy lifting, smashing nine boundaries in his 52-ball 63, with Hardik Pandya (nine) and Kedar Jadhav (25*) chipping in with some big hits as India finished their innings on 321-6.
Captain Mathews hits unbeaten half-century to lead Sri Lanka home to famous win
Setting off in pursuit of 322, Sri Lanka made the worst possible start, losing big-hitting batsman Niroshan Dickwella for just seven in the fifth over to the bowling of Bhuvneshwar Kumar.
That brought Kusal Mendis to the crease, and alongside Danushka Gunathilaka, they shared in a game-defining 159-run partnership which set the Sri Lankans up for the huge chase.
A mix-up between the two saw Gunathilaka run out for 76, with Mendis following in similar circumstances five overs later for a team-high 89, but that failed to slow the chase.
Kusal Perera continued the form which he showed in the opening loss, cracking 47 before he had to retire hurt following a hamstring complaint which left skipper Angelo Mathews and Asela Gunaratne to take Sri Lanka home.
Mathews stroked six boundaries in his 45-ball 52, with the designated finisher Gunaratne playing an array of stunning shots in his quickfire 32 from 21 balls against an underwhelming Indian attack who never really put the opposition under pressure.
The final two fixtures in Group B will now dictate who moves onto the semi-final stage with India and South Africa having let slip their positions of dominance following the opening games.