在两军相持阶段,能否不断地补给军粮,会直接关系到战争的胜败。一天,曹军的探子侦察到,有几千辆袁军的粮车,正往官渡这边押运过来。押运官韩猛是个有勇无谋的人,打起仗来轻敌少备。荀攸听到这一情况,便建议曹操派兵去劫夺袁绍的粮车。曹操派部将徐晃和史涣率兵前往,在半路上打跑了韩猛,烧掉了他押送的全部粮车和军用物资。到了十月,袁绍又派人从河北运来一万多车军粮,囤积在大营以北40里的故市、乌巢(都在今河南省延津县境内),还特派大将淳于琼带领一万人驻在那里保护。由于上次粮车被烧,沮授这次特别提醒袁绍,要他另派一员战将率领一部分军队驻防在淳于琼的外侧,以防曹军偷袭。袁绍又没有采纳这个建议。
袁绍的另一个谋士许攸,认为曹操兵少,主力部队已经集中在官渡,后方必定空虚;他建议袁绍派出一支轻骑兵,星夜去偷袭许都。袁绍主观武断,顾虑多端,又不采纳许攸的意见,反而说:“不必,我一定可以在这里捉住曹操!”许攸看到袁绍如此骄傲轻敌,最后必然要败给曹操,因此,思想发生了动摇。恰在这时,住在邺城的许攸家族有人犯了法,被留守邺城的审配拘留起来。许攸在气愤之下,就暗地里背弃袁绍,投靠曹操去了。
曹操和许攸本来是老相识,现在听说许攸前来投奔,高兴得连鞋子都来不及穿,就跑出去迎接。曹操拍手说:“子远(许攸字子远)远道而来,我的大事一定可以成功了。”许攸坐下来,开口就问曹操:“袁绍军势很盛,您打算怎样对付他?目前还有多少军粮?”曹操说:“还可以支持一年。”许攸知道这是假话,就说:“没有这么多吧,请再说说!”曹操又说:“可以支持半年。”许攸知道曹操说的还是假话,便点穿他说:“您不想打败袁绍吗?为什么不说实话呢?”曹操知道瞒不过许攸,便满脸堆笑地对许攸说:“方才是同你开个玩笑。其实军粮只够维持一个月,你看该怎么办呢?”许攸见曹操说了实话,便把袁绍在乌巢囤积军粮的情况完全告诉了曹操,并且建议曹操派出轻骑前往偷袭,把袁绍的粮草和辎重全部烧掉,不出三天,就可以打败袁绍。
许攸献的计策,使曹操喜出望外。这天夜里,星光满天,曹操留下曹洪、荀攸防守官渡大营,自己率领步兵和骑兵5000人,打着袁军旗号,每人手里拿着一把干柴,口里衔着枚,把所有的马嘴都绑起来,从小路奔向乌巢。枚是一根像筷子似的小木棍儿,古代夜间行军或偷袭敌营,往往让行军的人每人口中衔枚一个,以免说话或出声,被敌人发觉。枚的两头还有绳子拴在脖子上。曹军一路上几次遇到袁军盘问,都假称是袁绍派到乌巢去增援的,就这样,顺利地通过了袁军的防线。天还没亮,曹军到达乌巢,把袁绍的粮囤团团围住。曹操命令士兵点燃干柴放火,霎时间,只见粮囤浓烟四起,火光冲天。袁军从梦中惊醒,慌作一团,不知如何是好。袁军的守将淳于琼仓促应战,经不起曹军一阵猛攻,只得败退下来,保守营门。
曹操听说许攸前来,高兴得连鞋都来不及穿,就跑出去迎接。
袁绍很快弄清是曹军偷袭乌巢,但是并不很重视。他对大儿子袁谭说:“即使曹操打败了淳于琼,只要我们攻下他的大营,曹操就没有归所了。”于是命令大将张郃〔he河〕、高览率兵去攻打曹操官渡大营。张郃认为曹操亲领精兵围攻乌巢,恐怕淳于琼抵挡不住,如果乌巢有失,大事就完了。因此他一再请求袁绍先派兵去救淳于琼。可是袁绍在郭图的迎合之下,仍然坚持用主力去进攻曹操官渡大营,只派少数骑兵去援救乌巢。官渡曹军营垒坚固,战士死守,袁军久攻不下,等于是给曹操攻破乌巢提供了条件。
再说乌巢的战况。当袁绍的增援骑兵临近乌巢的时候,曹操左右的人慌忙向他报告说,“敌人的骑兵就要到了,我们快分一部分军队去抵挡吧!”曹操却严厉命令部下说:“等敌人到了我们背后,再来报告!”在曹操坚决果断的指挥下,曹军人人拼死战斗,势不可挡,很快就攻下了袁军的营寨,杀死了主将淳于琼,袁军的一万车粮谷被烧得一干二净!
淳于琼战败被杀的消息传到官渡前线,张郃看到大势已去,又听说郭图在袁绍面前诬陷他,他既气愤,又害怕,便同高览把全部攻城机械烧掉,一同到曹营去投降。袁军本来已经军心动摇,一见主将投降,就更加慌乱,全部溃散。曹军乘势反击,袁军大败,主力差不多全部被歼灭,袁绍和袁谭只率领着800名亲兵逃回黄河以北。袁绍因这次惨败,实力再也恢复不过来,终于积忧成疾,在公元202年五月发病死去。他的几个儿子争权夺位,互相攻杀,结果被曹操各个击破。袁氏父子的残暴统治结束了,曹操统一中国北方的局面终于形成了。
官渡之战,是历史上以少击众、以弱胜强的著名战争。曹操能够取得胜利,是因为在军事上实行了正确、灵活的作战原则,例如:先扫清分散的较弱的割据势力,再集中力量对付正面的强敌;先让一步,后发制人;声东击西,出奇制胜;烧毁敌人粮草,动摇敌方军心等等。袁绍失败的原因很明显:政治腐败,骄傲轻敌,只知硬拼硬打,不知用策用计等等。曹操能够虚心采纳部下建议,袁绍则一意孤行,也是曹胜袁败的重要因素。