Контрнаступление — второй этап битвы за Москву — началось 5–6 декабря 1941 года на фронте от Калинина до Ельца.
Боевые действия с первых дней приобрели ожесточённый характер. Войска левого крыла Калининского и правого крыла Западного фронтов, несмотря на отсутствие превосходства в живой силе и технических средствах, а также на суровые морозы и глубокий снежный покров, уже в первые дни контрнаступления прорвали оборону противника южнее Калинина и северо‑западнее Москвы. Они перерезали железную дорогу и шоссе Калинин — Москва и освободили ряд населённых пунктов.
Одновременно с ними в контрнаступление перешли войска левого крыла Западного и правого крыла Юго‑Западного фронтов, наступавшие северо‑западнее Москвы.
В последующие дни советские войска последовательно освобождали населённые пункты: 9 декабря — Рогачёво, Венёв и Елец, 11 декабря — Сталиногорск, 12 декабря — Солнечногорск, 13 декабря — Ефремов, 15 декабря — Клин, 16 декабря — Калинин, 20 декабря — Волоколамск. 25 декабря советские войска на широком фронте вышли к Оке. Вскоре были освобождены Козельск (28 декабря) и Калуга (30 декабря), а в начале января 1942 года — Мещовск и Мосальск.
К началу января 1942 года войска правого крыла Западного фронта вышли на рубеж рек Лама и Руза, а войска Калининского фронта — на рубеж Павликово — Старица. Войска центра Западного фронта освободили Наро‑Фоминск (26 декабря), Малоярославец (2 января) и Боровск (4 января). Войска Брянского фронта, взаимодействуя с войсками левого крыла Западного фронта, к началу января 1942 года достигли рубежа Белёв — Мценск — Верховье.
Эти успехи создали благоприятные условия для окружения группы армий «Центр» и окончательно сняли угрозу, нависшую над Москвой.
