Substitute Claus Jensen scored one goal and made the other as Fulham moved into the top half of the Premiership thanks to a much-improved second-half display.
Substitute Jensen is congratulated after his goal
A Dennis Rommedahl-inspired Charlton dominated the first half and Andy Reid and Jimmy Floyd Hasselbaink went close.
But Fulham upped the pace after the interval and Brian McBride blasted them ahead with a sweet 20-yard half-volley.
Former Charlton midfielder Jensen raced through to make it 2-0 and Fulham held on despite Darren Bent's neat finish.
The home side were good value for the win given their second-half performance but bottom-of-the-table Charlton could have been out of sight by the turnaround.
The Addicks had lost six of their seven Premiership matches heading into this London derby, but were by far the better side in the first period.
Rommedahl was the Addicks main threat and gave Fulham left-back Franck Queudrue a torrid first 45 minutes.
The Danish winger jinked his way past his marker on numerous occasions but Charlton failed to capitalise.
After 29 minutes Rommedahl teased the home defence and pulled the ball back for Hasselbaink but his low shot lacked direction and was comfortably saved by Antti Niemi.
Rommedahl then crossed to Bent but the England man lacked conviction and his header drifted harmlessly wide.
But the best chance saw Rommedahl ease past Queudrue and cross to Reid.
The former Tottenham winger let the ball run across him before unleashing a powerful low shot from 20 yards that beat Niemi but flew inches wide.
Rommedahl also blazed a shot wide after an exquisite driven crossfield pass from Bent and saw another effort smash into Hasselbaink after a typically direct run.
Fulham boss Chris Coleman opted for the aerial presence of Heidur Helguson and McBride in attack but they were starved of possession and only had one sniff of goal each before the break.
Helguson headed over from 15 yards after a fine McBride cross and the American flashed a shot wide at the near post from a well-worked corner.
But Fulham were a different proposition after the break.
Brian McBride celebrates after volleying Fulham's opener
McBride did well to stretch out and volley a Tomasz Radzinski cross towards goal but Scott Carson saved with ease.
The American striker then wasted a great headed chance but he made amends on 65 minutes blasting a superb 20-yard half-volley past Carson following a Jensen free-kick.
Radzinski nearly made it 2-0 with a stunning half-volley and within three minutes of McBride's goal Fulham did add a second through Jensen.
The injury-plagued former Valley favourite raced onto Liam Rosenior's pass and showed great composure to beat Carson with a quality finish high into the roof of the net.
At the other end Reid drifted onto a superb Bryan Hughes cross and should have scored but sent his glancing header wide.
With a home win looking a certainty Charlton rallied and Bent stabbed the ball home after substitute Jerome Thomas caused havoc in the Cottagers' box.
Hermann Hreidarsson almost headed his side level late on but Fulham held on.
Fulham manager Chris Coleman on goalscorers Brian McBride and Claus Jensen:
"Brian is an absolute dream. His attitude is fantastic.
"He is not quick but he is strong in the air, knows the game and can hold the ball up. I'm delighted he has started to score goals for us this season.
"Claus has come on and scored a fantastic goal to win a game and he has worked hard for that on the training ground.
"Since we have had him we have not had a run of 10 or 15 games for him to come in and get his fitness but for someone with his talent he has more than enough ability to play in the Premiership and that will give him confidence."
Charlton manager Iain Dowie:
"We've have some difficult times and now we need to look for the positives.
"We have to make sure everyone sticks together and stands up to be counted.
"We are in a dark time at the moment and we have to swing hard towards the light."
Fulham: Niemi, Rosenior, Pearce, Knight, Queudrue, Routledge (Volz 79), Diop (Bocanegra 81), Brown, Radzinski, McBride, Helguson (Claus Jensen 58).
Subs Not Used: Lastuvka, John.
Goals: McBride 65, Claus Jensen 67.
Charlton: Carson, Young, El Karkouri, Diawara (Holland 79), Hreidarsson, Reid, Faye, Hughes (Marcus Bent 72), Rommedahl, Hasselbaink (Thomas 72), Darren Bent.
Subs Not Used: Myhre, Fortune.
Booked: El Karkouri, Young, Reid.
Goals: Darren Bent 78.
Ref: R Styles (Hampshire).