)
本人也是在自學過程主要目的也是記錄學習過程有些地方做的不太好都是按照自己理解進行講解的不專業歡迎大家指出問題今天學到整數溢出了所以就來練練這種題但是不知道今天為啥buuctf里沒辦法下載文件了所以就在BugkuCTF找了一道題來做此處我將文件命名為easy_intchecksec easy_int 查看一下保護機制可以看到這是一個64-bit的文件只有NX保護開啟了將文件拖入ida64按F5將匯編代碼轉換成c語言代碼得到我們可以看到此處讓我們輸入一個數NUM如果NUM0并且NUM取相反數后仍然小于0就可以進入vuln()函數。NUM是一個int型取值[-2**31,2**31-1]所以如果我們讓NUM -2147483648那NUM -NUM → -(-2147483648) 發生溢出32位int無法表達 2147483648溢出后結果依然是 -2147483648這樣我們就可以進入vuln()可以看到vuln()里存在明顯的 read(0LL, v2, 256LL)棧溢出我們利用這個將返回地址覆蓋成我們的ROP鏈回到虛擬機ROPgadget --binary easy_int --only pop|ret得到pop_rdi_ret 0x401343ret_addr 0x40101agdb easy_intb *0x4011e4在read處下斷點r-2147483648nAAAAAAAAstack 24可以看到我們輸入的數據距離rbp0x30-0x10)0x20字節再加上0x8字節至return addressqnano exp.pybin_sh是在ida里得到的按shiftF12雙擊/bin/sh得到第一次send發生整數溢出第二次send發生棧溢出構造ROP鏈保存退出python3 exp.pycat flag得到flagflag{3f4fa6b09422e4be88ebc33ac9e3500b}此題完