Zheng Kaimu, Bo Jiajun and Didier Drogba scored the goals for Shanghai as they extended their unbeaten streak to six matches.
The big-spending club started the season in terrible form with just two wins in their first 11 matches but Saturday's triumph sees them move up to ninth on the table.
Chinese defender Zheng gave the home side the lead in the 39th minute but Shanghai had to wait until the final five minutes to finish the game off.
Bo made it 2-0 in the 85th minute and then five minutes later Drogba struck to wrap up the victory.
In Saturday's other match, second-placed Jiangsu Sainty won 2-0 against Guizhou Renhe, who sit third on the table.
Aleksandar Jevtic scored a brace for Jiangsu as they kept the pressure on league-leaders Guangzhou Evergrande.
Jiangsu trail Evergrande by one point after 24 rounds.
Jevtic scored in the 62nd minute to put Jiangsu in front at home before clinching the victory with a goal in the second minute of injury time.
Hangzhou's clash with Shandong Luneng was postponed.