魏军反攻初胜后,太武帝遂命诸将分兵5路大举南下:
1、征西大将军、永昌王拓跋仁自洛阳向寿阳(今安徽寿县);
2、尚书长孙真向马头(今安徽怀远南);
3、楚王拓跋建向钟离(今安徽凤阳东北);
4、高凉王拓跋那自青州(魏青州治今山东广饶)向下邳(今江苏邳县西南);
5、太武帝亲率主力自驻地东平(今山东东平东)向邹山(今山东邹城东南)
十一月初,太武帝大军进攻邹山,宋戍主、鲁阳阳平2郡太守崔邪利投降。太武帝进驻邹山。
与此同时,楚王拓跋建军进驻彭城门户萧城(今安徽萧县西北),另军步尼公进屯彭城另一门户留城(今江苏沛县东南)。镇守彭城的宋武陵王、徐兖2州刺史刘骏与驻在彭城节度北伐诸军的江夏王、太尉刘义恭派参军马文恭、军主嵇玄敬率军分别进至萧城、留城,观察魏军的动向。马文恭、嵇玄敬2军先后与魏军遭遇,马文恭军大败,文恭只身逃回。
嵇玄敬军由于当地百姓的协助,取得胜利,魏军遭到失败。当时,萧城魏军距彭城仅10里之隔,彭城守军虽多,但军粮匮乏,形势十分危急。刘义恭欲弃城南逃,安北长史、沛郡太守张畅力谏不可。
他说:“今城内乏食,百姓咸有走情,但以关扃严固,欲去莫从耳。若一旦动脚,则各自散走,欲至所在,何由可得。今军食虽寡,朝夕犹未窘罄,量其欲尽,临时更为便宜,岂有舍万安之术,而就危亡之道”。刘骏认为张畅所言有理,也劝义恭留镇彭城。刘义恭才决意坚守彭城。太武帝率大军进至彭城,宋军据城固守,魏军不能克。
魏永昌王拓跋仁率骑兵8万,自洛阳南进,连克宋悬瓠、项城(今河南沈丘),直趋寿阳。宋文帝恐镇守寿阳的豫州剌史刘铄被围,遂急令已向虎牢的安蛮司马刘康祖返回寿阳。康祖得令后火速回师,在寿阳北数十里处,被拓跋仁的8万大军追及。
康祖军仅有8000之众,军副胡盛之建议傍山依险,从小路返回寿阳。康祖大怒,说:“寇今自送,不复远劳王师,犬羊虽多,实易摧灭。吾兵精器练,去寿阳裁数十里,援军寻至,亦何患乎”。遂命将士结车营沿大道向寿阳进发。魏军仗恃人多,四面夹攻宋军,康祖率军奋战一天一夜,杀敌万余人。
魏军又分为3批,轮番进攻,并以马匹运草火烧宋军车营,康祖激励将士,拼死决战,终因寡不敌众,全军覆没。康祖身被10创,中流矢坠马而死。北魏拓跋仁军围攻寿阳,并分兵袭扰宋马头、钟离等地。宋刘铄命将士烧掉寿阳四周庐舍,凭坚城固守。
十一月底,魏军各部进抵淮水一线。太武帝见彭城、寿阳等坚城急攻难下,遂决定置宋孤城不顾,渡淮南进,兵锋直指长江。
十二月初一日,北魏诸军渡淮南进:高凉王拓跋那出山阳(今江苏淮安)、永昌王拓跋仁出横江(今安徽和县东南)、中书郎鲁秀出广陵(今江苏扬州),太武帝自率大军直趋瓜步(今江苏南京六合东南瓜埠)。魏军未带军粮,沿途本以抄掠为食。渡淮后得知宋盱眙(今属江苏)城有储粮,便猛攻盱眙。
盱眙太守沈璞与辅国将军臧质奋力抵抗,魏军攻城不下,便绕城而过,继续南进。魏军沿路烧杀抢掠,刘宋许多城邑守将望风奔逃。十二月十五日,太武帝军抵达瓜步,与建康隔江而对。
魏军到达长江北岸后,大拆民房,割苇造筏,声言渡江。建康震动,宋廷上下一片恐慌。宋文帝命令建康内外戒严,悉发丹阳(治建康)地区丁壮为兵,王公以下子弟皆从役。领军将军刘遵考等将兵分守建康津要,派水军沿江巡逻,“上接于湖,下至蔡州,陈舰列营,周亘江畔,自采石至于暨阳,六七百里,船舰盖江,旗甲星烛”。
文帝又命太子刘劭总统水军,出镇石头城(今南京城西),丹阳尹徐湛之守石头仓城,吏部尚书江湛兼领军,总统军事。文帝悬重赏购太武帝君臣首级,斩太武帝首级者,封八千户开国县公,赏布绢各万匹,金银各百斤。又募人将毒酒置江北空村中,欲以毒死魏军将士。
宋文帝刘义隆登石头城北望,面有忧色,长吁道:“如果檀道济还在,怎么会到这个地步!”
太武帝虽声言渡江,其实是虚张声势。魏军逞一时兵威,从黄河北岸一直打到长江北岸,连过刘宋青、冀、兖、徐、豫、南兖6州,沿途烧杀抢劫,遭到江淮人民的强烈反抗,他们纷纷以坚壁淸野对抗魏军。魏军抄掠无所得,军资奇缺,人马饥乏。
同时魏军屯长江北岸,前有长江天堑,没有强大水师无法渡江,后有刘宋6座州治坚城未破,难免有后顾之忧,而且沿路征战,士马损失过半,因而魏军此时已是强弩之末,退兵乃是大势所趋.
元嘉二十八年(451年)正月初一,太武帝大会群臣于瓜步山上。初二,魏军掠民户5万余户,焚庐舍撤军北还。魏军在返回途中为了解决军粮,再次围攻盱眙,守将臧质率领将士英勇抵抗。魏军先后筑长围,施以钩车、冲车等器具连续攻城,宋军以相应办法抵抗。魏军乃“肉薄登城,分番相代,坠而复升,莫有退者,杀伤万计,尸与城平”。
魏军猛攻20余日,盱眙岿然不动。二月二日,太武帝因北魏军中多疾疫,又有人告以宋廷命彭城守军断其归路,并遣水军自海入淮来攻,遂撤盱眙之围北还。
魏军路过彭城时,刘义恭畏惧不敢截击,魏军驱迫掳掠来的民户万余口宿于彭城几十里处的安王陂,诸将皆请出击,义恭不许。次日,宋文帝诏令义恭全力追击魏军,义恭才遣将追击。魏军已得知此讯,将万余口百姓全部杀掉,平安撤回魏境。这场持续半年多的宋魏战争,以刘宋失败而告结束。