In an incredible game which saw Johnny Kenny open the scoring on 24 minutes with a near-post header from a corner, Thelo Aasgaard then saw red before half-time for what was deemed to be a dangerous challenge on Anthony Ralston.
The Light Blues, to their credit, never gave in and on 81 minutes they got their reward, with James Tavernier’s penalty levelling the score before full time.
It was Celtic, however, that booked their place in the final, with McGregor finding the net three minutes into extra time before substitute Osmand tapped in from close range with 108 minutes on the clock.
Danny Röhl made three changes to his starting eleven following Wednesday night’s 1-0 victory over Hibernian at Easter Road in the Scottish Premiership, with the Rangers head coach including captain Tavernier, Mohamed Diomande and Aasgaard in his team while Max Aarons and Mikey Moore dropped to the bench. Connor Barron was also suspended.
From referee Nick Walsh’s first whistle the Light Blues showed their attacking intent, with main striker Youssef Chermiti supported by Danilo and Aasgaard, with Tavernier also looking to get forward on the right flank while Jayden Meghoma kept a close eye on the lightning-quick Daizen Maeda on the left.
Prior to the ten-minute mark Celtic created the first opportunity of the match - a low cross into the Rangers box finding its way through to the unmarked Sebastian Touneki but he fired a loose shot over Jack Butland’s goal.
At the other end of the pitch, Meghoma did well to get past Anthony Ralston with a dip of the shoulder and a burst of pace. His back post cross was dangerous but Tavernier could only head wide at full stretch from a tight angle.
On 17 minutes the game really burst into life with Maeda darting in behind the Gers backline and bringing out a good save from Butland, who dived low to his right to deny the Japanese winger.
And in the next attack Martin O’Neill’s men thought they had their noses in front.
After Ralston had been fouled, McGregor took a quick free-kick to Benjamin Nygren on the edge of Gers’ 18-yard box. The Swede flicked it on to Maeda who crossed first time, causing Nasser Djiga to boot a clearance off Nico Raskin which sent the ball looping into the net.
With the Celtic fans celebrating wildly, a VAR check showed that Maeda was offside in the build-up and the score stayed at nil-nil.
With the action now swinging from end to end, Chermiti had a guilt-edged opportunity to put Rangers in front but the big striker, from close range, couldn’t divert Diomande’s defence-splitting pass into the net with just Schmeichel to beat.
The miss proved costly, as on 24 minutes Celtic broke the deadlock. A front-post corner kick was whipped in by Arne Engels and Johnny Kenny rose to meet it, with his powerful header giving Butland no chance.
Before half an hour had been played, Rangers could have been back on level terms. Danilo’s intelligent reverse pass found Raskin who had drifted in behind McGregor to get into a goal-scoring position. The Belgian had time to look up and compose himself, but his shot was blocked by Schmeichel after he had darted off his goal-line.
On 37 minutes, Rangers suffered another blow when they were reduced to ten men following Aasgaard’s dismissal. The Norwegian skilfully flicked the ball over a Celtic player but as he attempted to control it on the other side his right foot planted in Ralston’s thigh. Walsh, without hesitation, pulled out his red card.
A dramatic first-half ended with another moment of controversy, with Auston Trusty catching Butland on the side of his head with his boot after the goalkeeper had slid out to get his gloves on the ball. Walsh, this time, only booked the big defender with Rangers fans calling for red.
Djeidi Gassama replaced Danilo for the start of the second half with Rangers needing something special to keep their hopes of reaching the final alive.
A long-range effort from Engels flashed by Butland’s far post but with an hour played just a single goal separated the teams, giving the blue half of Hampden hope as they roared their team on.
On 63 minutes, Butland was again at his best, reacting quickly to get a hand down to Nygren’s header from another dangerous corner-kick delivery.
Celtic, with a man spare, were always a threat pushing forward and four minutes after replacing Tounekti, James Forrest clattered the crossbar with a left-foot drive from a cut-back cross.
On 75 minutes Rangers fans were off their seat when Mikey Moore’s pass sent Gassama clear on goal but just as he was about to pull the trigger Liam Scales produced a terrific last-ditch tackle.
You felt the drama was not over and on 79 minutes Rangers were awarded a penalty after Gassama’s shot hit Ralston’s arm as he attempted a diving block in the box.
As the stadium fell silent in anticipation, Tavernier showed incredible composure to put his spot kick into the side netting from 12 yards, with Schmeichel diving to his right but unable to get near it.
Remarkably, Rangers were now the team driving forward for the winner but they couldn’t switch off for a second.
With just five minutes remaining, Forrest drifted inside and after a clever nutmeg found Callum Osmand in acres of space. The substitute only had Butland to beat but again the towering Englishman was up to the task, making yet another top-drawer stop.
In the second minute of injury time, and with Celtic throwing every player forward, a pull-back cross from Forrest looked to be perfect for Hatate to win it for his side, but the midfielder’s effort from the penalty spot area went high and wide.
Celtic’s second goal arrived three minutes into extra time, McGregor receiving the ball 25 yards out and his shot soared into the roof of the net.
Rangers once again had it all to do but they kept at it, with Gassama again going through on goal and Schmeichel having to produce more heroics to retain his side’s one-goal advantage before the extra time interval.
The killer blow arrived in the 108th minute, with Kieran Tierney’s loss cross being diverted into the net by the lively Osmand from a couple of yards out.
RANGERS: Butland, Djiga (Rothwell 101), Souttar, Cornelius, Tavernier, Diomande (Moore 70), Raskin (Antman 90), Meghoma (Aarons 90+2), Aasgaard, Chermiti (Miovski 70), Danilo (Gassama 45)
SUBS: Kelly, Fernandez, Curtis
GOALS: Tavernier 81 (penalty)
BOOKINGS: Cornelius, Raskin, Souttar
RED CARD: Aasgaard 38
CELTIC: Schmeichel, Scales, Trusty, Nygren (Hatate 70), Tounekti (Forrest 65), Kenny (Osmand 70), Engels, Saracchi (Tierney 77), Maeda, McGregor, Ralston
SUBS: Sinisalo, Balikwisha, Yang, McCowan, Murray
GOALS: Kenny 25, McGregor 93, Osmand 108
BOOKINGS: Trusty, Ralston, Maeda, McGregor, Engels, Osmand