既然是記錄學習歷程,我覺得還是從頭開始吧
我剛開始學的時候就苦於找不到學習資源,找到了又看不懂的崩潰處境
好吧,是我不會正確上網+本人又菜又擺的緣故
一般是從比賽官方下載附件
下載到虛擬機器 開啟terminal——checksec 檢視保護機制
(拖進IDA/利用GDB,然後......此處省略腦子)
編寫指令碼(用python)
執行exp.py—>ls—>cat flag
Linux系統命令(在虛擬機器中使用)
nc——遠端
ls——檢視目錄下檔案
cat flag——獲得flag
cd——開啟檔案
touch 檔名——建立檔案
vim——編輯
chmod +x ./檔名 ~或~chmod 777 ./檔名——給檔案賦許可權
python 指令碼名.py——執行指令碼
rm -rf 檔名——刪除檔案
IDA使用
- Tab鍵從C語言和彙編之間切換
- f5從彙編到C語言
- 單擊函式+按n——重新命名函式(或者右鍵rename)
- Options->General->Disassembly->Line Prefixes——看地址
- shift+f12——檢視字串,一般利用它看看有沒有後門函式,\bin\sh之類的東西
pwntools
from pown import* //呼叫pwntools
p=p.process("檔名") //本地執行
p=remote("ip",port)//打遠端
p.send()傳送訊息,訊息不存在換行符
p.sendafter("")//在讀到“”之後傳送
p.sendline()——傳送資訊後換行
p.recvline()接收並等待提示訊息
p.interactive:進入互動模式,最後寫
p.recvuntil(字串):接收並等待提示訊息
gdb.attach(p, ’b * 0xfa’):啟動gdb
p64、p32——根據設定的context選擇小端法或大端法對數字進行編碼
彙編
GDB除錯
- gdb 檔名 進入 pwndbg 動態除錯
- break 函式名 或 break 地址值 或 break C語言行號 設斷點
- run/r——執行程式 next 步過 step 步進
- stack 整數 檢視多少棧
- vmmap 顯示虛擬記憶體空間的分佈
- info b 檢視當前的斷點 d
刪除某一個斷點 - s 進入函式
- c (continue )讓程式繼續執行
- p &printf 檢視 printf 函式的真實地址
- x/10wx 地址 檢視該地址後 10 個記憶體單元的內容
- xinfo 地址 檢視該地址資訊,包括偏移等
保護機制
https://www.cnblogs.com/wintrysec/p/10616856.html