【PWN】pwn入門

0x01 前言

今天pwnable.kr不知道什么原因網(wǎng)站掛掉了,pwnable.tw對(duì)于我又太難,每題做的我很難過(guò),聽(tīng)從小伙伴的建議,決定從ctf的pwn入手。

0x02 工具

  1. file pwn0           //查看文件格式,i386,x86_64等

  2. objdump -S pwn0 | less   //查看匯編代碼,查看相關(guān)的函數(shù)信息。

  3. 轉(zhuǎn)到IDA F5看看偽代碼

  4. edb,類似windows上的OD,不過(guò)小細(xì)節(jié)上還是不行,操作不方便。

  5. gdb+peda
    b main 下斷點(diǎn)
    p system 查看函數(shù)位置
    ni = od F8;si = od F7 一個(gè)next,一個(gè)step
    x 查看任意位置內(nèi)存。x \10xw %sp 查看棧的值。
    layout asm|reg 分屏查看匯編代碼|寄存器狀態(tài)

  6. windows subsystem of linux //目前可以用來(lái)objdump,編些小代碼,腳本。

  7. pwntools

0x03 Linux匯編

Linux和Unix使用的是AT&T風(fēng)格的匯編,一開(kāi)始不太適應(yīng)。而windows使用了Intel風(fēng)格的匯編。從外形上看區(qū)別如下

  1. 操作賦值方向。
AT&T:mov 1,eax  

Intel:mov %eax,$1

2.前綴。

AT&T:mov 1,eax  

Intel:mov %eax,$1

3.后綴。

AT&T:movb %al,%bl         //指令后可跟b(byte),w(word=2b),l(long=4b)表示字節(jié)數(shù)。此外還有其他更  復(fù)雜的擴(kuò)展。

此外,對(duì)于ELF文件,windows下IDA反編譯的匯編代碼是Intel風(fēng)格的,Linux下objdump是AT&T風(fēng)格的。

函數(shù)傳參的方式,在i386都是壓棧傳參數(shù)的;到了x64,推薦使用寄存器傳參。

0x04 shellcode

一些簡(jiǎn)單的題直接跳轉(zhuǎn)到目標(biāo)函數(shù),就可以讀取flag文件了。這類題覆蓋返回地址即可。

其他題,需要執(zhí)行指令拿shell,即編寫shellcode。

當(dāng)獲取任意地址讀寫能力時(shí),即可寫入shellcode,再執(zhí)行此處的代碼即可。

shellcode可以讀取flag,更一般的可以用pwntools中的shellcraft。

以上內(nèi)容參考http://www.cnblogs.com/helica/p/6798915.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容