The rejuvenated Bangladesh bowled out India's formidable line-up for 191 on a good batting pitch -- their lowest one-day total against Bangladesh -- before romping to victory.
Left-handed opener Tamim Iqbal, smashed 51 for his maiden half-century to help Bangladesh reach 192-5 with nine balls to spare.
Fellow left-hander Saqibul Hasan, 19, took over and hit 53 and put on 84 runs with Mushfiqur Rahim (56 not out) for the fourth wicket.
It was Bangladesh's second win over India in 15 meetings.
Bangladesh emulated their famous victory over Pakistan in the 1999 World Cup, underlining their progress after failing to win a single game in South Africa four years ago where India were finalists.
The defeat plunged Indian qualifying hopes into disarray from the toughest group which 1996 champions Sri Lanka are favoured to top.
Rahim ran with arms raised in delight after he hit paceman Munaf Patel past cover to fetch the winning run.
Bangladesh paceman Mashrafe Mortaza claimed four for 38 with excellent support from left-arm spinners Mohammad Rafique and Abdur Razzak, who took three wickets apiece after leaving the batsmen parched for runs in the morning.
Teenager Iqbal showed no stage fright and dashed Indian hopes of pulling things back in the afternoon.
He stepped out to smash both new ball bowlers Ajit Agarkar and Zaheer Khan, whom he hit for 15 runs in one over.
He also hit two sixes off Patel over point and Zaheer over long on until he edged Patel to wicketkeeper Mahendra Dhoni.
Patel also removed Aftab Ahmed (8) but Rahim, dropped by Dhoni on eight off Patel, steadied the innings with Saqibul.
India floundered against pace and spin in the morning,
Mortaza, 23, forced struggling opener Virender Sehwag (2) to chop an in-coming ball on to the stumps and Robin Uthappa (9) to mistime a drive to be caught at point to give Bangladesh the upperhand straightaway.
Spinner Razzak replaced Mortaza and claimed the prized scalp of Sachin Tendulkar (7) after the premier batsman, playing in his fifth World Cup, edged a drive on to his pads to wicketkeeper Rahim.
Opener Saurav Ganguly prevented total batting humiliation in a batting order where three of the top five batsmen each had the experience of over 10,000 one-day runs behind them.
Ganguly made a painstaking 66 and dug in till the 44th over, adding 85 runs with Yuvraj Singh (47) for the fifth wicket.
Bangladesh bowlers then snapped up five wickets for two runs to reduce the innings to 159 for nine before the last wicket pair of Zaheer and Patel put on 32 runs.
The tournament ends with the final in Barbados on April 28.