Bangladesh will now face defending champions India in the final in Dubai on Friday, with an opportunity to win the continental title for the first time
Mushfiqur Rahim scored a fighting 99 to guide Bangladesh into the Asia Cup final with a convincing 37-run win over Pakistan in Abu Dhabi on Wednesday.
The former skipper missed out a deserving century but still lifted Bangladesh from a precarious 12-3 to 239 all out in 49.5 overs before they kept Pakistan down to 202-9 in 50 overs at Sheikh Zayed Stadium.
Mashrafe Mortaza's team will now face defending champions India in the final in Dubai on Friday, with an opportunity to win the continental title for the first time.
Bangladesh's victory will upset millions of fans around the world who wanted another Indo-Pak clash as the two matches in the first and second round failed to live up to their billing, with India winning both in one-sided affairs.
But Bangladesh were worthy winners on Wednesday.
Bangladesh bowled with discipline with left-arm pacer Mustafizur Rahman leading the pack with 4-43 as Pakistan yet again batted poorly with only opener Imam-ul-Haq fighting hard through a laborious 105-ball 82.
Imam, who hit two fours and a six, held the innings together and added 67 for the fourth wicket with Shoaib Malik (30) and another 71 for the seventh wicket with Asif Ali (31).
However, both Imam and Asif fell in successive overs to give Bangladesh only their fifth win over Pakistan in 36 one-day internationals.
Pakistan got off to a disastrous start when opener Fakhar Zaman holed out off the fifth delivery of the first over, caught off spinner Mehidy Hasan.
Left-armer Mustafizur then removed Babar Azam (one) and captain Sarfraz Ahmed (10) to leave Pakistan in tatters at 18-3 before Malik and Imam brought some solidity in the chase.
Mortaza praised an all our effort, despite missing star all-rounder Shakib Al Hasan through injury.
"The bowlers did a good job, especially when we didn't get the runs," said Mashrafe.
"But Mushi and Mithun batted really well and got us to a fighting total."
"We are proud of our fielding today. For a long time we haven't seen this quality of fielding in our team, so hopefully the boys can understand the value of good fielding."
Sarfraz was upset with team's showing in the six-team tournament.
"It's not a good feeling," said Sarfraz. "As a captain, I didn't do well. We didn't field well, our batting collapsed and as a team we didn't do well in any department.
"It seems the team which won the Champions Trophy last year didn't come here at all."
It was Rahim who built Bangladesh's innings after it also got off to the worst possible start.
Rahim faced 116 balls and added an invaluable 144 for the fourth wicket with Mithun (60) to help Bangladesh recover from a shaky 12-3 after they won the toss and and opted to bat.
Left-arm paceman Junaid Khan, who replaced Mohammad Amir, had jolted Bangladesh at the start, dismissing Liton Das (six), Soumya Sarkar (0) and Mominul Haque (five).
Junaid finished with 4-19 in his nine incisive overs.
Rahim hit nine boundaries before he was caught behind with just one needed for a second hundred in the tournament, following his 144 against Sri Lanka in the first round.
It was sheer bad luck that he fell in the 42nd over, caught behind off paceman Shaheen Shah who finished with 2-47. Rahim became the first Bangladeshi batsman to be dismissed for 99 in one-day cricket.
Mithun, who added 134 with Rahim against Sri Lanka, hit four boundaries in his 84-ball innings.