CTFd平台二次开(jiao)发(shi)

8 篇文章 0 订阅
2 篇文章 0 订阅

本次二次开发目的:CTFd平台是安全初学者的联系平台以及竞赛平台,源码在github上公开,使用FLASK+SQLITE进行开发。由于web题目种类繁多,而CTFd没有根据web题目知识点分类的功能,本次目的就是为了在展示题目时,将web题目以知识点的方式分类,供初学者学习。

CTFd版本

CTFd的版本有很多,这次我用来开发的版本是github源码isislab的源码
安装教程自行百度。

二次开发初步步骤:

  • (已完成)在前端的上传题目处增加一个判断category的功能,当输入为web等字符串时,出现输入知识点的提示框。
  • (已完成)在数据库中加一个chType的字段来存放web题目知识点的数据。
  • 在管理员后台管理题目的页面上增加知识点的显示和修改功能。
  • 在用户界面对知识点进行展示。
再次出现需求
  • 直接在添加题目里面有一个添加tags的功能,但是很少被用到,可以用这个来对知识点进行分类。并显示到页面上。避免了数据库字段的添加以及前端的输入字段的修改。
  • 在此基础上增加了新的需求,将题目以新生练习及高手练习的方式来展示,每个角色的练习都需要根据知识点分类。
  • 思考:tags的形式来判定是否为新生题及题目类型。一道题可以创建多个tag。前端展示使用导航栏的方式.

下面将通过初步设定的步骤对CTFd平台进行二次开发

第一步

在前端的上传题目处增加一个判断category的功能,当输入为web等字符串时,出现输入知识点的提示框。

这一步很好完成,找到/plugins/challenges/assets/create.html页面将下面这段代码放在Category的div标签下面。

<div class="form-group" id="cType" style="display:none">
<label>Category<br>
<small class="form-text text-muted">
The category of your challenge
</small>
</label>
<input type="text" id="category" class="form-control" name="category" placeholder="Enter challenge category">
</div>

第二步

由于博主之前没怎么接触过sqlite(菜是原罪- -)。在查询了一些相关资料研究了源码,找到了初始化数据库的地方models/init.py,加了一条chType = db.Column(db.String(80)),这样操作之后,删掉之前初始化的数据库,重新启动./prepare.sh,可以看到ctfd.db中的challenge表多了一个chType的字段。

第三步

在完成第二步之后,想了想有没有更简便的方法。不想通过增加字段的方式来完成这项功能,在Admin后台管理的地方找到了TAGS标签,好像平时也不怎么用。就拿这个数据库表进行模改。
在源代码以及抓包的过程中发现,每次展示题目时,都会返回所有题目,api为:
api/v1/challenges
在这里插入图片描述
找到challenge.js中有一个函数,如下所示:
在这里插入图片描述

源代码真的是一点注释都没有,还有就是用了很多循环,导致浏览器运行特别慢。(小声吐槽)
于是是在愚蠢的我在代码上加了些注释。 - -

我在这基础上通过challenge返回的数据进行了稍微的修改。实现了新手高手的功能展示。
主要实现方式是:通过前文提到的apiapi/v1/challenges返回的数据对tags标签中标记了新手高手标签的进行分类,成为两个数组。在之后展示题目的循环功能,循环分类后的数组进行展示。
代码我就不贴了,太愚蠢了
下面的展示功能之在原来基础上将循环的数组改掉了,随机的id名修改掉了,没有做其他的修改。

继续模改,第四步

继续使用tags这个方便的表,来区分知识点。

因为之后还要对前端布局进行修改。权衡再三,我打算重写一个js。 - - 这改的我想哭,对不起,小声BB…

之后的第四步和第三步是差不多的。最后需求就完成了。但这次对代码进行搅屎并没有什么成就感,也没学到什么新东西。鄙人改完代码哭晕在厕所T.T

最后

二次开发太恶心了,分享一下我的心德,各位大佬亲喷,真的真的要做注释…

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AtalantaDavis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值