The league’s leading scorer kept his cool to convert Andrew Robertson’s cross on 84 minutes for his 29th goal of the season.
The home side had gone ahead on 13 minutes.
Liverpool goalkeeper Loris Karius brought down Wilfried Zaha when through on goal and Luka Milivojevic put away the resulting penalty, his seventh of the season.
Four minutes after the break Sadio Mane brought Liverpool level, finishing James Milner’s left-wing cross.
Christian Benteke missed two chances in quick succession to restore Palace’s lead but Salah made no mistake with six minutes remaining.
Liverpool are third with 66 points, while Palace lie two points off the bottom three, on 30.
Crystal Palace: 7 Apr v AFC Bournemouth (A)
Liverpool: 7 Apr v Everton (A)