24 июня 1471 года, всего на 8 день после объявления войны, 5-тысячный Передовой полк Холмского и Хромого захватил и сжег Русу. После воеводы двинулись дальше, по приказу великого князя торопясь навстречу приближавшейся с запада псковской рати. Однако марш был прерван боевой тревогой. Подошедшая со стороны озера Ильмень на судах большая новгородская рать высадилась на берег и 7 июля вступила в бой с москвичами у погоста Коростынь. Нападение было внезапным, и поначалу атакующим удалось потеснить воинов великого князя, но затем сказалась лучшая выучка профессиональных бойцов, и ход битвы изменился. В жестоком бою новгородцы потерпели поражение – в их "пешей рати паде много, а инии разбегошася, а иных москвичи поимаша". Но едва было покончено с первым неприятельским войском, как пришла весть, что вторая судовая рать идет к сожженной Русе. Полк Холмского в тот же день атаковал и это новгородское войско, которое также было разбито.
С сообщением об этих победах из Русы к Ивану III был отправлен гонец, который 9 июля обрадовал новостями великого князя, найдя его в ставке у озера Коломно близ Вышнего Волочка. Сами же воеводы пошли к Демону, стоявшему на реке Ловать. По пути к этому "пригороду" их нагнал гонец, доставивший новый приказ великого князя. Холмскому и Хромому следовало развернуть свою рать и идти вдоль западного берега Ильменя на северо-запад, к реке Шелонь, где они должны были соединиться с союзным псковским войском, которое могло оказаться под ударом главной новгородской рати. Взятие Демона Иван поручил полку удельного князя Михаила Андреевича Верейского.
К тому времени в Новгороде, несмотря на сильнейшие внутренние распри, было собрано огромное ополченское войско – по явно преувеличенным сообщениям летописцев, оно насчитывало до 40 тысяч человек, что, учитывая отправление двух судовых ратей, готовых атаковать полки Данилы Холмского и отряда Василия Гребенки Шуйского в Заволочье, нереально . Командовали им степенные посадники Василий Казимир и Дмитрий Борецкий. Составленный в Новгороде план войны предусматривал нанесение их войском удара по союзным Москве псковичам, активно разорявшим Шелонскую пятину. Высланное против "всей силы псковской" войско должно было гарантированно разгромить противника, закаленного частыми стычками на немецком рубеже. С большой долей вероятности можно предположить, что войско Василия Казимира и Борецкого насчитывало 15–20 тысяч воинов, в основном ополченцев. Состояло оно из мобилизованных "плотницев и гончаров", что заставляет усомниться в предположениях, что эта рать была полностью "коневой". Вряд ли мастеровому люду дали бы боевых коней, да еще в таком количестве. Конные и пешие новгородцы продвигались вдоль Ильменя навстречу псковичам, союзникам Москвы. И когда вечером 13 июля на противоположном (правом) берегу Шелони новгородцы увидели московские отряды, это было для них большой неожиданностью. Предстояло сражение, причем не с ополченцами-псковичами, а с победоносными московскими войсками, только что наголову разгромившими две новгородских судовые рати. В этих условиях принципиально важным стал отказ от боевых действий командования лучшего в войске Владычного (архиепископского) полка, объяснившего свое решение тем, что они шли воевать не с москвичами, а с отступниками-псковичами. Возможно, что это подействовало угнетающе на воинов остальных полков, потерявших уверенность в исходе предстоявшей битвы.
Она началась 14 июля. За ночь воеводы сумели подготовить свое небольшое войско к битве. Рать Холмского и Хромого насчитывала на тот день около 4 тысяч воинов – сказались потери в сражении на Коростыни, а также то, что часть воинов была в "загонах". Тем не менее, войско готовилось к форсированию Шелони. Рано утром Данила Холмский выстроил своих людей и обратился к ним с полагающимся словом: "Господине и братиа наша! Лутче нам есть зде главы своя покласти… нежели с срамом возвратитися".
Воодушевленные своим воеводой, ратники готовились к решающей битве. Когда прозвучала команда, передовой московский отряд начал переправу через Шелонь. Многие историки утверждают, что он пересек реку по разведанным ночью бродам. Но, по свидетельству московского летописца, бродов не было. Можно было бы предположить, что воины Холмского перебрались через реку вплавь вместе со своими конями, используя надутые кожаные бурдюки, но, зная дальнейший ход битвы, во время которой новгородцы, преследуя заманивших их в ловушку москвичей, также преодолели Шелонь, следует признать, что какие-то броды, причем достаточно широкие, на этой реке были.
Продолжим реконструкцию хода битвы. Когда часть великокняжеского войска переправилась через Шелонь, то на левом берегу их атаковали новгородцы, которые отбросили противника обратно за реку и небольшую речку Дрянь . Затем уже они, в горячке боя нарушив строй, в свою очередь перебрались через Шелонь. Видимо, в этом и состоял план Холмского, получившего возможность атаковать уже не войско, но огромное скопище вооруженных людей, сражающихся без команды и строя. В полной готовности на правом берегу Шелони новгородцев поджидали главные силы московской западной (засадной) рати. По переправившимся врагам ударил смертельный ливень стрел, выкашивающий передовых бойцов и их коней. Раненые кони "возмутишася… и начаша с себя бити (сбрасывать – В. В .) их". Эти губительные залпы дали основание новгородским летописцам заявлять о наличии в составе московского войска татарских лучников, что не подтверждается московскими летописцами. Служившие великому князю татары "царевича" Даньяра находились в составе другой рати – Ивана Стриги Оболенского.
Меткие стрелы остановили новгородскую атаку, погибли находившиеся в первых рядах лучшие бойцы. Затем уже по смешавшимся рядам врагов ударили главные силы Данилы Холмского, прорвавшиеся в центр неприятельского построения и пленившие главных командиров врага.
Именно тогда в рядах новгородцев началась паника. Остатки разбитого войска обратились в бегство, ища и не находя путь к спасению. "Полци же великого князя погнаша по них, колюще и секуще их, а они сами бежаще, друг друга бьюще и топчаще, кои с кого мога" . Впрочем, как предположил Н. С. Борисов, это могла быть не реальная подробность события, а привычная для авторов средневековых хроник библейская аллюзия .
Из новгородского источника известно, что конный полк новгородского архиепископа вообще не принял участия в сражении, так как получил от нареченного владыки Феофила приказ действовать только против псковичей, но не поднимать оружия против великокняжеского войска.
Победа воевод Ивана III была полной. По завышенным сведениям летописцев, погибло около 12 тысяч новгородцев. Но потери действительно должны были быть очень велики, так как преследование бегущих продолжалось на расстоянии 12 верст. Оторваться от московской погони могли лишь конные воины. Пешцы либо погибли, либо попали в плен. Видимо, без потерь ушел Владычный полк. Из остальных сил, участвовавших в злосчастной битве, в родной город вернулись жалкие остатки. В плен, помимо немногих оставшихся в живых "плотницев и гончаров" (в данном случае летописные сведения о 2000 пленных близки к истине), попали все главные новгородские командиры: посадники Василий Казимир, Дмитрий Борецкий, Кузьма Григорьев, Яков Федоров, Матвей Селезнев, Павел Телятев, Кузьма Грузов, многие житьи люди. Был захвачен обоз новгородского войска, в котором победители обнаружили список договора Новгорода с Казимиром IV. Его текст, немедленно отосланный Ивану III, разгневал великого князя, и по его приказу "за измену и за отступление" казнили Дмитрия Исааковича Борецкого, Василия Губу Селезнева, Еремея Сухощока и Киприана Арзубьева. Их подписи были обнаружены на договоре с Казимиром IV. Изменников одного за другим подводили к месту казни, где "секирою отсекоша им главы, к колоде прикладая". Других посадников и бояр – Василия Казимира, Кузьму Григорьева, Якова Федорова, Матвея Селезнева, Кузьму Грузова и Федота Базина и других 50 "лучших новгородцев – в оковах отправили в Коломну, в заточение . "Мелких" же людей великий князь демонстративно отпустил в Новгород – явная демонстрация его отношения к действительно виновным боярам и невинным жертвам их козней и интриг.