re009
- 关注
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0x0 背景
首先来了解什么是Awd Plus(或者叫awd+,Break+Fix等等),它分为两个部分,我们现从Break(攻击环节)开始说。
Break(攻击)
各赛队对靶标环境进行预设安全挑战研究与破解,检测出靶标环境中的预设安全挑战或者未预期安全漏洞,攻破靶标环境获取 Flag 进行得分。Break 环节采用动态积分方式(即题目分值随解出队伍数量增加而减少,队伍总分也会随之变化)。Break 允许选手重置靶机,一般最多允许重置 5 次。
Fix(修复)
这个和攻击有点区别,每个比赛修复方式不同,如有些是通过SSH连接主机进行修复,有些则需要编写update.sh(例子:图一)然后上传脚本,通过运行脚本替换文件或删除文件在服务器上进行修复。同样的Fix也是动态积分+允许重置靶机,一般重置五次,上传后一般会实时check(或等待一轮时间),check未修复一般不扣分,只在check点无法正常访问,服务宕机等异常情况扣分(一般不会实时扣分,只会在一轮check过后扣分,所以可以随意进行上传脚本修复的过程,在一轮时间前恢复就可以)
比赛题目
一般只有Web&Pwn
相信看到背景大家也知道awd+和普通的awd有什么区别了,一个是选手之间的斗法,一个是静态攻防(高情商:人机对抗),所以要了解的知识不同,准备的东西也不同,下面我们来进入正题。
0x1 前期准备
由于我是个web手,所以对pwn不熟,我这就不描述pwn了(毕竟pwn大佬们也不会看我这种文章哈哈哈哈哈哈哈,能看的都是来指正我错误的~)
1、考点:
web:JavaScript原型链污染、Go语言(如湖湘杯线下)、SSTI、CBC翻转字符攻击和常见考点(反序列化、Sql注入,重置密码、越权等逻辑漏洞等等),简单通俗点来说就是一个线下的CTF解题赛
2、防守:
一般在平台可以下载或直接通过SSH连接主机Down下来, 少部分会让你黑盒渗透,然后下载源码进行加固。防守的过程其实也简单,这个过程倒是和普通的CTF的 防守一样,找到漏洞点进行删除就好,所以具体不多说,参考普通CTF加固来进行准备,如IDE啊,go环境啊,npm的环境等等,主要是需要能让服务在本地跑起来,才好去进行验证是否加固成功。
3、攻击:
上面也说了,在防守阶段已经提供了源码,我们就可以按照白盒渗透的方式进行审计,找到漏洞点进行攻击,同样准备的东西也是GO环境、NPM环境、PHP环境等能本地调试的工具和一颗聪明的大脑
4、队员
T0:PWN手+全栈+Web手(三个全栈肯定是最牛逼,但是全栈大佬可遇不可求啊T-T)
T1:PWN手*2+Web手
T2:PWN手+Web手*2
T3:Web手*3(这里不说3PWN手,因为基本会pwn的都会web点,但web手基本不打pwn)
T99999*n:摸鱼大佬*3
人永远是左右比赛的关键因素,现在大部分比赛都围绕着PWN来举办,所以pwn手肯定是最优选,就如我前面说的,会pwn的基本都会点web,就算是3个pwn也能在比赛中拿到比较好的成绩,原因是web的加固实在实在实在是太简单了,实在攻不下来能防住也是很重要的。
0x2 比赛阶段
这里重点说比赛中遇到的坑,因为其实能看到这文章的肯定是基本到准备到线下比赛的,技术肯定都有的,只不过会碰到很多奇奇怪怪的坑。但这里只说防守,攻击没有什么坑,该是啥漏洞就是啥漏洞,毕竟代码就在那里变不了。
防守流程:
一定一定一定要熟悉linux每个命令,最重要的是中间件的重启命令,题目一般会给题目的根目录,比如给出题目根目录是:/app/ 你下载下来的源代码目录+根目录就是你操作的目录
比如这个:我要操作web文件夹的东西,就是/app/web/*
大家也可以看到,这个是整个docker下载下来的,里面有服务启动的语句
我们就可以根据这个语句来启动服务,但是,npm和go都是需要重启服务器的,我们知道了拉起命令,怎么暂停服务呢?最常见的方法,用ps去找进程然后kill掉,比如我要重启JavaScript的环境,肯定是先杀进程
ps -ef|grep npm|grep -v grep |awk '{print $2}'|xargs kill -9
ps -ef|grep node|grep -v grep |awk '{print $2}'|xargs kill -9
或者根据目录去杀
ps -ef|grep app|grep -v grep |awk '{print $2}'|xargs kill -9
然后去替换或者删除漏洞文件
mv -f index.js /app/index.js mv -f routes/app/index.js
最后拉起
npm run dev
或者使用官方的restart脚本
bash /restart.sh
这里有个小tips,要根据服务启动的用户去启动,例如weblogic不能root启动,不能盲目使用sudo命令,以及就是权限问题,最好直接给777权限
sudo chmod -R 777 /app/*
最后就是打包,一般服务器是接受tar包,并且会给相关说明,如何打包及如何接受
### update.tar.gz目录结构 ``` # tree update/ update/ ├── some_files └── update.sh ``` ### update目录打包为update.tar.gz命令 ``` tar zcvf update.tar.gz update ``` ### 注意事项 + web目录或pwn目录请多留意题目描述、题目附件。 + 修改的原则尽可能只在漏洞相关的文件上,请勿更改其他文件。 + 执行脚本的文件名必须是update.sh + update.sh的执行权限,平台解包后自动对其`chmod +x` + 请注意update.sh是Linux文件格式。DOS转化为Linux文件格式,可以使用dos2unix命令。 + 请勿添加无关命令,所有上传包都会备份。 + 请注意耗时。
上传后即可进行校验
最最最最重要的事情!!!一定要快!!!否则少了前几轮check的分数基本就追不上了
防守技巧:
一般D盾啥的都扫不出来,普通的代码审计工具不如人工定位,直接放例子
在不看代码的情况下来评判威胁度,那肯定admin文件夹是威胁系数最高的呀!直接干掉!干掉后再看check情况,如果干掉还不行可以在看看其他代码,依次先排除最危险的
第二个例子:
一个go语言的代码,先看威胁点,那肯定是执行命令啊,
"os" "os/exec"
通过这个去找命令执行点,关键词:
bash exec
curl
ping
直接批量替换,同样的更新完文件再上传check,check不过再检查
第三个例子:
一个JavaScript的代码,直接删入口点,稳妥简单
注意!这些技巧仅在为了前两轮可以更好得分!如果有限制上传次数的这个方法只能用一次!后期还是需要本地调试的!
0x03 总结
1、速度!速度!速度!重要的事情说三边,速度一定是第一位,但是注意不要破坏服务导致宕机扣分,就算破坏了也不要在准备check的时间破坏,给恢复留时间
2、心态第一,不急不躁,队长要安抚好队员的情绪,毕竟比赛只是学习的一个过程
3、能打进线下的基本都是有实力的,可能会有某些代打进的社会队,一部分划水,一部分大佬,一部分平常人,目前看文章的老板们是那种呢~
4、比赛有时候是攻击和防守分开,每个3个小时,也可能一天然后攻守兼备的情况,如果是攻守兼备优先防御后攻击,防御简单于攻击,毕竟攻击payload也不是一时半会能写出来的,能拿到前几轮的分才是王道。
5、pwn大佬悄咪咪的说:可以上通防(至于怎么找,,嘿嘿)
6、只有前几轮拿分了才有绝对的话语权!(能在前三轮拿分做了三题都可以后期直接睡觉了!)
最后就是希望大家能在比赛中得到更好的成绩啦~(一天都比赛那种大佬们就别卷了行吗!!我就想中午的时候好好吃个饭!!你们那些饭盒摆旁边就开始敲代码的!!不饿吗!!!)
最后的最后!再次感谢船山院士的Yeuoly、小浪及其他的各位,公众号:衡阳信安
以及我的团队:
Day1安全团队以微信公众号为平台持续输出渗透测试、代码审计、Windows逆向等内容,致力于回馈安全社区,提高网络安全普及程度
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)