(格式化字符串漏洞).fini.array劫持,使程序流程循环进行
生活随笔
收集整理的這篇文章主要介紹了
(格式化字符串漏洞).fini.array劫持,使程序流程循环进行
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
用gdb調試main函數的時候,不難發現main的返回地址是__libc_start_main也就是說main并不是程序真正開始的地方,__libc_start_main的執行是在main的前面。
可以發現__libc_start_main函數的參數中,有3個是函數指針:
其中__libc_csu_fini是在main執行完畢后執行的
簡單地說,在main函數后會調用.init段代碼和.init_array段的函數數組中每一個函
數指針。而我們的目標就是修改.fini_array數組的第一個元素為start。需要注意的是,這個數組的內容在再次從start開始執行后又會被修改,且程序可讀取的字節數有限,因此需要一次性修改兩個地址并且合理調整payload。
程序結束時會調用_fini_array指向的函數指針,所以我們將其修改為main的地址就會循環調用了
利用過程
讓main函數多執行幾次,這樣就可以控制足夠大的內存空間,往里面布置ROP鏈
ROP攻擊的思路:
利用任意寫,劫持fini_array
循環執行main,利用任意寫,將ROP鏈布置到fini_array+0x10
終止循環,并將棧遷移到fini_array+0x10執行ROP鏈
劫持fini_array+循環
總結
以上是生活随笔為你收集整理的(格式化字符串漏洞).fini.array劫持,使程序流程循环进行的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BUUCTF(pwn)护网杯_2018_
- 下一篇: BUUCTF(pwn)inndy_ech