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.
Justin Bieber crashes Drake Bell's album release party
Members of Congress to keep receiving porn magazine