Pakistani bowlers produced another professional performance to restrict the formidable England batting line-up to 211 after Sarfraz Ahmed opted to bowl on a used surface.
The star with the ball was once again pacer Hasan Ali, who ended up with a three wicket-haul for the third time in as many games.
It seemed Pakistani batsmen were batting on a different pitch during the chase as they cruised to complete the target in 37.1 overs, after openers Azhar Ali (76 off 100) and Fakhar Zaman (57 off 58) provided a perfect start.
The duo shared an 118-runs stand off 127 balls ensuring Pakistan gets home comfortably.
The remarkable result also made a mockery of pre-tournament talk and predictions as the eighth-ranked Pakistan pummeled title favourites England to reach the final at The Oval on Sunday.
Pakistan surprised many by bouncing back brilliantly from their heavy loss against India in the tournament opener to beat South Africa and Sri Lanka en route to the last four.
They have always been an unpredictable side but England, the only undefeated in the league stage, were expected to get past the sub-continent squad with little difficulty.
The same England batsmen, who batted with flair and finesse through the tournament, came a cropper in a high stake semifinal. They found it hard to keep the scoreboard ticking and losing wickets at regular intervals made life tougher for them. Not a single six was hit in their innings.
Pakistan, on the contrary, came out for the chase with a plan.
Ali batted solidly while Zaman attacked from ball one despite being tested with a lot of short balls.
Zaman, playing only his third ODI, went for the big shots and even though he mishit a lot of them, kept on playing in the same vein. The southpaw ended hitting seven fours and a six, that came off a top edge over the wicketkeeper.
Thanks to openers’ first hundred stand of the tournament, the inconsistent Pakistan middler order was not tested much.
Number three Babar Azam played sensibly for his unbeaten 38 off 45 balls and so did Mohammad Hafeez (31 off 21), who hit the winning boundary to spark wild celebrations.
Earlier, Pakistan seamers dished out a superb bowling effort to finish the England innings in 49.5 overs at the Sophia Gardens.
Besides Ali (3/35), the other bowlers who impressed were Junaid Khan (2/42) and debutant Rumman Raees (2/44).
Young spinner Shadab Khan (1/40) scalped one wicket, while Imad Wasim (0/16) and Mohammad Hafeez (0/33) also bowled well.
England rode on useful contributions from top-order batsmen — Joe Root (46), Jonny Bairstow (43) and captain Eoin Morgan (33) — but they kept losing wicket at regular intervals due to sustained pressure created by Pakistan bowlers.
In the end, Ben Stokes, who played an unusual knock of 34 off 64 balls, helped England cross the 200-run mark.
England were dealt an early blow when Hales was sent back by Raees with Babar Azam taking the catch in the sixth over.
Bairstow, who was brought in the playing XI in place of Jason Roy, and Root helped England reach fifty in 9.4 overs.
However, Bairstow top-edged one off Ali and Hafeez took an easy catch at deep square leg, leaving England at 80 for two.
Skipper Morgan then joined Root and the duo batted with purpose to bring up the hundred in 21.4 overs. The 48-run stand for the third wicket was broken by 18-year-old spinner, Shadab Khan, in the 28th over.
Looking to cut the ball, Root nicked it to wicketkeeper Sarfraz, as England were reduced to 128 for three.
Morgan, too, perished in the 32nd over – while looking to belt it down the ground, he ended up giving a simple catch to the keeper.
Seamer Junaid Khan then struck successive blows, dismissing Jos Butler (4) and Moeen Ali (11) in the 35th and 39th over, respectively, as England slumped to 162 for six.
Adil Rashid was back in the hut after a direct hit from substitute Ahmed Shehzad at the non-striker’s end.