第一天
工具: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']); ?>)因为比较简单,被称为“一句话木马”
(网站后门起到控制整个网站的作用)
问题:
1.当你水平越来越高的时候,你的后门太多了不好管理
2.后门的操作内容比较繁杂,是否可以有工作进行快捷管理
方法:三款工具
webshell利用与管理工具:
(1)蚁剑 —— 师承中国菜刀
(2)冰蝎 —— rebeyond 他独创webshell加密机制——webshell —— 用Java写的要jdk
(3)哥斯拉——冰蝎类似
payload:比如webshell是一个脚本,那么他的源码就是payload
例:将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
shellcode是payload的一种,更多出现在远程控制木马里面(机器码 python/c)
2.几点注意
POC是用来证明漏洞存在的,EXP是用来利用漏洞的,两者通常不是一类,或者说,POC通常是无害的,Exp通常是有害的,有了POC,才有EXP。
Payload有很多种,它可以是Shellcode,也可以直接是一段系统命令。同一个Payload可以用于多个漏洞,但每个漏洞都有其自己的
EXP,也就是说不存在通用的EXP。
Shellcode也有很多种,包括正向的,反向的,甚至meterpreter。
Shellcode与Shellshcok不是一个,Shellshock特指14年发现的Shellshock漏洞。