Birmingham made it four-straight wins in the Premiership thanks to a superb display by Emile Heskey.
The former England player smashed in the opener, following a neat one-two with strike partner Clinton Morrison.
And, after Sylvain Legwinski had equalised against the run of play for Fulham, Heskey nodded down for Darren Carter to restore the visitors' lead.
Robbie Savage sealed the win with a spectacular second-half volley before Tomasz Radzinski's late consolation.
Fulham opted for an ultra-attacking line-up in their search for festive points, recalling Brian McBride to operate alongside skipper Andy Cole with Radzinski and Collins John in support.
The hosts started the brighter, carving open a good chance for John, who headed tamely at former Fulham keeper Maik Taylor when unmarked at the edge of the penalty area.
Birmingham strikers Morrison and Heskey were also making life uncomfortable for the Fulham rearguard.
And they combined to score the first goal on 25 minutes, Heskey playing a one-two with Morrison and rifling past Edwin van der Sar from 20 yards.
Birmingham started to play some neat one-touch football, but they paid the price for scrappy defending at the other end.
Radzinski cut the ball back to Legwinski who stabbed home completely against the run of play.
The play was suddenly wide open and Radzinski might have scored himself moments later, but his shot was well held.
And the visitors immediately responded when Heskey nodded down a Savage cross for Carter to score.
Cole should have equalised straight after the restart, but his shot from a tight angle was scrambled away.
And the miss proved extra costly when the inspirational Savage latched on to a weak clearance to volley spectacularly home with the outside of his left boot.
Fulham boss Chris Coleman responded by introducing out-of-favour playmaker Steed Malbranque and Elvis Hammond.
That initially made little difference to an attack shackled by Blues talismen Matthew Upson and Kenny Cunningham.
But Hammond and then Cole should both have converted headers in the last five minutes to apply pressure, while Malbranque's deflected shot flashed wide.
Fulham finally scored seconds from the end, when Radzinski turned in a Moritz Volz cross.
But it could not prevent his side slipping into the relegation frame, while assured Birmingham must believe they can chase a European spot in the New Year.
Fulham: Van der Sar, Volz, Knight, Pearce (Rehman 45), Bocanegra, John (Hammond 57), Legwinski, Diop, Radzinski, Cole, McBride (Malbranque 56).
Subs Not Used: Pembridge, Crossley.
Goals: Legwinski 34, Radzinski 90.
Birmingham: Maik Taylor, Tebily, Cunningham, Upson, Melchiot, Johnson, Carter, Savage (Anderton 86), Clapham, Heskey (Gray 75), Morrison (Clemence 82).
Subs Not Used: Martin Taylor, Vaesen.
Goals: Heskey 25, Carter 41, Savage 53.
Ref: M Clattenburg (Co Durham).