Liriano (8-3) struck out seven and walked four in his second complete game in nine Major League seasons, helping the Pirates to their 11th win in 13 games.
Starling Marte had three hits and scored twice for Pittsburgh.
Cubs' starter Jeff Samardzija (5-8) allowed five runs on nine hits and five walks in six innings in picking up his first loss since June 8.
Scott Hairston accounted for both Chicago runs with a two-run home run.
Chicago has lost three of its last four.