ctf pwn 個人經驗記錄
阿新 • • 發佈:2019-02-06
前言
記錄一下自己在做pwn的過程當中學到的一些東西,以前不知道的東西等等,碰到的坑也會記錄在
這裡,主要目的是幫助自己記錄一下經驗。
其實每一道題基本上能學到的新東西是有限的,記錄下來避免什麼時候想不起來。
順序比較亂,基本上根據我做題的順序定的,比較隨意。
pwn
other place(not from ctf)
- 多用gdb除錯,有思路可以先寫出來除錯一下看看效果再說
- 遇見pie考慮寫malloc_hook,free_hook等,這些與malloc_state相關,也就是需要main_arena
- smallbin, largebin等非fastbin在連結串列為空時指向自己,也就是指向main_arena中,可以用來洩漏main_arena,從而得到libc
hitcon-2016
babyheap
- ubuntu 16.04後scanf的緩衝區會使用heap,超過大小的就會放入heap,接下來的scanf會從剛才
heap中的緩衝區取 - 使用read而不是readline的時候很容易因為讀取的內容不夠(比如最多本來可以讀100個,但是我這邊
只發了20個位元組的時候)導致後面的內容被接上去,也就是兩次send在遠端只進行了一次read,而本來
想要的是兩次read。方法是通過sleep或者raw_input使得不連起來發,隔開就可以了。 - 漏洞也可能位於輸入輸出函式
ichunqiu427-2017
smallest
- 使用srop可以用來更改暫存器的值,從而使得能夠控制更多暫存器的值
- 環境變數位於棧頂,其中的字串也位於棧中,可以用來獲取大致的棧位置(比如需要可寫地址的時候)
awd-pwn2
- awd先補再寫exp
bctf-2017
boj
- system函式的引數如果可控,可以通過構造檔名來進行命令注入
babyuse
- choice等輸入可能位於棧上,atoi的時候只需要使用空格隔開,可以通過後面的內容控制引數
njctf
vegas
- c語言的rand函式是可以預測的,只要和遠端時間相同,1秒內同時開始rand的內容是一樣的
0ctf-2017
EasiestPrintf
- IO結構體(stdin, stdout, stderr)在程式關閉的時候會呼叫一些奇怪的函式,雖然不知道是哪個,但是反正可以試出來。。
那麼就是可以通過修改IO結構體的虛表,來控制執行流,可以作為能拿到那三個特殊IO結構體位置
的時候,面對PIE的時候的特殊方案。