Ricardo Quaresma scored the winning spot-kick for his country after Jakub Blaszczykowski had his penalty saved by Rui Patricio.
Robert Lewandowski scored his first goal of the tournament in the second minute of the clash, but Portugal later responded when Renato Sanches netted just after the half-hour mark.
From that point on, both teams failed to convert their goalscoring opportunities, with Cristiano Ronaldo having a particularly frustrating evening, and the game eventually resulted in extra time and a shootout.
It could not have been a better start for Poland as Lewandowski, who had not scored for his country since October 2015, ended his goal drought with an early strike.
Kamil Grosicki created the move as he managed to break away from his marker before pulling the ball back across the centre of the box for Lewandowski, who fired past the goalkeeper.
Poland looked in control in the early stages of the first half as they managed to frustrate Portugal’s attack for the most part and also caused danger on the counter-attack.
However, Portugal still had their chances, a handful of which fell to Ronaldo, who twice in quick succession slammed a shot straight into a white shirt in the box.
Fernando Santos’s side continued to work the ball around the final third, but when they lost possession, it was dangerous, and on one occasion, Arkadiusz Milik unleashed a shot from distance but the ball dropped wide.
Lewandowski went for a second goal in the 17th minute after latching onto a low cross from Milik. The Bayern Munich striker used quick feet on the edge of the box to break away from Pepe and Jose Fonte, but his low shot was comfortably gathered by the keeper.
Some one-touch play between Milik and Grosicki almost resulted in a goal when the latter, who was positioned on the left side of the 18-yard area, delivered a low cross, but the ball was hoofed clear by Fonte.
On the half-hour mark, Portugal should have been awarded a penalty when Michal Pazdan shoved Ronaldo in the back, but referee Felix Brych waved away his claims.
Renato Sanches is the third youngest scorer in EURO history. #EURO2016
Three minutes later, though, Portugal were celebrating when 18-year-old Sanches scored his first international goal after connecting to Nani’s flick, and with the help of a deflection, the midfielder sent the ball past Lukasz Fabianski with his left foot.
After the break, Lewandowski tried to make an early second-half impact with a header, but the cross from Lukasz Piszczek was slightly short and the striker was too low when he connected with the ball, therefore failed to get enough power behind it.
The tempo slowed down in the second half, but Ronaldo wasted an opportunity in the 56th minute when Nani played the ball into his feet, but the three-time Ballon d’Or winner fired into the side netting while aiming for the near post.
It looked to be another frustrating night for Ronaldo as a handful of crosses into the box evaded him, one of which trickled behind to Cedric, who shot from the edge of the box, but his effort was blocked.
A few minutes later, Cedric let one fly from around 30 yards out, but his attempt from the right side of the area drifted just wide of the top left corner.
Rui Patricio was called upon around the 70th-minute mark when Milik fired from close range after latching onto Artur Jedrzejczyk’s cross from the byline, but the keeper dropped to his left to snatch the ball.
At the other end, Fabianski made a stop, but it was a comfortable one as Fonte’s header off a corner was fired straight into the keeper’s hands.
Poland were almost left red faced when Jedrzejczyk came close to sending the ball into his own net. The defender intercepted Pepe’s pass to Ronaldo and the ball just tricked inches wide of the left post.
Ronaldo had the chance to finish off the game in the 86th minute when the ball was played over the top of the defence, but the 31-year-old scuffed his shot in the 18-yard box and the keeper comfortably collected.
Nothing could separate the two sides after full time, so 30 minutes of extra time ensued, and Ronaldo could have put Portugal ahead within the first minute when a perfectly-weighted ball into the box from Sanches found the skipper, but he failed to get his feet right and the ball was cleared before he could get a shot away.
There were opportunities at both ends, but neither could convert and penalties were needed to decide the first semi-finalist of the tournament.
It was heartache for Poland when Quaresma sent Portugal through after Blaszczykowski had his penalty saved.
Portugal will play the winner of the quarter-final between Belgium and Wales.