Liriano (11-4) continued his recent hot streak, collecting his sixth triumph in seven starts. The left-hander allowed four hits, issued a pair of walks and struck out eight in the 102-pitch effort.
Pedro Alvarez socked a three-run homer in the first inning while Clint Barmes went 2-for-4 with a two-run double as the Pirates began a crucial four-game series against the National League Central-leading Cardinals with a win.
They pulled to within a half-game of St. Louis with the victory.
Cards starter Jake Westbrook (7-5) was tagged for four runs on four hits over five full frames.
Matt Carpenter and Shane Robinson each knocked in a run for St. Louis, which stumbled to a fourth consecutive defeat.