Title-holders India, set 339 to win, collapsed after Pakistani fast bowler Mohammad Amir removed the top three batsmen - Rohit Sharma, Shikhar Dhawan and captian Virat Kohli. They were eventually dismissed for 158, with 19.3 overs to spare.
Al Jazeera’s Lee Wellings, reporting from South London, said that only a few people saw this result coming.
"This is absolutely remarkable. Pakistan fans cannot believe the journey their team has taken," he said.
"Pakistan is celebrating their biggest victory against their archrival."
Amir finished with three for 16 in six overs and Hasan Ali, who kick-started Pakistan's revival in their group-win over top-ranked South Africa, ended the match when he had Jasprit Bumrah caught by gleeful captain and wicket-keeper Sarfraz Ahmed.
Left-arm fast bowler Amir, whose career was almost ended on the other side of London's River Thames by a ban and jail term he received for his part in a spot-fixing scam during a 2010 Test against England at Lord's, finished with three for 16.
He dismissed Rohit Sharma (0), India captain Virat Kohli (5) and Shikhar Dhawan (21) in a stunning new-ball spell.
Earlier, Pakistan made 338 for four after losing the toss with opener Fakhar Zaman's 114 his maiden one-day international hundred in just his fourth match at this level.
India had thrashed Pakistan by 124 runs in their tournament opener at Edgbaston on June 4.
|India's top batsmen were dismissed early in the match by Pakistani fast bowlers [Paul Childs/Reuters]|
Source: Al Jazeera and news agencies