本文仅作为技术讨论及分享,严禁用于任何非法用途。
前言
近期在GitHub看到nim一键免杀的项目,遂想测试一下,但是作者并没有提供部署教程,在踩了很多坑之后安装成功。
https://github.com/M-Kings/BypassAv-web
安装步骤
本节是安装步骤的记录,如果仅是想安装部署项目可参考本节
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| cd /root # 下载代码库 git clone https://github.com/M-Kings/BypassAv-web.git
# 起个Ubuntu的docker docker run -itd -p 8001:8000 -v /root/BypassAv-web/:/root/BypassAv-web/ ubuntu
# 进入docker容器,这里的4d是容器id,每次启动容器示例不一样,自己docker ps看一下 docker exec -it 4d bash
# 安装必备组件 apt update apt install python3 python3-pip nim vim wget unzip mingw-w64
# 进入代码所在目录 cd /root/BypassAv-web/ # 创建两个必备目录,作者代码里并没有自动创建 mkdir files mkdir temp
# 作者代码里写了绝对路径,所以要去改一下 # nim/views.py 84行 vim nim/views.py 原代码: yesxor = os.popen('/root/FileService/code/testnim '+shellcode).read() 修改为: yesxor = os.popen(os.path.abspath(os.curdir) + '/code/testnim '+shellcode).read() os.path.abspath(os.curdir)
# 代码内调用该文件,需要赋予执行权限 chmod 755 code/testnim
# 安装nim的依赖库 wget https://codeload.github.com/khchen/winim/zip/refs/heads/master unzip master cd winim-master/ nimble install
# 回到主目录 cd .. python3 manage.py runserver 0.0.0.0:8000
|
排错过程
本节是排错过程,如果有兴趣了解我是如何发现并解决安装过程出现的问题的,敬请阅读。
目录不存在的报错
这个问题手动创建文件夹即可
文件不存在报错
查看代码,把输出打开,并把移除文件的代码注释掉,这样我们就可以手动调试生成的文件
根据后端的报错,发现作者应该是有一处代码写了绝对路径,所以查找关键字发现view.py 84行处写了绝对路径
然后简单修改为相对路径
1 2 3 4 5
| # view 84行 vim nim/views.py yesxor = os.popen('/root/FileService/code/testnim '+shellcode).read() yesxor = os.popen(os.path.abspath(os.curdir) + '/code/testnim '+shellcode).read() os.path.abspath(os.curdir)
|
解决了上述问题,发现web端还是会报错,无法下载文件
本地执行nim编译命令,发现有报错
Google一番发现是nim编译时需要调用mingw32
1
| apt-get install mingw-w64
|
然后再次编译发生如下错误
Google一下,原来是依赖库,根据官方说明安装一下
然后估计是网络不行还是什么问题,实际上会一直卡着,手动安装吧
1 2 3 4 5 6
| apt install wget wget https://codeload.github.com/khchen/winim/zip/refs/heads/master apt install unzip unzip master cd winim-master/ nimble install
|
这个时候再试试它的编译,能成功了
最终效果
安装成功后,使用CS生成shellcode
这里根据作者的说明是生成64位的RAW类型的shellcode
上线成功
本文编写于2021年7月2日,测试virustotal效果如下
测试微步效果如下
进阶:重新编译testnim
阅读了源码,作者使用了testnim对shellcode进行了异或加密,作者提供了testnim的二进制文件它的源码testnim.nim,那么便尝试一下从源码编译testnim
1 2
| cd code/ nim c -o=testnim testnim.nim
|
编译成功且测试运行成功