曹操看到运送粮草的士兵,安抚他们说:“再等十五天,我为你们打败袁绍,就不用再辛苦你们了。”袁绍的几千辆运粮车到达官渡。荀攸对曹操说:“袁绍的运粮车很快就会到,押运将领韩猛虽然勇猛,但轻敌冒进,我们出击一定能打败他!”曹操问:“派谁去合适呢?”荀攸说:“徐晃可以。”于是曹操派偏将、河东(今山西夏县西北 )人徐晃(按照沈约《志》的记载,曹魏设置将军四十种名号,偏将军、裨将军排在最后。 )和史涣去截击韩猛,把韩猛打得大败而逃,烧毁了他押运的粮草辎重。
冬季,十月,袁绍又派车辆运送粮草,让部将淳于琼等人率领一万多士兵护送,在距离袁绍大营四十里的地方宿营。沮授劝说袁绍:“可以派蒋奇另外率领一支军队在外面作为支援,防止曹操的军队来劫粮。”袁绍不听。
许攸说:“曹操兵力少,却把所有军队都调出来对抗我们,许县剩下的守军必然空虚。如果我们分兵派一支轻装部队,连夜奔袭许县,一定能攻克。攻克许县后,就可以迎接天子,然后讨伐曹操,曹操就会被我们擒获。就算不能攻克,也能让曹操首尾不能兼顾,疲于奔命,这样也一定能打败他。”袁绍不听,说:“我一定要先打败曹操。”恰逢许攸家里有人犯法,审配将其逮捕,许攸大怒,于是投奔曹操。(胡三省注:《考异》说:《魏志·武帝纪》记载:‘许攸贪婪,袁绍不能满足他的欲望,所以他来投奔曹操。’现在依从范《书·袁绍传》的记载。 )
曹操听说许攸来了,连鞋子都没来得及穿就跑出去迎接,他拍着手笑着说:“子卿(许攸的字 )远道而来,我的大事有希望了!”(也有人说:曹操称呼许攸的字说:‘子远,你来了,我的大事有希望了。’这样在文意上更通顺。 )许攸入座后,问曹操:“袁氏的军队很强大,您打算怎么应对?现在还有多少粮草?”曹操说:“还能支撑一年。”许攸说:“不是这样,你说实话!”曹操又说:“能支撑半年。”许攸说:“您不想打败袁氏吗?为什么不说实话呢!”曹操说:“刚刚是和你开玩笑罢了。实际上只能支撑一个月,这可怎么办呢?”许攸说:“您孤军坚守,外面没有救援,而且粮食已经快吃完了,这是危急时刻。袁氏有一万多辆粮草辎重车,停放在故市、乌巢(根据《水经》记载,乌巢泽在陈留酸枣县东南 ),那里的守军防备不严,如果派轻装部队去袭击,出其不意,烧毁他们的粮草辎重,不出三天,袁氏就会自行溃败。”曹操非常高兴,于是留下曹洪、荀攸守卫大营,自己率领五千步兵和骑兵,都打着袁军的旗号,士兵口中衔着枚,把马嘴绑上,趁夜从小路出发,每人抱着一捆柴草。路上遇到有人询问,就回答说:“袁公担心曹操袭击后方的运粮部队,派我们来加强防备。”听到的人都信以为真,没有起疑。到达乌巢后,曹军包围了袁军的屯粮营地,放起大火,营中顿时大乱。天亮后,淳于琼等人看到曹操的军队人数不多,便出营列阵。曹操迅速发起攻击,淳于琼退回营中坚守,曹操继续进攻。
袁绍听说曹操攻打淳于琼,对儿子袁谭说:“就算曹操打败了淳于琼,我攻下他的大营,他也无处可归了!”于是他派部将高览、张合等人攻打曹操的大营。张合说:“曹公派去的都是精兵,一定会打败淳于琼等人,如果淳于琼等人战败,我们的大势就完了,请先去救援他们。”郭图却坚持要攻打曹操的大营。张合说:“曹公的大营坚固,攻打肯定无法攻克。如果淳于琼等人被擒,我们这些人都会成为俘虏!”袁绍只派了少量骑兵去救援淳于琼,却用重兵攻打曹操的大营,结果没能攻下。
袁绍的骑兵到达乌巢,曹操的左右随从有人说:“敌人的骑兵越来越近了,请分兵抵抗。”曹操大怒道:“等敌人到了背后再报告!”士兵们都拼死作战,最终大败袁军,斩杀了淳于琼等人,烧毁了所有的粮草,还杀了一千多名袁军士兵,并割下他们的鼻子,把所俘获的牛马也割掉嘴唇和舌头,以此展示给袁绍的军队看。袁绍的将士们看到后都惊恐万分。郭图为自己计策的失误感到羞愧,又在袁绍面前诋毁张合说:“张合看到军队失败,很高兴。”张合又气又怕,于是和高览一起烧毁攻城器械,前往曹操的大营投降。曹洪怀疑他们,不敢接受,荀攸说:“张合的计策不被采用,心中愤怒才来投奔,你有什么可怀疑的!”曹洪这才接受了他们的投降。
于是袁绍的军队大乱,全面溃败。袁绍和袁谭等人戴着头巾,骑着马(《傅子》记载:东汉末年,王公贵族大多不穿正式的官服,而以裹幅巾为时尚,所以袁绍、崔豹等人,虽然