The home team had taken an early lead thanks to Dimitar Berbatov’s sixth goal of the season and looked set to hang on for the victory.
However, former Saint Chris Baird handled in the box five minutes from time and Lambert converted to pull his team a point clear of the relegation zone.
Fulham made the better start and could have gone ahead in the third minute through Steve Sidwell’s right-footed shot that whistled narrowly wide from 20 yards out.
It didn’t matter, though, because they took a deserved lead five minutes later when Ashkan Dejagah fed the overlapping Sascha Riether on the right flank, and his low cross found Berbatov to hook home from close range at the back post.
Fulham pushed on for a second and although had plenty of joy down the left flank through the impressive Alex Kacaniklic, they were unable to truly test Kelvin Davis in the Southampton goal.
The visitors took until the 20th minute to settle down and went close when both Jack Cork and Morgan Schneiderlin tried their luck with shots from the edge of the box.
Berbatov saw a close-range header from a corner blocked by Davis as Fulham reasserted their authority, but they then lost their momentum after the break as Southampton fought their way back into the game.
They went close within three minutes of the restart through a Jason Puncheon left-footer that only narrowly missed the post, before Steven Davis sent a header wide when unmarked 12 yards out.
Lambert then fired a well-struck volley narrowly over, but made amends shortly after as the visitors finally made their breakthrough with time running out – courtesy of a helping hand from an old friend.
A corner from the left connected with the outstretched arm of Baird and although Mark Schwarzer got a glove to Lambert’s spot-kick, it was too well struck to keep out.
Gaston Ramirez then almost snatched all three points for Southampton with a rasping left-foot strike that Schwarzer nearly parried into his own goal.