第二篇依然从简单入手,Stitch C2框架(小pupy) 主要使用python2实现,支持Win、Linux、Mac三种平台
0x01 目录结构
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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| │ main.py # 启动Stitch C2服务器 │ ├─Application(该文件夹内文件,按下方排序由上至下存在依赖关系,数字为阅读顺序) │ │ stitch_utils.py # aes加解密、路径处理、进度条显示、字体颜色、平台判别、命令执行等 1 │ │ stitch_pyld_config.py # 配置读取、设置、保存 2 │ │ stitch_help.py # 帮助信息 3 │ │ stitch_lib.py # 命令处理(主要包含在一个class stitch_commands_library中)4 │ │ stitch_gen.py # payload生成 5 (配合payload_codes.py) │ │ stitch_lnxshell.py # 三个模块:执行、补全、帮助 6 │ │ stitch_osxshell.py # 四个模块:执行、osx特有、补全、帮助 6 │ │ stitch_winshell.py # 四个模块:执行、win特有、补全、帮助 6 │ │ stitch_cmd.py # 三个模块:执行、补全、帮助(引入所有库)7 │ │ │ └─Stitch_Vars │ globals.py # 随机密钥生成,枚举值、路径、日志初始化 │ makeself.py # 调用makeself库 │ nsis.py # 脚本安装系统 │ payload_code.py # 很多写好的函数字符串,后期调用组装成payload │ payload_setup.py # payload list设置icon、name、description │ ├─Cleaner │ st_cleaner.py # 清除计划任务和防火墙规则 │ ├─Configuration │ │ pyxhook.py # 键盘记录 │ │ vidcap.pyd │ │ │ ├─creddump # 凭据dump库 │ │ addrspace.py │ │ COPYING │ │ hashdump.py │ │ newobj.py │ │ obj.py │ │ rawreg.py │ │ types.py │ │ │ └─mss # 跨平台python截屏库 │ │ base.py │ │ darwin.py │ │ exception.py │ │ factory.py │ │ LICENSE │ │ linux.py │ │ windows.py │ │ │ └─linux │ │ build.sh │ │ mss.c │ ├─32 │ │ libmss.so │ └─64 │ libmss.so │ ├─Elevation │ elevate.py # 提权脚本(并不是真正提权,仅仅是将文件夹内下载器加入防火墙白名单,访问时间设定同系统程序一样) │ elevatepy2exe.py # 提权脚本转成exe ├─Icons # 图标 ├─PyLib # python库,作者实现的各种基础操作(如:关闭杀软、文件下载、注册表操作等) └─Tools │ osx_dev_setup.sh │ passwords.txt # 字典 ├─ImageSnap-v0.2.5 # 基于命令行的抓屏工具 └─makeself # 打包工具
|
0x02 主要的class
linux shell
win shell
osx shell
上述的三个类功能基本相同,都是按照以下三个部分来进行编码
do section
- 调用st_lib中实际功能,如:命令执行、文件传输、关闭杀软等
- win、osx由于平台原因,存在一些特有函数,比如查询驱动、开启关闭RDP、亮屏息屏等
complete section
help section
0x03 主要函数模块及关系
- stitch主模块是cmd,可以通过config模块读取和设置配置,根据不同的平台判断使用其平台的shell模块。
- shell模块依托于lib和help,lib提供功能函数支持(包括第三方库调用),help提供帮助支持,此二者又会使用到util工具函数,进行aes加解密、路径处理、进度条显示、字体颜色、平台判别、命令执行等处理。(util无处不在)
- payload_genearate模块,负责生成payload,主要通过写好的函数字符串拼接,形成python函数文本后,继续打包来完成任务
0x04 功能设计要点
下面是作者编写的PyLib,主要就是一个功能函数的集合,对stitch lib提供支持。其中主要的做法有两种,一种是使用系统shell或者python原生的ctypes、os、sys、subprocess、_winreg等库完成系统调用实现功能,另一种是使用powershell进行命令处理。
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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| askpass.py avkiller.py # taskkill反病毒软件,鸡肋 avscan_posix.py # 通过进程名称检测反病毒软件 avscan_win.py # 从注册表中找到对应的反病毒软件 cat.py cd.py # 切换当前目录 chromedump.py clearev.py # 使用wevtutil清除系统日志 crackpassword.py # 密码爆破 depscan.py # wmic OS get DataExecutionPrevention_SupportPolicy
displayoff.py # 息屏 displayon.py # 亮屏 download.py drive_finder.py
# 修改文件访问、创建、修改时间 editAccessed.py editCreation.py editModified.py
disableRDP.py disableUAC.py disableWinDef.py enableRDP.py enableUAC.py enableWinDef.py
environment.py # 获取环境变量,os.environ fileinfo.py # 获取文件夹大小,a、c、m三个时间
fwallow.py # 防火墙添加规则,允许程序通过防火墙 fwscan.py # 查看advfirewall状态 fwstatus.py # 显示防火墙状态
get_path.py hashdump.py
# 使用attrib修改文件属性,隐藏、显示文件 hide.py unhide.py
hostsremove.py # 删除指定host hostsupdate.py # 添加host
# KeyLogger控制 (主要操作在keylogger类中) kl_dump.py kl_start.py kl_status.py kl_stop.py freeze_start.py freeze_status.py freeze_stop.py
location.py # 获取当前地理位置 lockscreen.py # 锁屏 ctypes.windll.user32.LockWorkStation popup.py # scanReg.py screenshot.py ssh.py sudo_cmd.py sysinfo.py # 获取当前时间、操作系统、架构、用户、权限、IP、网络名 uascan.py upload.py vmscan.py webcamList.py webcamSnap.py wifikeys.py # 查看wifi明文密码
|
0x05 关键语法及技术
- tab补全功能
- ase加解密
- 各种库的使用:键鼠hook
- 屏幕抓取
- 使用struct库接收结构体,方式是先接收一个int类型的数据长度,之后按照长度来接受数据
0x06 总结
- 总体来说stitch这工具很全,而且做到了跨平台,架构是类似于msf的组件模式加上server+client。各种小细节都封装成了对应的模块,所以看起来分工明确,模块之间的交互也多,缺点就是略糙。作者在发现pupy的存在后就不做开发了,更别说持续打磨,但是红队工具的开发就是需要速度,想像cs那样一个专业红队来开发维护还是少数,一个人的力量依旧有限。
- 两种方式进行传输数据长度处理,一种是对于文件和命令的接收均有各自的结束符,另一种是先接受长度然后按照长度接收对应大小的数据
- 不同功能组件写成单个py文件方便后期扩展,同时也有利于打包,用户可以挑选想要的功能生成exe后发送到client
- 第三方库的大量使用提高开发效率
0x07 参考资料
[1] awesome rat
[2] MITRE ATT&CK