PWN1
這題沒什麼好說的,直接nc連接配接,然後ls擷取檔案目錄,然後貓flag就可以得到flag了。
需要注意的是因為這題是新手入坑題,是以直接把flag放在flag檔案下,一般情況下不排除其他檔案有flag。
槽一句,雖然這題簡單到不行,但是我也是看了别人的部落格之後才發現自己有多無知,這麼基礎的東西都不會。
PWN2
這道題是有給檔案的,那麼我們先把檔案下載下傳下來分别儲存到Ubuntu和主機。
首先我們嘗試一下故技重施,nc一下看看會怎麼樣。
發現被這個程式嘲諷了,顯然這題不是那麼簡單可以做的。這個時候我們就要用上我們下載下傳好的工具了。
首先在Linux終端上checksec一下這個程式。
發現這個程式是64位的,那麼我們将它拖入對應的ida中,然後找到main函數按下F5打開新世界。
通過觀察這個程式的邏輯我們發現s這個變量申請了0x30個位元組,但是下面read函數讀取了s這個變量0x100個位元組,是以這玩意是妥妥的棧溢出。
然後很巧的我們又發現了就在main函數下面有一個get_shell_函數,那我們肯定控制不住自己的手輕按兩下下去發現這個函數的位址是0x400751,先把這個位址記下來。
下面就是在gdb中打開pwn2,然後建立随機字元,并運作。
發現RBP段的字元被填充為bAA1AAGA,再利用這個字元計算出偏移量。
然後根據偏移量寫出腳本就可以了,下面是我仿照其他大佬寫的腳本。
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_的位址偏移量,算出來之後就直接溢出到後門函數就行了。
對于個人來說,還需要加強對于堆棧的了解,還有編寫腳本的相關知識。目前還是缺少做題經驗,即使是對于這類簡單問題依然沒有思路,就是題目做得少的緣故,總結一下就是我還是萌新。
這是我的第一篇自己真正想寫并寫出來的部落格,之前一直都有想要培養自己寫部落格的習慣,但是都是因為沒有好好學習總結是以一直不知道要寫什麼。那麼就以這篇部落格作為我的秃頭之路的裡程碑吧!