Saint-Etienne will take on record 12-time winners Paris Saint-Germain in the final at the Stade de France on April 25. Saint-Etienne won the last of their six French Cup titles in 1977.
Mbaye Niang blasted home from the spot to give Rennes, who beat PSG on penalties in last year’s final, the lead on 33 minutes at the Stade Geoffroy-Guichard.
Timothee Kolodziejczak headed in an equaliser from a Lois Diony cross as Saint-Etienne hit back moments before half-time.
Saint-Etienne are languishing two points above the relegation zone in Ligue 1, but the hosts upped the pressure in the closing stages and substitute Boudebouz drilled in from the edge of the area to earn Claude Puel’s side a last-gasp victory.
Kylian Mbappe scored a hat-trick as PSG won 5-1 at 10-man Lyon in the first semi-final on Wednesday.
Neymar scored from the penalty spot after Fernando Marcal was sent off in the 64th minute while Pablo Sarabia grabbed the other goal, as PSG bounced back after falling behind to an early strike from Martin Terrier.