# Canary checksec  有開啟NX及Canary 使用IDA觀察main  進入vuln()  v3就是canary,會在函數開始時寫在stack的尾端,並在return的時候檢查是否改變,用意是避免stack overflow導致return address遭竄改。 想要繞過canary保護有兩種方式,如果寫入的stack位址在canary之後,可以直接寫return address,但如果在canary之前,就必須先leak出canary的值,並在寫入時將正確的值寫到正確的位置 中間的for迴圈會執行兩次,會寫入buf最多0x200的長度,再印出buf 這邊要注意,read跟printf都會被\x00截斷,所以要寫入"適當"長度的字串才能leak出canary buf長度為104,後方依序為canary、rbp、return address 以104個a為payload送出,進入dbg觀察  canary第一位是\x00,所以如果只塞104,會印不出canary leak出canary後,透過第二次的read寫入payload p.sendline(b"b"*104+p64(canary)+p64(rbp)+p64(elf.symbols['getshell']))
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up