Arslan Qadir was Pakistan’s hero, scoring his team’s first goal and also netting the winner 90 seconds from the end to silence a partisan 7,000-strong Indian crowd at the Kalinga stadium.
The victory enabled coach Shahnaz Sheikh’s men to avenge the loss to their arch-rivals in the Asian Games final in South Korea in October that denied them a direct entry to the 2016 Olympics.
The final on Sunday will be Pakistan’s first bid for a major world title since losing to the Netherlands in the Champions Trophy final in Lahore in 1998.
Germany quashed Australia’s bid to win a sixth successive title by ousting the world champions 3-2 in Saturday’s first semi-final.
India took an early lead in the 12th minute when Gurjinder Singh converted the team’s first penalty corner with a drag flick.
Pakistan drew level four minutes later as Qadir deflected in a pass from the right soon after Gurbaj Singh was shown the yellow card to reduce India to 10 men.
Muhammad Waqas seized on an opening by Qadir to put Pakistan ahead in the 32nd minute, but India ended the third quarter on level terms at 2-2 when Dharamvir Singh reverse hit a pass from Akashdeep Singh.
A goal from either side in the fourth quarter made it 3-3 with eight minutes remaining and a swift counter-attack from Pakistan saw Qadir push in from close range past Indian goalkeeper Parattu Sreejesh.
As the final hooter sounded, excited Pakistani players hugged each other, took off their shirts and waved them towards disappointed spectators in the stand.
Shahnaz later walked out of the post-match press conference without answering questions after an Indian reporter questioned his players’ behaviour after the game.