在两军相持阶段,军粮的补给是关系战争胜败的一个重要因素。曹操看到袁军粮草虽然比较充足,但是因为军队多,消耗也大,如果军粮发生问题,就会不战自败。曹操一方面严令后方催办粮草,接济军需;一方面,决定派人去烧毁袁军的粮草。恰巧袁绍派韩猛监押粮车几千辆,前来官渡途中。韩猛是袁绍手下的一员战将,但是他有勇无谋,而且轻敌少备。荀攸了解到这个情况,就向曹操建议派兵去劫夺袁绍的粮车。曹操派部将徐晃和史涣带兵前往,打跑了韩猛,烧掉了他押送的全部粮车和军用物资。到了10月,袁绍又派人从河北运来一万多车军粮,囤积在大营以北40里的故市、鸟巢(都在今河南延津县境),还特派大将淳于琼带领一万人驻扎在那里保护。
由于上次粮车被烧,一度造成袁军给养的困难,因此沮授特别提醒袁绍,要他另派一员战将率领一部分部队驻防在淳于琼的外侧,以防曹军抄袭。袁绍没有采纳。
袁绍的另一个谋士许攸,认为曹操兵少,而且主力部队都集中在官渡,后方必定空虚。因此,他建议袁绍派出一支轻骑部队,去偷袭许都。但是,盲目自大而又顾虑多端的袁绍,并不重视许攸的意见,反而骄傲地说:“不必,我一定可以在这里擒住曹操!”许攸感到袁绍这样骄傲轻敌,最后一定要失败。因此,他的思想发生动摇。正在这个当儿,许攸的家族有人犯了法,被留守邺城的审配拘捕起来。许攸在气愤之下,竟然背弃袁绍,去投奔曹操。
曹操听说许攸前来投靠,高兴得连鞋子都没有来得及穿,就光着脚跑出去迎接,并且拍手说:“子远(许攸的字)远道而来,我的大事一定可以成功了。”许攸见了曹操,开口就问道:“袁绍军势很盛,您打算怎样对付他?目前还有多少存粮?”曹操说:“可以支持一年。”许攸知道这是假话,就说:“没有这么多吧!”曹操又回答说:“可以支持半年。”许攸直截了当地说:“您不想打败袁绍吗?为什么不说实话呢!”曹操才对许攸说:“其实军粮只够维持一个月了。你看这该怎么办呢?”许攸这才把袁绍在乌巢堆积军粮的情况完全告诉了他,并劝他率轻骑前往偷袭,把袁绍的粮食和辎重全部烧掉。
许攸的迁,真使曹操喜出望外。当天夜里,曹操留下曹洪、荀攸防守官渡大营,亲自率领步骑兵五千人,打着袁军旗号,每人手里拿着一把干柴,口里衔着枚,把所有的马嘴都束起来,从小路奔向乌巢。在行军途中,曹军忽然遇到一队袁军,盘问他们是何处兵马,曹操让士兵回答说:“袁将军恐怕曹操包抄我军粮屯,特地派我们前去增援。”曹操的部队骗过了敌人的耳目,顺利地通过了袁军的防线,直奔乌巢,把袁绍的粮屯团团围住,然后放起火来。在黑夜中,只见粮屯周围,浓烟四起,火光冲天。袁军从梦中惊醒,慌作一团,不知如何是好。天亮以后,袁军守将淳于琼发现曹操兵马并不多,就把军队调出营门,攻击曹军。结果,被曹军打得大败,淳于琼只得退守营屯。
袁绍听说曹操进攻乌巢粮屯,仍旧没有引起他的注意,反而认为这是攻下官渡、歼灭曹军主力的最好机会。他对袁谭说:“只要我们攻下曹操的大营,即使他打败了淳于琼,也没有退路了。”于是,他命令大将张郃、高览率兵加紧攻打曹操的官渡大营。张郃看到曹操亲领精兵围攻乌巢,恐怕淳于琼支持不住。他认为乌巢如果有失,大事也就完了。因此,他一再请求袁绍先派兵去救淳于琼。但是,袁绍在郭图的迎合下,仍旧坚持以主力进攻曹操的官渡大营,只派少数骑兵去救乌巢。由于曹操在官渡的营垒很是坚固,战士死守,袁军久攻不下,主力部队反而被吸引住了。这就给曹操拿下乌巢创造了有利条件。当袁绍的增援骑兵临近乌巢的时候,曹操的部下慌忙向他报告说:“敌人援军就要到了,我们快分一部分军队去抵挡吧!”当时,正是能否攻下乌巢,决定胜负大局的紧要关头。因此,曹操严厉命令部下说:“等敌人到了我们背后,再来报告!”在曹操坚决果断的指挥下,不但击溃了袁军的增援部队,而且攻下了袁军营屯,杀死了淳于琼。袁军的一万多车粮谷也被烧得一干二净。
淳于琼战败被杀的消息传到官渡前线,张郃看到大势已去,失去了斗志。他同高览把全部攻城器械烧掉,一道到曹营去投降了。袁军粮屯被烧,军心已经动摇。这回又传来了主将投降的消息,更加慌乱,袁军一下子全都溃散了。曹操乘势领兵出击,袁军大败。袁绍和袁谭只率领着八百名亲兵逃回黄河以北。曹操缴获了袁军丢下的全部军用物资和珍宝财物,并坑杀了投降过来的许多袁军士兵。在这一次战争里,袁绍的主力差不多全部被歼灭了。
袁绍经不起这样的惨败。他又气又急,得了重病。公元202年5月,袁绍病死了。他的几个儿子争权夺位,最后竟至互相攻杀起来,结果都被曹操各个击破。公元206年,曹操彻底消灭了袁氏的残余力量,全部控制了过去为袁绍所占据的地盘。