pwn常用工具快捷鍵學習

蟇窳瓨發表於2024-05-29

vim

普通模式
G(普通模式) 來的文字最下方
g+g(普通模式下) 回到文字的開頭
f+目標單詞的首字母(find普通模式) 移動到目標單詞
d(delete) 刪除當前行
u(undo) 撤銷
文字模式
I 從當前行開頭進行輸入
A 當前行文末輸入

ida

F7 單步執行,遇到call或者函式呼叫就進入
F8 單步執行,遇到call或者函式呼叫就跳過
F9 開始除錯一直執行
F2 下一個0xCC的軟體斷點
F4 執行到游標初
U 取消函式,程式碼,資料的定義
C 把位元組碼翻譯為彙編語句
p 定義函式
D 資料長度型別轉化,1/2/4/8
H 數字->16進位制
a (資料)->字串
R 數字->字元(‘120’打了單引號是個字元y,要ask碼轉換)
y 修改資料型別宣告
n 對函式或者變數重新命名(函式名為sub_234875)
g 去往某一個地址
CTRL F7 一直執行
shift +f12 找出所有字串
/ 在反彙編後介面寫註釋,組合語言介面也可用
ctrl+x 檢視函式或變數的交叉引用(透過flag.txt字串找函式)
tab 彙編程式碼與c程式碼視角轉換
ctrl+s 段表資訊
telescope+0x地址 用stack段的形式檢視記憶體中地址資訊
ctrl+t 查詢特定指令和字串

gdb(除錯一定先下斷點)

n 不進入函式的單步執行
s 進入被呼叫(call)函式
finish s步入函式後用會執行完此函式
c 直接執行到下一個斷點。
k(kill) kill當前程序
r(run) 執行程式
gdb+檔案 動態除錯檔案
vmmap gdb檢視rwx
b *0x地址 打斷點
ni 下一條彙編指令
disable b +數字 去掉第幾個斷點
i r 檢視暫存器
set *0x地址=數字 set $暫存器=數字 賦值
u64(io.recvline().strip().ljust(8,b'\0'))
search + “字串” 顯示目info b
info b 檢視當前斷點
bt 檢視函式呼叫棧
info r 檢視所有暫存器的值。
list 檢視原始碼。
vis 檢視堆塊
tel +地址 類似檢視stack資訊的格式

x/[n/u/f] [addr] :檢視任意記憶體位置的值
n:是正整數,表示需要顯示的記憶體單元的個數,即從當前地址向後顯示n個記憶體單元的內容,一個記憶體單元的大小由第三個引數u定義。

f:表示addr指向的記憶體內容的輸出格式,s對應輸出字串,此處需特別注意輸出整型資料的格式:
x 按十六進位制格式顯示變數.
d 按十進位制格式顯示變數。
u 按十進位制格式顯示無符號整型。
o 按八進位制格式顯示變數。
t 按二進位制格式顯示變數。
a 按十六進位制格式顯示變數。
c 按字元格式顯示變數。
f 按浮點數格式顯示變數。

u:就是指以多少個位元組作為一個記憶體單元unit,預設為4。u還可以用被一些字元表示:
如b=1 byte, h=2 bytes,w=4 bytes,g=8 bytes.

addr:表示記憶體地址。

其他工具快捷鍵

快捷鍵 效果
ROPgadget --binary 檔案 --only 'pop|ret' | grep 'eax' 在正常終端下即可
ROPgadget --binary 檔案 --string '/bin/sh' 找字串地址
ROPgadget --binary=動態連結庫 --only 'pop|ret' |grep '' 在庫中找
cyclic(數字) 生成垃圾資料
所求地址名 = elf.plt/(got)/(symbols)/(search位元組序列 (b"名字))["所求地址名"] 在python3下先elf = ELF("")連線檔案
strings 檔名 | grep 字串
objdump -d -M intel ./檔案 | grep 函式名 正常終端下找函式地址
fmtarg 地址 顯示此處是格式化字串函式的第幾個引數
./檔名 執行程式
sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other 共享資料夾
info(f"libc base value: {hex(libc_base)}") 列印
print("stack"+hex(flg)) 列印
seccomp-tools dump ./檔名 檢視函式禁用
gdb.attach(s,"b *0x函式地址\nc") gdb直接定位在目標地址
shellcode編寫 shellcode=shellcraft.open("./flag")
shellcode+=shellcraft.read(3,0xcafe0000+0x100,0x50)
shellcode+=shellcraft.write(1,0xcafe0000+0x100,0x50)
shellcode=asm(shellcode)