All of the action came in the second half with Marco Sau putting Cagliari in front in the 62nd minute.
Abdoulay Konko levelled 10 minutes from time before a penalty from Antonio Candreva earned them all three points with goalkeeper Michael Agazzi and Andrea Cossu both sent off for the visitors.
The first half hardly hinted at what was to come in the second 45 minutes with only a few chances, mostly for the home side.
Hernanes' free-kick dipped on to the top of the crossbar in the 16th minute and the Brazilian had another shot which Agazzi saved in the 37th minute.
Cagliari's best chance was missed by Radja Nainggolan in the 18th minute when his first effort was saved and the ball then struck the Cagliari midfielder again before being cleared off the line by Andre Dias.
Miroslav Klose then shot wide of the post after rounding Agazzi for the home side's best chance of the first 45 minutes.
The game came to life shortly after the hour mark when Sau gave Cagliari a shock lead, Stefan Radu having headed against a post at the other end.
The Sardinian forward picked the ball up 20 yards from goal and waited for a gap to open up before firing a shot low past Federico Marchetti into the bottom corner.
Lazio responded as expected with Candreva's volley pushed behind in the 79th minute.
From the corner, Giuseppe Biava headed the ball to the far post, where Konko was on hand to tuck it in and bring the Biancoceleste level.
Four minutes later, Klose was put through and his lob over Agazzi, who clattered into the Germany striker after his shot, landed on the roof of the net.
However, the referee brought play back and awarded a penalty for the clash, showing Agazzi a second yellow card.
Cossu headed down the tunnel straight after his team-mate as he was shown a straight red card for protesting the referee's decision, but there were no complaints from Lazio as Candreva converted from the spot to earn them all three points.