Shaun Bartlett's second half goal was enough to give Charlton their first win at Anfield in more than half a century.
Liverpool started brightly and Jon Fortune had to be alert to prevent Emile Heskey getting on the end of Steven Gerrard's dangerous free kick after just four minutes.
Dean Kiely was called into action a minute later with Harry Kewell and Heskey combining to set up Michael Owen on the edge of the box, but his left-footed shot never had the power to trouble Kiely.
Owen missed a good chance on nine minutes when he got away from his markers to Gerrard's free kick, but he did not get enough on his header and it flew wide of the target.
Charlton were struggling to make any impact on the game, but they came close to breaking the deadlock on 26 minutes when Jonatan Johansson hit a half volley from wide on the left which Jerzy Dudek was at full stretch to tip over.
Most of Liverpool's attacks were coming down the left and John Arne Riise sent over a cross on the half hour which Heskey at full stretch could only head over the crossbar.
The same pair combined again four minutes later with Riise sending over an inviting cross which Heskey flashed just wide of the post.
Charlton were coming more and more into the game and Claus Jensen and Matt Holland both had long-range efforts which failed to trouble Dudek.
Reds captain Gerrard was trying to push Liverpool forward at every attempt and he tried his luck himself five minutes before the break, but his shot from the edge of the area was easily saved by Kiely.
Heskey had another headed chance just before half time when he rose above Kiely to meet Riise's cross, but he could not direct his effort on target.
Liverpool started the second half in the ascendancy and Gerrard had a sight of goal on 50 minutes after being put clear by Owen, but he shot tamely at Kiely.
Gerard Houllier made a double substitution just before the hour mark bringing on Milan Baros and Vladimir Smicer and the duo combined to send Baros in on goal, but he failed to get enough power on his shot allowing Kiely to easily save.
Charlton then stunned the home fans when they opened the scoring on 63 minutes with Bartlett rising above the rooted Sami Hyypia to power a header into the net.
Liverpool almost responded immediately with Dietmar Hamman seeing his header kicked off the line by Chris Powell and then seeing his shot cleared inside the six-yard box.
Five minutes later Bartlett saw another header deflected just over the crossbar and from the resulting corner Fortune flashed a free header over the top.
Liverpool threw everything into attack in a bid to get back into the game and Gerrard saw a free kick blocked and then saw another shot just go over the crossbar.
Owen had a sight of goal on 78 minutes when Hyypia headed down Riise's cross into his path, but he hit his volley into the ground and straight at Kiely.
Liverpool should have drawn level on 84 minutes when Gerrard picked out Smicer unmarked in front of goal, but Kiely produced an instinctive save to keep out his point-blank header.
The home side felt they should have a penalty a minute later when Gerrard went down on the edge of the box, but the England captain was booked for diving by Phil Dowd.