攻防世界cgpwn2

首先checksec,之後放入IDA中

在這裏插入圖片描述
點進hello
在這裏插入圖片描述發現gets()函數可能會存在棧溢出,然後我們點進name
在這裏插入圖片描述發現 name 地址是固定的,那我們可以它寫入 bin/sh ,接着看能不能找到system
在這裏插入圖片描述找到啦!所以這個題目的思路是:通過棧溢出漏洞,調用system函數,同時在name中寫入"/bin/sh",把參數地址設置爲name的首地址,就可以getshell了!
在這裏插入圖片描述

gets() 有一個非常大的缺陷,即它不檢查預留存儲區是否能夠容納實際輸入的數據,換句話說,如果輸入的字符數目大於數組的長度,gets()無法檢測到這個問題,就會發生內存越界。
先反編譯,找到棧溢出漏洞的位置,在plt表中發現system()函數,但是沒有‘/bin/sh’的影子,我們可以將/bin/sh傳入name中,然後將其當作參數傳入。實質是構造一個僞棧幀(必要的東西:函數地址,返回地址(隨便寫),參數地址)。要注意的是padding填充的時候,要根據程序是多少位的,來加上e(r)bp寄存器的棧中所佔的字節數

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章