Thibaut Pinot (FDJ) finished second just 24 seconds back after an impressive performance along with Tom Dumoulin (Sunweb) who fought back after being dropped early on.
Colombian Quintana attacked Pinot and Nibali with 4.7km to go to solo to victory on the gruelling climb. But the stage was marred by an incident with a motorbike which saw British contenders Geraint Thomas (Team Sky) and Adam Yates (Orica-Scott) as well as Mikel Landa (Team Sky) taken out of contention by a stationary motorbike parked on the left hand side of the road with 14.3km to go.
Yates eventually finished 4-37 back on Quintana while Thomas finished 5-08 down and Landa even further adrift at 26-56, effectively taking them out of contention for pink with two weeks remaining of the 2017 Giro.
Leader at the start of the day Bob Jungels (Quick-Step) was also dropped by the main players of the day at 8.8km to go, and falls out of the top-10 overall.
How it happened
Nine riders, Alexey Tstatevich (Gazprom-RusVelo), Mads Pedersen (Trek-Segafredo), Marco Marcato (UAE Team Emirates), Omar Fraile (Dimension Data), Jan Tratnik (CCC Sprandi Polkowice), Matteo Montaguti (AG2R La Mondiale), Luis Leon Sanchez (Astana), Matteo Busato (Wilier-Triestina) and Iljo Keisse (Quick-Step Floors) got away within the fast opening hour of racing to form the day's main breakaway.
They were joined shortly after by Tomasz Marczynski (Lotto Soudal), Pierre Rolland (Cannondale) and Sacha Modolo (UAE Team Emirates) to make a group of 12 after the trio made a late move from the peloton.
They carried a maximum gap of just under four minutes, with Movistar particularly active on the front of the peloton to make sure the break didn't get too much of an advantage heading into Blockhaus.
The break's gap quickly diminished on the early slopes towards the Blockhaus and the last remnants of the group were finally swept up with 22km to go as the GC teams geared up for the final fight for the line.
The race looked to be gearing up for an all out bout between the big GC favourites, but controversy struck when Thomas, Landa and Yates among other riders were taken down by a stationary motorbike as the peloton fought for position.
Movistar continued to push on the pace, and it soon became clear that Quintana was in fine form on his favoured kind of terrain.
He split the main group first with an attack at 6.7km to go, taking only Nibali and Pinot with him. Riders were then spread all over the road with time gaps beginning to form between the GC contenders.
Quintana, Pinot and Nibali were closely matched heading into the final 5km, but an attack with 4.7km to go from Quintana proved decisive.
Pinot tried to follow and looked impressive as he held the gap at 20 seconds to the Colombian out front. Nibali tried to hold the pace but eventually relented and dropped back.
Meanwhile, Dutch duo Bauke Mollema (Trek-Segafredo) and Tom Dumoulin began working their way back to the front and reached Pinot with just over 2km remaining.
Pinot and Dumoulin eventually dropped Mollema, and were able to ride together to just 24 seconds back on Quintana, who calmly took stage victory and overall control of the Giro d'Italia.
The race now heads into a rest day, before a circa 40km time trial on Tuesday which will give hope to Dumoulin of making gains on Quintana.
Giro d'Italia 2017 stage nine, Montenero di Bisaccia - Blockhaus (152k)
1 Nairo Quintana (Col) Movistar Team, in 3-44-51
2 Thibaut Pinot (Fra) FDJ, at 24s
3 Tom Dumoulin (Ned) Team Sunweb, same time
4 Bauke Mollema (Ned) Trek-Segafredo, at 41s
5 Vincenzo Nibali (Ita) Bahrain-Merida, at 1-00
6 Domenico Pozzovivo (Ita) AG2R La Mondiale, at 1-18
7 Tanel Kangert (Est) Astana Pro Team, at 2-02
8 Ilnur Zakarin (Rus) Katusha-Alpecin, at 2-14
9 Sébastien Reichenbach (Swi) FDJ, at 2-28
10 Davide Formolo (Ita) Cannondale-Drapac, at 2-35
23. Adam Yates (GBr) Orica-Scott, at 4-37
29. Geraint Thomas (GBr) Team Sky, at 5-08
164. Mikel Landa (Esp) Team Sky, at 26-56
General classification after stage nine
1 Nairo Quintana (Col) Movistar Team, in 42-06-09
2 Thibaut Pinot (Fra) FDJ, at 28s
3 Tom Dumoulin (Ned) Team Sunweb, at 30s
4 Bauke Mollema (Ned) Trek-Segafredo, at 51s
5 Vincenzo Nibali (Ita) Bahrain-Merida, at 1-10
6 Domenico Pozzovivo (Ita) AG2R La Mondiale, at 1-28
7 Ilnur Zakarin (Rus) Katusha-Alpecin, at 2-28
8 Davide Formolo (Ita) Cannondale-Drapac, at 2-45
9 Andrey Amador (CRc) Movistar Team, at 2-53
10 Steven Kruijswijk (Ned) Team LottoNl-Jumbo, at 3-06
16. Adam Yates (GBr) Orica-Scott, at 4-49
17. Geraint Thomas (GBr) Team Sky, at 5-14
44. Mikel Landa (Esp) Team Sky, at 27-06
Thank you for reading 20 articles this month* Join now for unlimited access
Enjoy your first month for just £1 / $1 / €1
*Read 5 free articles per month without a subscription
Join now for unlimited access
Try first month for just £1 / $1 / €1