Darren Bent claimed Charlton's winning goal in the 83rd minute
Second-half goals from Bryan Hughes and Darren Bent saw injury-stricken Charlton come from behind to end Portsmouth's amazing revival run.
Portsmouth's Andres D'Alessandro opened the scoring, unleashing a curler from outside the box just before the break.
Despite losing three players through injury, Charlton battled back with Hughes drilling home the equaliser 76 minutes in.
Bent then blasted in the winner as the home side held on for a gritty victory.
Portsmouth oozed confidence as they arrived at The Valley fresh from escaping the relegation zone for the first time since November with Saturday's win over Middlesbrough.
And Harry Redknapp's men wasted no time stamping their authority in a scrappy encounter with a weary-looking Charlton.
Gary O'Neil came close with a long-range effort and Benjani Mwaruwari failed to connect with D'Alessandro's teasing pass across the face of the Charlton goal.
At the other end, Charlton struggled to keep their players on the pitch, let alone get a decent chance on goal.
Already missing their first-choice right-back Luke Young, Charlton lost Jonathan Spector 37 minutes in with a shoulder injury after a nasty clash with Benjani, while striker Marcus Bent had limped off more than 10 minutes earlier.
After Richard Hughes' shot was cleared off the line by Addicks defender Hermann Hreidarsson, Pompey finally got the deserved lead through D'Alessandro's wonder goal.
The Argentine toyed with the Charlton defence down the right side before cutting inside Chris Powell and curling his left-footed shot from outside the box into the top left-hand corner.
Booed as they left the pitch at half-time, Alan Curbishley's men returned after the break with more bad news as Jerome Thomas was ruled out through a knee injury and Spector's replacement, Osei Sankofa, sported a gash on his leg.
Benjani failed to break his duck six minutes after the break after good work down the right by Svetoslav Todorov and D'Alessandro came close to doubling his tally as he shot over the bar.
But, against the run of play, the home side levelled with 14 minutes to go as Darren Ambrose slid a pass through to Bent in the box and the England striker crossed for Hughes to apply the simple finish.
Bent then piled on the misery and uncertainty for Portsmouth by latching on to Hreidarsson's flick-on and driving his shot past Kiely to give Charlton the lead.
Both sides turned up the tempo with Benjani unlucky not to snatch a point, but Charlton clung on to claim their first win in five games, while Portsmouth remain haunted by the threat of relegation.
Charlton boss Alan Curbishley:
"In the first half, they (Portsmouth) were the dominant side but they took their foot off the pedal a little bit and we got going.
"We changed the shape and got on top and scored two great goals.
"I can't fathom out what happened in the first half and they'll be sitting on the bus going home thinking what happened in the second half."
Portmouth boss Harry Redknapp:
"We deserved to win. There was no doubt about that, we were by far the better team but it didn't happen so we've got to go again.
"We're playing great at the moment and we're right in there to pick ourselves up and be ready for next Saturday.
"It's still with us and we're playing well. I can't fault the effort."
Charlton: Myhre, Spector (Sankofa 38), Sorondo, Hreidarsson, Powell, Kishishev, Holland, Hughes, Thomas (Ambrose 45), Marcus Bent (Bothroyd 25), Darren Bent.
Subs Not Used: Andersen, Euell.
Booked: Darren Bent.
Goals: Hughes 76, Darren Bent 83.
Portsmouth: Kiely, Priske, Primus, Pamarot, Taylor, O'Neil, Davis, Hughes (Routledge 84), D'Alessandro, Todorov (Karadas 78), Mwaruwari.
Subs Not Used: Ashdown, Koroman.
Goals: D'Alessandro 40.
Ref: H Webb (S Yorkshire).