Porto must beat Atletico Madrid in their final group game and hope for Zenit St Petersburg to ensure they qualify for the Champions League knockout stages after they were held by Austria Vienna.
The visitors were ahead inside 11 minutes when Roman Kienast was allowed time and space by Brazilian defender Danilo and his fierce shot found the bottom-left corner.
However, Porto dominated proceedings with 26 shots at goal throughout the game, but the hosts struggled to find a way through the Austrian outfit's defence.
Indeed, they were nearly made to pay when Vienna appealed for a penalty when the ball brushed Danilo's arm, but the referee didn't see it as deliberate hand ball.
The Portuguese side found an equaliser just after the interval when a Eliaqum Mangala header found Jackson Martinez who nodded with Austria keeper Heinz Lindner stranded.
Martinez nearly found a winner seven minutes from time, but his header was inadvertently turned wide by teammate Mangala.
The result means that Porto's fate is out of their hands as Zenit only need to match their result to reach the last 16.