Premier League: Fulham 1 Cardiff 2
Steven Caulker put Cardiff ahead with his first goal for the club after 11 minutes, before substitute Bryan Ruiz levelled matters on the stroke of half-time.
Just when it looked as though the sides would have to settle for a point, Jordon Mutch expertly curled an effort past a helpless Robbie Stockdale.
Both sides made one change from their last league outing, with Dimitar Berbatov coming in for Damien Duff after scoring against Everton in the League Cup on Tuesday.
Peter Odemwingie made his first Premier League start for the club, following his debut appearance in the 1-0 defeat to Tottenham.
Fulham were dealt an early blow when Scott Parker was forced off through injury, with Giorgos Karagounis taking his place.
And Cardiff were ahead after 11 minutes thanks to Caulker.
The captain and record signing rose above Steven Sidwell to head past Stockdale and edge his side in front.
While the hosts were initially rocked by the goal, Martin Jol's men did enjoy a strong spell of possession during the next 10 minutes but struggled to create any clear-cut chances.
They were almost two down when Ben Turner forced a good save from Stockdale after 26 minutes before hitting the outside of the post with another headed effort just a minute later.
Alexander Kacaniklic was swapped for Ruiz five minutes before the break as Jol looked to invigorate his ineffective forward line.
It paid dividends soon after, with Ruiz levelling for Fulham with his first goal of the season.
The Costa Rican curled home a sumptuous effort from outside the area on the stroke of half-time past David Marshall.
Fulham began the second half well but it was Cardiff who created the first chance, with Fraizer Campbell poking over the bar following a Mutch through-ball.
The home side continued to press but were unable to break down Cardiff's resolute defence before Malky Mackay's men struck in injury time.
Mutch opened his account for the club, curling past Stockdale at the death to extend Fulham's winless run in the league to five.