公元423年三月,北魏在夺取了滑台(今河南省滑县)、洛阳两大重镇之后,奚斤决定开始攻打南朝宋司州刺史毛德祖据守的虎牢(今河南省荥阳市汜水镇)。考虑到虎牢易守难攻,当时仍在邺城(今河北省临漳县西南香菜营乡 邺镇村)的北魏皇帝拓跋嗣又给奚斤派来一支援兵。面对北魏数万大军的重重包围,虎牢城内的毛德祖也没有坐守城池。毛德祖派人从虎牢城内向城外挖掘六条地道,都有七丈深,直通北魏大军包围圈之外。毛德祖再挑选四百名敢死之士,由参军范道基等率领,从地道出城,直到北魏大军的后面。范道基等出了地道,从北魏大军后背发动袭击,北魏兵马一时惊慌失措,数百人被杀,不少攻城器械也被烧毁。北魏大军只好暂时撤退,然而不久又集结起来,再次将虎牢包围,攻城更加猛烈。
由于虎牢城一时难以攻克,奚斤决定与公孙表分兵,再攻另一城池。奚斤令公孙表继续围攻虎牢,自率三千步骑兵南下两百余里,攻打许昌(今河南省许昌市)。据守许昌的南朝宋颍川郡太守李元德不敌奚斤,弃城而走。奚斤夺取许昌后,上表任庾龙为颍川郡太守,驻屯许昌。奚斤接着又率部北上,与公孙表一起继续攻打虎牢。
再说虎牢城内的南朝宋守将毛德祖看到北魏分兵南下,传令所部兵马出城与公孙表激战。这一战,毛德祖所部将士作战非常英勇,从早晨一直战到午后,共杀死北魏数百名士兵。就在毛德祖取得小胜之时,从许昌赶来的奚斤部又将毛德祖夹击起来,毛德祖陷入两面作战的境地。尽管毛德祖率部顽强作战,但死伤惨重,有一千多士兵丧生。毛德祖不敢恋战,传令且战且退,最后一直退到虎牢城中。由于虎牢城异常坚固,再加上毛德祖善于守城,奚斤、公孙表一时不能攻克。北魏皇帝拓跋嗣听报虎牢战况,又给奚斤派来一万兵马。
面对北魏大军在黄河以南夺取城池,南朝宋的朝廷又有怎样的应对部署呢?南朝宋君臣商议认为,北魏已经夺取许昌,离治中高道谨驻屯的项城(今河南省沈丘县)很近,担心高道谨受到北魏兵马的攻击,便传令驻守汝南(今河南省汝南县)的豫州刺史刘粹将高道谨召回,一同南撤驻屯寿阳(今安徽省寿县),还传令前往汝南的龙骧将军沈叔狸也一起南撤。从南朝宋朝廷的这一部署来看,显然是不想夺回被北魏刚刚占领的黄河以南领地,甚至准备放弃坚守虎牢的毛德祖。但刘粹坚决不赞同这一做法,上书认为∶"胡虏正在攻打虎牢,没有继续南进,如果轻率地放弃项城,则淮西各郡都将没有依靠。沈叔狸已经进驻肥口(今安徽省 寿县肥水入淮河口),也不宜立即轻易撤退。"南朝宋朝廷最终采纳了刘粹的建言。此时从许昌南撤的颖川郡太守李元德带领两百名残兵也到达项城,刘粹命其协助高道瑾驻守项城,并向朝廷上书赦免其败撤之罪,朝廷也都采纳。
在刘粹的努力下,朝廷虽然没有放弃项城,但项城离虎牢很远,根本不能帮助毛德祖解围。前面讲到,毛德祖已经与北魏大军进行了两轮激战,第一轮是地道战术,第二轮是直接出城与公孙表作战。两轮激战结果毛德祖所部都不利,因而最终仍是固守虎牢。面对强大的北魏大军,坚守一座孤城的毛德祖并没有放弃,更没有投降。毛德祖开始考虑用计策对付北魏大军。
毛德祖本是荥阳郡人,七年前东晋太尉刘裕北伐后秦时,才投奔刘裕大军。毛德祖在投奔刘裕大军前,与北魏吴兵将军公孙表是多年的老友。毛德祖深知公孙表这位老友很有权谋,要想击败公孙表,必须采取计策。现在二人虽然各为其主,但毛德祖决定给公孙表修书,聊叙旧日之谊。毛德祖在派人送出书信后,又派人暗与北魏晋兵大将军奚斤联络,说公孙表与毛德祖互通书信,畅叙友情,还一同谋划,心存不轨。毛德祖每次给公孙表写信,故意多加涂改。公孙表当然没有与毛德祖谋划背叛北魏,每次收到毛德祖的书信,总是交给奚斤阅览,以显示自己胸怀坦荡。然而奚斤看到书信之中涂改很多,心中生疑,便将此事奏报给北魏皇帝拓跋嗣。拓跋嗣接报后,并没有马上相信公孙表谋反,而是与太史令王亮商议此事。岂料王亮曾与公孙表一同共过事,一直被公孙表看不起,还被公孙表侮辱,王亮因此一直忌恨公孙表。王亮便对拓跋嗣说道∶"公孙表将大军部署在虎牢城东,不是有利地势,所以贼寇不能马上被灭。"拓跋嗣一直相信巫术,对王亮的建言坚信不疑,于是派人在营帐之中将公孙表杀害。
就在毛德祖计杀公孙表不久,南朝宋豫州刺史刘粹也取得了一次战果。三月二十七日,刘粹派李元德北上攻打许昌。由于北魏大军正在全力攻打虎牢,因而在许昌驻守的兵马不多,李元德很快击败北魏颍川郡太守庾龙,夺回了许昌。李元德于是继续驻守许昌,妥加安抚百姓,收缴田赋。
北魏皇帝拓跋嗣看到虎牢一直攻取不下,南朝宋将领又夺回许昌,决定率所部兵马继续南下。三月二十八日,拓跋嗣南渡黄河,到达河内郡(今河南省沁阳市),离虎牢不足百里。拓跋嗣还派并州刺史伊楼拔增援奚斤。四月一日,拓跋嗣抵达虎牢城西边的成皋,下令切断虎牢城的水源,还亲自督战攻打毛德祖。拓跋嗣在虎牢停留三天,仍然未能攻克虎牢。也许拓跋嗣这时想起崔浩之言,知道攻城的困难。拓跋嗣于是命奚斤等继续围攻毛德祖,自率少部兵马西进,前往洛阳巡察,还派使祭祀嵩山。
423年闰四月,北魏楚兵将军叔孙建从滑台(今河南省滑县)前往虎牢(今河南省荥阳市西北汜水镇),准备与晋兵大将军奚斤会合,一同攻打虎牢。此时的虎牢已被北魏大军围了两百日,而且没有一日不战斗,毛德祖的精锐兵马几乎全部战死,而北魏兵马却越来越多。北魏兵马摧毁虎牢外城,毛德祖又构筑三道内城来抵挡。不久,北魏兵马又摧毁其中两道,毛德祖只能坚守最后一道城墙。南朝宋将士昼夜守城,根本不能合眼,很多将士眼里生疮。毛德祖用恩义来抚慰将士,将士之中无一人离心离德。当时镇北将军檀道济抵达湖陆(今山东省鱼台县),豫州刺史刘粹驻屯项城(今河南省沈丘县),龙骧将军沈叔狸进驻高桥(今地不详),都害怕北魏兵马的强大,不敢前进。
闰四月二十一日,北魏晋兵大将军奚斤、楚兵将军叔孙建等商议认为,切断虎牢的水源之所以没有让虎牢城中缺水,主要是城中有水井。奚斤、叔孙建决定在城外深挖地道,将城中水井中的水泄去。奚斤一声令下,北魏将士开始挖地道。虎牢城中的水井深达四十丈,北魏将士必须在山势峻峭的城外挖掘更深的地道才能泄去城中的井水。尽管如此艰难,也不能阻挡北魏将士挖掘地道的决心。不久,深不见底的地道控掘而成,虎牢城中水井的水位开始下降,城中很快出现缺水的惨状∶人马干渴,受伤的人竟然流不出血来。此时虎牢城中粮草又开始不济,天气炎热,瘟疫又在城中传染。北魏晋兵大将军奚斤得知这一消息,传令围城将士开始猛烈攻城。
闰四月二十三日,虎牢城终被北魏大军攻破。将士们打算保护毛德祖逃出重围,毛德祖凛然说道∶"我誓与此城共存亡,为了大义,城破我身不能独存。"此时已从洛阳北上河内郡(今河南省沁阳市),经太行山抵达高都(今山西省晋城市)的北魏皇帝拓跋嗣得知虎牢城被攻克,传令奚斤∶"必须生擒毛德祖,不可伤其性命。"奚斤大军之中一位名叫豆代田的鲜卑将领,最终擒获了毛德祖。当时虎牢城中的其他各将都被北魏兵马俘虏,只有参军范道基带领二百人突围了出去。北魏南征大军死于瘟疫的十之二三。至此,奚斤等全部占领司州、兖州、豫州各郡县。