The setback left the White Sox needing a win in one of its final two games against the Royals to avoid a 100-loss season.
Butler delivered a two-run double in the first inning and scored the third run of the frame on a single by Lorenzo Cain.
Bonifacio had an RBI single in both the fourth and sixth innings.
James Shields (13-9) held the White Sox to a run on four hits with 10 strikeouts in seven innings. He won eight of his final nine decisions.
Chris Sale (11-14) was touched for four runs on nine hits in 4 1/3.