NOTE: 该项目会持续更新完善,如有疑问可在issue里提出来
本次创新实践能力赛决赛阶段的应用场景开发需求分为二进制网络服务、Web 应用服务两类场景,赛队需要根据场景开发的功能特性需求,选择其中的一个场 景,开发出符合所要求功能特性的安全应用,并预设创新性的网络安全挑战(挑战 其他赛队的网络安全实践能力),构建出在决赛阶段赛时环节中使用的靶标环境。
- 基于消息队列实现RPC服务,例如启动后台程序完成耗时长的功能等,将 Web、App的后端任务执行部分分离,将服务器压力分散,类似的有
rabbitmq
等。 2. 实现能通过Checker程序检查的服务程序(比赛时二进制程序提供给参赛队), 确保基本功能完整(服务程序python实现示例service_example.py
); - 必须包含预设的安全漏洞(创新性安全挑战即为对预设安全漏洞的某种检测和 利用技巧),不限制漏洞类型;
- 采用C/C++语言实现,提供源码和编译环境,编译运行在x64或ARM或MIPS架构上;
- 服务端又统一为
1337
,请不要使用其他端口。
附件:Checker程序(包含服务程序Python示例),出题格式要求模板见CISCN-2018-pwn-for-players
- 实现电子商场Web应用,其中必须包含有限时抢购活动,比赛时Web访问URL 提供给参赛队。
- 所实现的基本功能要求包括:用户注册、用户登录、找回密码/修改密码;推荐 其他用户注册并获得积分奖励;电子商场显示若干商品,用户可选购商品进入购物 车,使用积分结账购物;每小时限时抢购秒杀活动
- 用户注册、登录和找回密码功能需要实现人机识别验证码的特性,其中人机识 别验证码必须采用附件中的验证码数据集;
- 采用PHP/Python/Java等语言实现,提供源码和部署环境,运行在Apache或Nginx 或Weblogic等Web服务器;后段必须有数据库,如mysql、sqlite、mongodb等。
- 必须包含预设的Web应用安全漏洞(创新性安全挑战即为对预设安全漏洞的某 种检测和利用技巧),不限制Web应用安全漏洞类型;
- 业务逻辑上设计防止“薅羊毛”的特性,植入创新性网络安全挑战,比如必须要 进行某些绕过防止“薅羊毛”特性的攻击操作后,才能到达漏洞利用条件(如某些高 等级用户才具备的功能特性,其中才包含网络安全挑战预设安全漏洞);
- 服务端又统一为
80
,请不要使用其他端口。
附件:验证码数据集,Checker程序,出题格式要求模板等见CISCN-2018-web-for-players
验证码测试与训练数据集下载地址:链接:https://share.weiyun.com/5QlpOIi 密码: h6uvtf
- 赛题环境提供Dockerfile + docker-compose容器环境,平台方使用
docker-compose up -d
启动选手提供的环境 (docker环境内初始对于二进制网络服务只包含源码, 不要预编译二进制, 编译命令和运行命令写入Dockerfile,由Docker自动编译和运行); - Flag可即时更新,不接受固定flag的赛题。请在文档内提供更新flag的命令,例如
echo xxx > /home/ctf/flag
或sed -i "s/xx/xx/g" xxx.file
等; - 在Flag位置使用初始Flag为
CISCN{this_is_a_sample_flag}
; - 提交靶标环境格式请参照
challenge_template
文件夹下的出题格式要求。 - 提交3个Hint并标注次序,此3个Hint会在BreakIt环节中按照1/4时间如无队伍解 出放第一个Hint,1/2时间如无队伍解出放第二个Hint,3/4时间如无队伍解出放第 三个Hint,如有队伍解出不再放后续Hint的约定放出
- 提交EXP脚本的源代码行数小于300行(采用标准的编码规范,不特意进行代码 混淆变形缩略行等操作),其中不包含和靶标环境预先共享的key、弱又令列表等 信息。
漏洞利用脚本作用:
- 体现漏洞的设计思路,验证漏洞存在,并且可利用;
- 赛事平台在Fix it阶段,用于自动化检测某题是否被patch成功。
漏洞利用脚本要求:
-
漏洞利用脚本须全自动、无人工交互。
- Pwn题,尽量避免使用固定地址,如有需要请使用
pwntools
项目的相关函数对二进制和libc.so
进行解析(选手尽量使用模板内的docker-compose环境ubuntu16.04+xinetd
)。 - Web题,只有题目漏洞涉及到验证码破解环节,主办方才在会部署阶段更新验证码图片集(请出题队伍在文档内说明是否需要验证码破解环节),否则使用
checker.py
及template
默认验证码图片即可。
- Pwn题,尽量避免使用固定地址,如有需要请使用
-
脚本开发语言必须为 python,且实现
exp(host, port)
函数,具体如下:# host 被攻击机器的ip # port 题目端口 def exp(host, port): attack = to_do_something() # 真实的exp攻击 To do.. if attack: return True # exp攻击成功, 说明patch失败 else: return False # exp攻击失败, 说明patch成功
- 脚本需要用到的第三方库, 需提前说明(常用的pwntools,zio已安装)
- 脚本中不要使用全局变量
- 脚本中必须要关闭socket连接, 最后close所有连接
- 平台不提供ssh登录密码或私钥给脚本(exp&checker)
- 尽可能使用ubuntu 16.04作为基础镜像
- 加固阶段的登录用户为ciscn, 请选手docker中自行创建
- root密码, ciscn密码由平台统一修改
- 严格控制题目相关文件的权限设置, 保证正常解题, 正常加固流程能够顺利进行
- 提供修改flag命令. 如 echo {FLAG} > /home/ctf/flag.txt
- Pwn题环境disable通防机制
- 未知bug修复