Goalkeeper Farzaneh Tavasoli fired Iran ahead in the 10th minute.
Tavasoli kept them at bay time and time again, but two goals in quick succession catapulted the Azzurre into the lead.
Adrieli Berte got the first in the 30th minute with a delightful dink, and Bruno Borges scrambled home the second seconds later. Gaby Vanelli then punished Iran’s use of the fly goalkeeper by striking home from distance to seal victory.
The Italian side will now play Portugal on Tuesday for the right to face the Argentina-Colombia winner in the semi-finals.