Bangladesh paceman Mustafizur Rahman held his nerves to bowl a final dot ball in the 50th over to give his team a nerve-wracking three-run win over Afghanistan in Abu Dhabi on Sunday.
Needing eight to win off the 50th over, Afghanistan lost Rashid Khan for five off the second ball while Samiullah Shinwari (23 not out) and Gulbadin Naib managed just two leg byes to finish at 246-7.
Bangladesh had made 249-7 on the back of half centuries from Mahmudullah Riyad and Imrul Kayes at the Sheikh Zayed Stadium.
The Bangladesh win meant India sailed into the September 28 final in Dubai while Pakistan and Bangladesh meet in Abu Dhabi on Wednesday to decide the second finalist.
India thumped Pakistan by nine wickets in a one-sided match in Dubai on Sunday.
Afghanistan were helped to their total with a 99-ball 71 by Hashmatullah Shahidi who hit five boundaries while opener Mohammad Shahzad made an 81-ball 53 with eight boundaries.
Skipper Asghar Afghan (39) and Mohammad Nabi (38) made useful contributions but the asking rate climbed to mount pressure in the final over.
Earlier, Riyad scored an 81-ball 74 with two sixes and three boundaries while Kayes -- recalled as a back-up to strengthen the batting -- made an 89 ball 72 not out to help Bangladesh recover from a precarious 5-87.
Opener Liton Das scored 41 and Mushfiqur Rahim made 33 but Bangladesh - who won the toss and batted -- owed their total to a solid 128-run stand for the sixth wicket between Riyad and Kayes.
Kayes gave good support to Riyad as the two built the innings after Bangladesh's star batsman Shakib Al Hasan was run out for nought.
Kayes hit six boundaries as Bangladesh played the dangerous spinning duo of Rashid Khan and Mujeeb Ur Rahman who managed a wicket each.