首先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寄存器的棧中所佔的字節數