Выборг был для своего времени первоклассной крепостью, поскольку в 1477 году был обнесён каменной стеной с башнями, что значительно увеличивало его боевую устойчивость. С такой мощной крепостью русские войска имели дело впервые.
Русское войско, численность которого оценивается историками до 10 тысяч человек, состояло главным образом из всадников, которые были опытны и хорошо вооружены. Гарнизон Выборга насчитывал в 1471 году 1—3 тысячи человек, но в связи с расширением крепости и появлением в качестве потенциального противника единого Русского государства, его численность по всей вероятности была с тех пор увеличена. В гарнизон входили рыцари замка (свита коменданта), городская стража, крестьянское ополчение из области Нюланд, а также нанятый правителем Швеции Стеном Стуре для защиты Выборга отряд немецких наёмников в 500 человек под командованием капитана Хартвига Винхольта. В подкрепление гарнизону епископ Або прислал свой небольшой отряд рыцарей, также в Выборге собралось немало финского дворянства.
Подступив к крепости, русские воины осадили её c нескольких сторон. Комендант Кнут Поссе вёл довольно активную оборону, стремясь с помощью вылазок нейтрализовать часть разделившихся осаждавших. Однако его мобильный отряд во главе с Магнусом Фрилле попал в засаду и практически весь был уничтожен. Многие воины попали в плен, в том числе и сам Магнус Фрилле.
Поскольку артиллерия («наряд») ещё не прибыла, а наступающие холода заставляли действовать быстро, воевода Даниил Щеня решился на штурм. Как свидетельствуют шведские источники, он был близок к успеху, однако сказалась недостаточная координация штурма с разных сторон, в результате чего нападающим пришлось отступить.
Когда в стан русских прибыл наряд, начались обстрелы города. В результате были разрушены две башни и повреждена третья. В стене образовались проломы, за которыми Поссе приказал насыпать земляной вал.