Porto sink Shakhtar to stay in contention
Hulk scored 10 minutes from time in frosty Donetsk to put the visitors ahead before Romanian defender Razvan Rat scored an own goal in the dying moments of the game to wrap up the victory for the Portuguese side.
FC Porto stay third with seven points in Group G, one point behind Zenit St Petersburg, and could advance if they beat the Russian champions in their final game on December 6.
Shakhtar, who have not won a Champions League game this season, hit the post in each half.
The Ukrainian side went into Wednesday's match knowing they were already on their way out of the competition after APOEL Nicosia and Zenit had shared the points in a goalless draw in an early game which put the Cypriot team through.
Porto went close to scoring five minutes into the game when Hulk beat keeper Olexandr Rybka and sent the ball towards the net only to see it stopped by central defender Yaroslav Rakitskiy.
Shakhtar responded in style as Brazilian striker Luiz Adriano sped clear through the midfield to hit the far post from the edge of the area.
Defender Olexandr Kucher narrowly missed the target with a bicycle shot having collected a bizarre rebound following a poor clearance.
Both sides lacked bite in attack after the restart before Hulk finally broke the deadlock in the 80th minute soon after Shakhtar's Fernandinho rattled the post with a curled, long-range shot.
Joao Moutinho swept a perfect slicing pass into the path of Hulk who collected the ball at the edge of the area, raced forward and calmly sent it past the goalkeeper.
Shakhtar were caught cold again in the closing minutes when the ball chipped over Rybka into the net following a deflection off Rat while the Romanian defender was trying to block Maicon's shot.