1. 程式人生 > >cgctf when_did_you_born 棧溢位簡單利用

cgctf when_did_you_born 棧溢位簡單利用

拿到題目,先checksec下,看下防護措施:
在這裡插入圖片描述
沒有開啟PIE。
直接放到IDA裡看下:
在這裡插入圖片描述
有些變數名為了方便看,我已經修改過了。圖中箭頭處即是溢位點。
分析下
第一次輸入overflowme,如果等於1926就會退出,但是想要拿到flag,就需要overflowme的值為1926,那就很明顯了,第一次輸入的時候隨便輸個數只要不是1926就行,第二次輸入v4 這個陣列的時候,利用緩衝區溢位,將overflowme這個變數的值給覆蓋成1926就行了,將1926轉化為16進製為0x786。
通過IDA看下陣列和overflow這個變數之間的距離:
在這裡插入圖片描述
0x20-0x18,得到距離是8個位元組。只要填充8個位元組的垃圾資料,再將其後4個位元組的空間覆蓋為0x00000786就可以了。此時棧空間如下圖:(注意little-endian)
在這裡插入圖片描述


寫下exp:
在這裡插入圖片描述
執行該指令碼即可拿到shell。