Both teams finished with 10 men after a bad-tempered game littered with angry exchanges.
Lazio lost 3-0 to the same opponents in Serie A little more than a month ago and had an early let-off when Inter, who controlled the early exchanges, hit the post with a long-range shot from Geoffrey Kondogbia.
But the visitors went ahead in the 20th minute when Felipe Anderson beat two defenders to a cross and scored with a glancing header.
Juventus win Coppa Italia to keep treble dream alive
Lucas Biglia added Lazio's second from a penalty in the 56th minute after Inter defender Miranda fouled Ciro Immobile and was sent off.
Stefan Radu followed for Lazio for a second bookable offence in the 76th minute and Marcelo Brozovic pulled one back for Inter with a looping header with six minutes left.
Despite intense pressure, the hosts were unable to force an equaliser, leaving Lazio to face either neighbours AS Roma or second-tier Cesena in the two-leg semi-final.
Higuain brace takes Juve to final despite Napoli defeat
Lazio beat Roma in Cup clash marred by racist chanting