就当作自己浅学这个,阿巴阿巴,废物的一天
shellcode特点
-
可以直接在内存中运行,不需要一个完整的pe结构,简单来说,内存能执行就能运行,没有啥依赖的“生存环境”
-
没有标准pe头(pe头里面有相应的函数名词地址)
-
shellcode不能静态(就是不能存在磁盘里,就比如exe啥的)
简单来说,这个就是一个无意义的变量。以下是利用msf生成了一个shellcode
它就是一个变量!!!
既然是一个变量,肯定要运行,但是没有完整的pe头,不能直接像exe这种程序直接运行,所以需要一个加载器!!!
加载器是怎么做一个加载的?
简单来说:就是将数据编程代码的过程就是加载器的过程
还是以上的shellcode,本地生成的,用的是Visual Studio
VirtualAlloc:申请一个虚拟地址的空间,可以说为虚拟空间到物理空间的映射,简单来说,在虚拟空间操作,物理空间就会自动的分配物理地址。
在这里也就是利用这个参考物“虚拟空间”,设置内容,属性。
-
设置一个指针类型的,也可以是别的,这里设置成NULL,这样系统会自动的去分配一个空间区域。
-
设置内容长度,这里是利用了一个shellcode的变量,c++就是sizeof(变量名)来计算一个长度/大小(如果是python的话就是len)。
-
就是一个类型属性,主要是内存分配的类型属性,可以去百度的,这里设置了两个值,去了解一下。
-
设置保护属性,去理解成文件属性也行,但这里的属性是内存属性,一般都是设置成可读可写可执行也就是page_executr_readwrite.
这样就是设置好虚拟地址空间的内容属性
学习就是让人劳累啊
rtlmovememory函数作用就是将源内存块的内容复制到目的内存块。
rtlmovememory(目的内存块,源内存块,长度)
还不懂上网百度
这时候这个shellcode就已经可以执行了。
接下来就直接去线程运行就行了
这里大致写了一个线程运行(基础知识:程序运行起来会在本地起一个进程,一个进程会有很多的线程。)
总结
ok,以上就是一个简单基础的加载器,原理都差不多,内容---->执行。
运行本地的shellcode,成功使用上线
果然还是适合基础玩家,总的来说,shellcode要去内存中执行.....阿巴阿巴