The encounter at The Valley was goalless heading into the latter stages but Shrews midfielder Jon Nolan struck an emphatic winner on 80 minutes with a half-volley from 20 yards out.
Following a fairly even start in London, Charlton weighed in with the first concrete opportunity on four minutes when Josh Magennis sent a free header wide of target.
The pendulum soon swung the other way as the Shrews, who finished third in the table, began pressuring their opponents, though Nolan spurned a gilt-edged opportunity in the 17th minute.
Despite a frantic first half, neither side could break the deadlock come the break, but Paul Hurst's charges began dominating proceedings after the restart.
Although Tarique Fosu provided a spark for the hosts when he came on with 62 minutes played, they could not capitalise, and Shrewsbury went on to take the lead in spectacular fashion.
Nolan showed great technique to get his head over the ball from Stefan Payne's delivery and rifle into the top corner of the net from outside the box for his 10th goal of the season.
The return leg takes place at the New Meadow on May 13, with the victor going on to contest the final at Wembley Stadium on May 27.
Rotherham United and Scunthorpe United are contesting the other League One playoff semi-final.
CHARLTON ATHLETIC (4-4-2): Amos; Konsa, Bauer, Pearce, Dasilva; Mavididi (Fosu 62'), Forster-Caskey, Kashi, Reeves (Aribo 77'); Ajose (Zyro 90'), Magennis
SHREWSBURY TOWN (4-1-4-1): Henderson; Bolton, Nsiala, Sadler, Beckles; Whalley (Riley 89'); Morris (Payne 75'), Godfrey, Nolan (John-Lewis 90'), Rodman; Morris