【CTF】AWDP总结(Web)

【CTF】AWDP总结(Web)

什么是adwp?

AWDP是一种综合考核参赛团队攻击、防御技术能力、即时策略的攻防兼备比赛模式。每个参赛队互为攻击方和防守方,充分体现比赛的实战性、实时性和对抗性,对参赛队的渗透能力和防护能力进行综合全面的考量。

比赛中,每支队伍拥有相同配置的虚拟靶机,参赛队员需对平台中的GameBox发起攻击,并向平台提交正确的flag(证明自己具备对该题的攻击能力);在此期间,由平台以轮次制的方式向参赛队伍的靶机发起攻击,检查其他选手的漏洞是否修补成功,若修补成功则认为参赛队伍具备该漏洞的防御能力。

计分规则如下:比赛过程中每支参赛队拥有相同的起始分数(10000分),截止比赛结束时的分数,作为各队伍比赛得分,由高至低在成绩榜排列。

参赛队伍可通过以下两种方式获取积分:

1)攻克:提交GameBox中存放的flag;

2)防御:成功防御平台对各个靶机的攻击,且服务无异常。

同时也会通过以下两种方式失分:

1)服务异常:队伍无法维护某GameBox的正常服务,平台检查不通过;

2)违规:因违反比赛纪律及发现违规等行为被裁判判罚扣分。

六种状态

–已攻击,说明这个题已经打下来了,交了flag,就是攻击成功。攻击的过程其实就是普通的ctf。有的题目会先给你一切源码让你来打,这就是白盒了,但是白盒还是很多题防御成功但打不出flag哈哈。有的题你只有黑盒打出flag来了,攻击成功才会给你源码,让你来防御。

–已防御,说明你拿到源码之后,把这个题的漏洞通过修改源码,已经补完了,裁判的poc打不动这个题了,就算是防御成功。

–防御异常,说明防御的过程中,你把网站应该提供的服务给搞没了,可能是防御过度,也可能是你把关键的功能删掉了。如果防御异常了,一定要第一时间重置环境,要不然等到一个轮次结束之后会扣分,扣分就特别伤了。

20210516224841277

防御

赛前准备

1.赛前要做好充分准备,把一些漏洞的waf全部准备好,例如:

function wafrce($str){
	return !preg_match("/openlog|syslog|readlink|symlink|popepassthru|stream_socket_server|scandir|assert|pcntl_exec|fwrite|curl|system|eval|assert|flag|passthru|exec|chroot|chgrp|chown|shell_exec|proc_open|proc_get_status|popen|ini_alter|ini_restore/i", $str);
}

function wafsqli($str){
	return !preg_match("/select|and|\*|\x09|\x0a|\x0b|\x0c|\x0d|\xa0|\x00|\x26|\x7c|or|into|from|where|join|sleexml|extractvalue|+|regex|copy|read|file|create|grand|dir|insert|link|server|drop|=|>|<|;|\"|\'|\^|\|/i", $str);
}

function wafxss($str){
	return !preg_match("/\'|http|\"|\`|cookie|<|>|script/i", $str);
}

这些waf有点简陋,是因为要保证题目的环境不能出问题,题目要提供正常的服务。

这很重要很重要,直接决定能不能很快拿下题目的防御。

2.XFTP

文件上传工具要准备好

下载:

链接:https://pan.baidu.com/s/1eabfwy7b8TlM-0fquWAYxw
提取码:g32d

3.phpstudy等web环境

配置好本地web环境,越方便越好,就是拿到源码之后要很迅速能在自己本地跑起来,不要到了比赛的时候手忙脚乱的,一下子域名出问题一下子数据库出问题。比赛时,时间就是分!!

4.代码审计工具

Seay源代码审计系统之类的。

可以做到辅助作用,不是很重要。

第一时间上waf

对于awdp来说,防御的重要性远远大于攻击,因为是轮次制,每一轮防御成功或者攻击成功都会加对应的分,成功的人越多,每轮加的分就越少,而且分是累计制,**题目分少了,自己之前得到的分不会扣。**所以时间特别重要。有些人题目刚出没5分钟就防御成功了,一个题的分吃了一整天,从第一轮加500到最后一轮加50,累积起来大几千分。

所以我们的策略是,一上来一个题目,先分析是大概什么知识点,是命令执行?sql注入?文件上传?然后第一时间在源代码上加waf

waf的形式不局限于上面展示的例子,过滤关键字,也可以是直接对输入的东西进行长度限制,比如说限制输入执行命令的长度为小于2。就可以达到修补漏洞又不破坏题目环境的目的。不过也要看具体题目,有的题目可能长度低于2就破坏了web服务导致防御失败了。

注意文件上传的路径

这个问题非常重要!!!

防御的时候我们是要把要修补的文件上传到服务器里,替换原来服务器中的文件,所以我们要知道文件具体的路径,但是一般来说题目不会直接给,不同开发语言不同框架的目录也不尽相同。

这个时候就要用到一个小tips:

题给示例:

mv -f explorer.php  /www/html/

我们要替换的文件很有可能不是在根目录下的/www/html,所以这个示例很鸡肋

那就从根目录里面查找:

mv -f explorer.php $(dirname `find / -name 'explorer.php' 2>/dev/null`)/explorer.php

用find命令从根目录查找名为explorer.php的文件,然后返回他的路径名(dirname)

2>/dev/null的作用是避免返回一些错误的信息,比如说查找过程中会返回权限不足等错误。

patch包

patch包的内容组成
首先是存在漏洞的页面,比如index.php或app.py
再次的部署的sh文件,如果是php,就需要替换原题目存在漏洞的php页面,如果是pyhton或者java就得替换文件再重启服务
例子:
php update.sh

#!/bin/bash

cp /index.php /var/www/html/index.php

Python

#!/bin/sh

cp /app.py /app/app.py
ps -ef | grep python | grep -v grep | awk '{print $2}' | xargs kill -9 
cd /app && nohup python app.py  >> /opt/app.log 2>&1 &

Go

#!/bin/bash

kill -9 $(pidof app)
cp ezgo_patch /app
chmod +x /app
/app 2>&1 >/dev/null &

Nodejs

#!/bin/sh

cp server.js /app/server.js
ps -ef | grep node | grep -v grep | awk '{print $2}' | xargs kill -9 
cd /app && nohup node server.js  >> /opt/aa.log 2>&1 &

格式要求:一般会要求tar.gz的形式
打包命令:tar zcvf update.tar.gz send.php update.sh

攻击

攻击就没什么好讲的,就是打ctf,有的题是白盒,有的题你得先打出flag才有源码。

暂时想到的就是这些,打完了这么久了才记录,因为一直考试。

在这致敬一下工作室大佬们带我打awdp!

  • 14
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值