關羽斬了顏良、文丑,這兩場仗打下來,袁軍將士被打得垂頭喪氣。但是袁紹不肯罷休,一定要追擊曹操。監軍沮授說:「我們人儘管多,可沒像曹軍那麼勇猛;曹軍雖然勇猛,但是糧食沒有我們多。所以我們還是堅守在這裡,等曹軍糧草用完了,他們自然就不戰自敗了。」
袁紹根本不聽沮授勸告,命令將士繼續進軍,一直趕到官渡,才紮下營寨。曹操的人馬也早已回到官渡,佈置好陣勢,堅守營壘。衰紹看到曹軍守住營壘,就吩咐兵士在曹營外面堆起土山、築起高台,讓兵士們在高台上居高臨下向曹營射箭;曹軍只得用盾牌遮住身子,在軍營裡走動。
就這樣,雙方在官渡相持了一個多月。日子一久,曹軍糧食越來越少。但是,袁紹的軍糧卻從鄴城源源運來。
袁紹派大將淳於瓊帶領l萬人馬送運軍糧,並把大批軍糧囤積在離官渡40里的烏巢。
袁紹的謀士參謀許攸探聽到曹操缺糧的情報,向袁紹獻計,勸袁紹派出一小支兵馬,繞過官渡,偷襲許都,袁紹很冷淡地說:「不行,我要先打敗曹操。」
許攸還想勸他,正好有人從鄴城送給袁紹一封信,說許攸家裡的人在那裡犯了法,已經被當地官員逮了起來。袁紹看了信,把許攸狠狠地罵了一通。許攸又氣又恨,想起曹操是他的老朋友,就連夜逃出袁營,投奔曹操。
曹操在大營裡剛脫下靴子想睡,聽說許攸來投降他,高興得光著腳板跑出來。他拍手歡迎許攸,說:「哎呀,您肯來。我的大事就有希望了。」
許攸坐下來說:「袁紹來勢很猛,您打算怎麼對付他?現在您的糧食還有多少?」曹操說:「還可以支持一年。」許攸冷冷一笑,說:「沒有那麼多吧!」曹操改口說:「對,只能支持半年了。」許攸裝出生氣的樣子說:「您難道不想打敗袁紹嗎?為什麼在老朋友面前還說假話!」
曹操只好實說,軍營裡的糧食,只能維持一個月,許攸說:「我知道您的情況很危險,特地來給您報個信。現在袁紹有l萬多車糧食、軍械,全都放在烏巢。淳於瓊的防備很鬆,您只要帶一支輕騎兵去襲擊,把他的糧草全部燒光,不出三天,他就不戰自敗了。
曹操得到了這個重要情報,立刻把曹洪等人找來,吩咐他們守好官渡大營,自己帶領5000騎兵,連夜向烏巢進發。他們打著袁軍的旗號,沿路遇到袁軍的崗哨查問,就說是袁紹派去增援烏巢的。袁軍的崗哨沒有懷疑,就放他們過去了。曹軍到了烏巢,就圍住烏巢糧屯,放起大火,把1萬車糧草,燒得一乾二淨。烏巢的守將淳於瓊匆匆應戰,也被曹軍殺掉。
正在官渡的袁軍將士聽說烏巢起火,都諒慌失措。袁紹手下的大將張郃、高覽帶兵投降。曹軍乘勢猛攻,袁軍四下逃散。