The Inverness fans would go as far as to say the Northern Irishman’s goal was a Christmas miracle, given their dominance in the second half.
This was another very lacklustre home performance from Rangers and they looked likely to drop more points at home before Lafferty’s late winner.
Ally McCoist made two changes to the team that had beaten Hibs last weekend with Sasa Papac and Alejandro Bedoya coming in for the ill Dorin Goian and Lee McCulloch dropping down to the bench.
Papac slotted into a very unfamiliar central midfield whilst American Bedoya took up a position behind lone frontman Nikica Jelavic.
However, despite the tinkering by McCoist, the home side were once again devoid of any creativity.
The best Rangers chance of a very dull first half came early on when Gregg Wylde crossed for Steven Whittaker, but his header from 8 yards was brilliantly saved by Ryan Esson in the Inverness goal.
As the half wore on, it was the visitors who looked the more dangerous on the counter attack. Lee Cox sprinted away from Carlos Bocanegra and it was only a vital tackle from Kyle Bartley that prevented Inverness from testing Allan McGregor.
Terry Butcher’s men also had appeals for a penalty waved away by referee Bobby Madden when the ball struck Jelavic’s hand after a flick-on.
At half-time, Mariah Carey’s “All I Want For Christmas is You” was played out. All Rangers fans wanted was an early second half goal.
To try to achieve this McCoist brought on Lee McCulloch for the second half in place of Maurice Edu. The Rangers boss was then forced into another change as Bedoya limped off to be replaced by Kyle Lafferty.
It was Bedoya’s fellow American that finally broke the deadlock latching onto a knockdown from Jelavic to lash the ball home after 55 minutes.
This seemed to reinvigorate the fans and the players too, with Kyle Lafferty missing a gilt-edged chance to double Rangers lead.
Sasa Papac then smacked the crossbar from 30 yards after the ball broke to him, but that was to be the last time for a while the home side were on top.
As Jelavic lay on the ground injured, Inverness went up the park and scored. Richie Foran led the charge as he saw the Croatian getting to his feet slowly. He fed Gregory Tade who gave it to Andrew Shinnie who slotted home, to bag an equaliser against his former side.
Butcher’s men then launched a siege on Ibrox with first Billy McKay rounding McGregor, but he could only hit his shot off the outside of the post. Caley then had a goal wrongly chalked off for offside as Rangers struggled to get out of their own half.
Some great work from Gregory Tade saw him race past the woeful Steven Whittaker, before Johnny Hayes saw his shot cleared off the line by Lee Wallace as Caley missed another glorious opportunity to take the lead.
And Terry Butcher’s side were made to pay for missing those chances as Steve Davis fed his fellow Northern Irishman Lafferty who coolly slotted home on 82 minutes to keep Rangers four points ahead at the top of the league.
Rangers: McGregor, Whittaker, Bartley, Bocanegra, Wallace, Edu (Mcculloch 46), Papac (Bendiksen 78), Davis, Wylde, Bedoya (Lafferty 52), Jelavic.
Inverness: Esson, Tokely,Golobart, Shinnie, Gillet, Cox, Hayes, Tansey (A Shinnie 60), Foran, Tade,Mckay (Sutherland 85)
Referee: Bobby Madden