Two goals from Bobby Zamora and a late Carlton Cole strike saw West Ham come from behind to beat 10-man Charlton.
Zamora is mobbed by his team-mates after his first goal
Charlton took a 15th-minute lead through Darren Bent's penalty after a silly handball from Danny Gabbidon.
But Djimi Traore's 26th-minute red card opened the door and Zamora tapped Lee Bowyer's cross in on 52 minutes.
Zamora's second was a scruffy effort on 66 minutes, while substitute Cole made it three in injury time with a smart finish just seconds after coming on.
West Ham totally dominated the early stages against a sluggish Charlton.
Lee Bowyer set Zamora up for a threatening strike inside the opening minute, and Yossi Benayoun should have scored with a close-range header.
The Addicks gradually gained a foothold in the game, with a neat run into the box from Luke Young followed by a couple of shoot-on-sight efforts from debutant Jimmy Floyd Hasselbaink.
The Dutch striker was in the thick of the action when the goal did come, with a looped ball from Bryan Hughes aimed in his direction before the intervention of Gabbidon's arm.
Ignoring passionate appeals from a wide-eyed Hasselbaink, referee Howard Webb consulted his assistant before awarding the penalty.
Bent then stepped up to drive an unstoppable effort in off the post.
Traore's debut for Charlton lasted just 26 minutes
Charlton's hopes of driving home their advantage started to suffer when Traore picked up an unnecessary booking for hacking Bowyer down on the half-way line.
Worse was to follow when - after conceding a foul for a clumsy challenge - the hapless Traore stuck out a foot to stop Bowyer's attempted free-kick and found himself red-carded just 26 minutes into his Charlton debut.
West Ham thought they had equalised within minutes of Traore's dismissal when Harewood bundled the ball over the line, but his effort was disallowed for a push.
The Hammers also felt hard done by when the referee waved away calls for a penalty after Harewood drove the ball against Matt Holland's arm from close range.
But after the break, West Ham finally got the equaliser their play had merited when Bowyer's excellent ball across the box found Zamora totally unmarked at the far post.
With the intelligent passing of Benayoun and Nigel Reo-Coker pulling the strings in midfield, West Ham were making the most of their extra man and pushing Charlton deeper and deeper.
Zamora's winner had a touch of the football blooper DVD about it, but proved enough to win the three points.
He mishit Bowyer's deflected cross weakly into the ground only to see the ball bounce over Carson, off the post and over the line as covering defender Hermann Hreidarsson missed his attempted goalline clearance.
Bowyer hit the post after a glorious passing move, while Teddy Sheringham became - at 40 years and 93 days - the oldest outfield player in Premiership history.
Bent had the ball in the net for a second time, but his goal was ruled out for a foul on goalkeeper Roy Carroll.
And there was just enough time for Cole - on his competitive West Ham debut - to fire home West Ham's third after Sorondo had played him onside in injury-time.
West Ham boss Alan Pardew on Lee Bowyer's excellent display:
"He had three assists and hit the post with a fantastic effort.
"He was an England international on that performance and I think he needed that for the fans. He proved he's going to be a major asset for us."
Charlton boss Iain Dowie:
"The sending-off was a stupid challenge after he'd already been booked but the first booking was wrong.
"But when the ball bounces and someone stops it with his hand, is that not stopping a goalscoring opportunity?
"Are we disappointed with the result? Absolutely. Are we disappointed with the performance? No."
West Ham: Carroll, Mears (Paintsil 45), Ferdinand, Gabbidon, Konchesky, Bowyer, Mullins, Reo-Coker, Benayoun, Zamora (Sheringham 82), Harewood (Cole 90).
Subs Not Used: Walker, Collins.
Booked: Harewood, Konchesky.
Goals: Zamora 52, 66, Cole 90.
Charlton: Carson, Young, El Karkouri, Hreidarsson, Traore, Ambrose (Sorondo 29), Holland, Faye, Hughes (Reid 71), Hasselbaink (Marcus Bent 64), Darren Bent.
Subs Not Used: Myhre, Rommedahl.
Sent Off: Traore (26).
Booked: Traore, Young.
Goals: Darren Bent 15 pen.
Ref: H Webb (S Yorkshire).