大明兵部尚書於謙派兵迎擊瓦剌軍於彰義門,打敗也先部隊先鋒,奪回土木之役被俘明軍一千多人。同時於謙又派人率兵夜襲,以疲憊敵軍。
十月十三日,瓦剌軍趁風雨大作,進攻德勝門。於謙命大將石亨在城外民房內埋伏好軍隊,然後派遣小股騎兵佯敗誘敵。也先果然中計,親率大批部隊窮追不舍。等也先軍進入埋伏圈後,於謙一聲令下,明軍開始反擊,神機營火器齊發,火箭弓弩多如飛蝗般地射向敵軍,明軍前後夾擊,也先部隊大敗而歸。也先的弟弟孛羅、平章卯那孩等將領中炮身亡,瓦剌軍受到很大打擊。
也先發覺明軍主力在德勝門,便集中力量轉攻西直門。大明都督孫鏜率軍迎戰,打敗也先的先頭部隊。由於也先不斷增兵圍攻孫鏜,孫鏜力戰不支,退至城下。此時,把守城頭的給事中程信,嚴令不準開城。同時,命城上守軍發射火炮、火箭轟擊瓦剌軍。大明軍隊又從彰義門、德勝門抽兵增援,終於打退了瓦剌軍的進攻。
十月十四日,瓦剌軍又改攻彰義門。於謙命守軍將城外的街巷堵塞,在重要的地帶埋伏好火銃手、短槍手,又派兵在彰義門外迎戰。明軍前隊用火器轟擊敵軍,後隊由弓弩壓陣跟入,擊退了瓦剌軍的進攻。
竇如海所在的神機營右哨軍就負責把守彰義門。在發射火器擊敗瓦剌軍一波接一波的進攻後,竇如海下意識地摸摸胸前,那裏安放著萬貞兒送給他的平安符。
彰義門守住後,景泰帝所派監軍太監率數百騎兵衝擊敵陣去搶功,使明軍陣勢陷入混亂。瓦剌軍乘勢反擊,追到德勝門外。在萬分危急關頭,當地百姓紛紛登上房頂,以磚石迎戰瓦剌軍。於謙派出的援軍也及時趕到,打退了瓦剌軍的反撲。
隨後瓦剌軍又轉戰至西直門進攻明軍,也被明軍擊退。瓦剌軍不甘失敗,又在彰義門組織進攻。明軍佯裝失利,瓦剌軍追到土城,被潛伏在民居內的明軍火槍手阻擊,死傷無數,進退不得。
也先在進攻京師的過程中,到處遭到大明軍民的抵抗和不斷襲擊。各地的百姓自發組織起來,抗擊瓦剌軍的掠奪。北方邊陲重鎮的守兵,也抱著與城共存亡的決心,誓死保衛國土。
也先進攻京師各門屢次遭到失敗,中路軍在居庸關的進攻也受挫,並獲悉大明各路援軍即將到達。也先唯恐後路被切斷,便於十五日夜率一部人馬,挾持正統皇帝由京師良鄉向紫荊關撤退。
兵部尚書於謙發現也先軍隊正在撤退,即命右都督石亨等集中火炮轟擊也先軍營,炸死瓦剌軍一萬餘人。瓦剌軍在撤退的路上,一路燒殺搶掠,掠奪了許多物資和人口。而明軍分路追擊,石亨大破瓦剌軍於清風店,範廣在固安打敗瓦剌軍。也先一路狂逃,十月十七日,撤出紫荊關,不久退往關外。東路的瓦剌脫脫不花軍,聞得中路、西路已敗,亦立即撤退,並於十月二十日單獨遣使進貢,來北京議和。此時關內塞北皆是天寒地凍,不利於瓦剌軍隊揮師行動,加上京師外圍大明守軍的奮力抵抗,到十一月八日,瓦剌軍完全退出塞外,京師解嚴。至此,大明軍隊取得了京師保衛戰的勝利。
萬貞兒聽前廷隨景泰帝上朝的太監們說,這一段日子前方戰事吃緊,皇上和兩宮太後、皇後都夜不成寐,時刻關注著前線戰事的瞬息變化。萬貞兒關心這些戰況最根本的一個原因是:她心裏很擔心竇如海的安危,所以注意打聽每一次戰役的勝敗情況和細節,希望從中可以窺探出竇如海所在神機營的準確消息。
乾清宮的首領太監成敬取笑她說:“想不到貞兒姑娘一介女流,也對軍隊和戰事這麼感興趣啊,可以和花木蘭、梁紅玉、紅拂女相比了。”
萬貞兒一聽,顯得很羞赧,說:“成公公見笑了。貞兒就是一個卑微的宮女而已,雖不懂得國家大事,但也曉得,京師是我們的棲身之本,京師一旦有不測,傾巢之下安有完卵?所以貞兒自然是盼著我們大明的軍隊打勝仗的,也免得我們普通百姓流離失所,飽受戰亂之苦了。”