Swindon Town substitute Alan Connell struck twice as his team came from behind to go top of League Two.
Shrewsbury stunned the in-form home side when they went ahead with a Matt Richards header from Mark Wright's corner five minutes before the break.
But, after Shrewsbury were denied a penalty, half-time sub Connell levelled from close range on 64 minutes after an error by Shrews keeper Chris Neal.
And, when Luke Rooney's shot bounced down off the bar, Connell pounced.
Shrewsbury manager Graham Turner, livid at a match-changing penalty appeal turned down at the start of the second half, ended the evening having to be restrained by stewards.
Visiting striker Terry Gornell appeared to be brought down by Alan McCormack, but referee Brendan Malone waved it away.
And Paolo di Canio's Robins, who started the night in third, roared back to make it five wins on the spin.
Turner's Shrewsbury, who stay fourth after suffering only their second defeat in seven games, had the better of the first half, taking a deserved lead in the 40th minute.
But Di Canio sent on Connell at the start of the second half in place of Billy Bodin and the move twice paid off.
Neal failed to hold Matt Ritchie's shot and Connell snapped up the rebound before his opportunism earned Swindon's 76th minute winner.
VIEW FROM THE DRESSING ROOM
Swindon boss Paolo di Canio told BBC Wiltshire:
"They deserve to stay at the top. Now is the time to relax, not to panic.
"Seven months we fought to get to the top and now we cannot panic. We have to take off, look back, say 'bye bye'. We go to Barbados. That is our attitude now, we have two games in hand.
"If you play like the first half we can be in trouble, so I prefer to lose and play like we did in the last half an hour.
"If we play like we did in the last half an hour we will lose one or two games, but we will win 10 or 12."
Shrewsbury boss Graham Turner told BBC Radio Shropshire:
"Over my long career I don't often criticise referees. They have a difficult job. But the decision not to award us a penalty was the big decision of the game - and he bottled it.
"He might have been overawed by the occasion, by the size of the crowd, but even the Swindon defender was ready to walk - he knew it was a penalty, everybody in the ground knew it was penalty.
"We were on top, leading 1-0, and there's a chance we could've been two up and they're down to 10 men. It was a big lift for them when they got away with something like that, and it had a downer on us."
Full Time The final whistle is blown by the referee.
Luke Rooney fouled by David McAllister, the ref awards a free kick. Alan McCormack restarts play with the free kick.
90:00 +3:17 Booking
Booking Paul Benson is booked.
The assistant referee flags for offside against Paul Benson. Matthew Richards restarts play with the free kick.
Free kick taken by Wesley Foderingham.
Booking Jermaine Grandison shown a yellow card.
Foul by Jermaine Grandison on Paul Benson, free kick awarded.
Effort on goal by David McAllister from 20 yards. Save made by Wesley Foderingham.
Substitution Jon Taylor goes off and Romaine Sawyers comes on.
James Collins takes a shot from just inside the penalty box which clears the bar.
Simon Ferry fouled by David McAllister, the ref awards a free kick. Alan McCormack takes the direct free kick.
Assist on the goal came from Luke Rooney.
75:48 Goal scored
Goal! - Alan Connell - Swindon 2 - 1 Shrewsbury Alan Connell scores a goal from close range to the bottom left corner of the goal. Swindon 2-1 Shrewsbury.
Luke Rooney has an effort at goal from just outside the area that bounces off the post.
Inswinging corner taken by Matt Ritchie from the right by-line, Jermaine Grandison makes a clearance. Short corner taken by Luke Rooney from the left by-line.
Alan Connell is ruled offside. Free kick taken by Ian Sharps.
Mark Wright crosses the ball in from the free kick, Wesley Foderingham makes a save.
Substitution Marvin Morgan is brought on as a substitute for Terry Gornell.
Free kick awarded for a foul by Simon Ferry on Mark Wright.
Substitution Oliver Risser is brought on as a substitute for Daniel Boateng.
Luke Rooney takes a shot. Save by Chris Neal.
Matt Ritchie takes a inswinging corner to the near post, Chris Neal makes a save.
Inswinging corner taken right-footed by Matthew Richards, save made by Wesley Foderingham.
Shot by Matt Ritchie. Comfortable save by Chris Neal.
The assist for the goal came from Matt Ritchie.
63:19 Goal scored
Goal! - Alan Connell - Swindon 1 - 1 Shrewsbury Alan Connell finds the net with a goal from close range to the bottom left corner of the goal. Swindon 1-1 Shrewsbury.
Matt Ritchie takes a shot. Chris Neal makes a save.
Luke Rooney produces a right-footed shot from just outside the penalty box that misses to the left of the target.
Substitution Shane Cansdell-Sherriff is brought on as a substitute for Joe Jacobson.
Alan Connell takes a shot. Save by Chris Neal.
Daniel Boateng challenges James Collins unfairly and gives away a free kick. Matthew Richards restarts play with the free kick.
Wesley Foderingham takes the indirect free kick.
Substitution Simon Ferry replaces Jonathan Smith.
Inswinging corner taken right-footed by Mark Wright from the left by-line to the near post, free kick awarded for an unfair challenge on Daniel Boateng by Jermaine Grandison.
Foul by Daniel Boateng on Mark Wright, free kick awarded. The ball is crossed by Mark Wright, James Collins takes a shot. Daniel Boateng manages to make a clearance.
Terry Gornell takes a shot. Save made by Wesley Foderingham.
Effort from deep inside the area by James Collins misses to the right of the target.
The referee gets the second half started.
Substitution Alan Connell is brought on as a substitute for Billy Bodin.
45:00 +1:04 Half time
Half Time The match has reached half-time.
Luke Rooney takes a shot from just outside the penalty area clears the crossbar.
The assist for the goal came from Mark Wright.
39:50 Goal scored
Goal! - Matthew Richards - Swindon 0 - 1 Shrewsbury Matthew Richards scores a headed goal from close range. Swindon 0-1 Shrewsbury.
Corner taken left-footed by Matthew Richards, Daniel Boateng makes a clearance. Mark Wright takes a inswinging corner to the near post,
Mark Wright takes a shot from just inside the penalty box which clears the bar.
Foul by Paul Caddis on Terry Gornell, free kick awarded. Free kick crossed left-footed by Mark Wright from left channel, save made by Wesley Foderingham.
Terry Gornell gives away a free kick for an unfair challenge on Alan McCormack. The ball is swung over by Alessandro Cibocchi, Headed effort from deep inside the penalty area by Daniel Boateng misses to the right of the target.
The official flags Billy Bodin offside. Chris Neal takes the free kick.
The referee gives a free kick against Billy Bodin for handball. Chris Neal takes the indirect free kick.
Matt Ritchie takes a corner.
Shot from 35 yards from Joe Jacobson. Wesley Foderingham makes a comfortable save.
Paul Benson is penalised for a handball. Jermaine Grandison takes the free kick.
James Collins has an effort at goal from outside the area which misses left.
James Collins concedes a free kick for a foul on Alan McCormack. Alan McCormack restarts play with the free kick.
Free kick awarded for a foul by Mark Wright on Matt Ritchie. The free kick is delivered right-footed by Alan McCormack from right channel, Ian Sharps makes a clearance.
Matt Ritchie takes the inswinging corner, save by Chris Neal.
Headed effort on goal by Paul Benson from just inside the box goes harmlessly over the goal.
Unfair challenge on Wesley Foderingham by James Collins results in a free kick. Free kick taken by Wesley Foderingham.
This page is best viewed in an up-to-date web browser with style sheets (CSS) enabled. While you will be able to view the content of this page in your current browser, you will not be able to get the full visual experience. Please consider upgrading your browser software or enabling style sheets (CSS) if you are able to do so.