起因
"最近好忙呀...又准备办一场学校的CTF比赛..."
在Github上发现了一个开源的CTF平台,界面很好看,而且是php写的,所以决定搭建一下折腾折腾。
项目地址:https://github.com/safflower/canhackme
项目官网:https://canhack.me
搭建记录
环境要求
Ubuntu 16.04
Apache 2.4
PHP 7.3
安装Apache2.4
sudo apt update
sudo apt install apache2
root@linuz:/# apache2 -v
Server version: Apache/2.4.18 (Ubuntu)
Server built: 2019-08-26T13:43:29
安装PHP7.3
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install -y php7.3
root@linuz:/# php -v
PHP 7.3.9-1+ubuntu16.04.1+deb.sury.org+1 (cli) (built: Sep 2 2019 12:54:04) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.9, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.3.9-1+ubuntu16.04.1+deb.sury.org+1, Copyright (c) 1999-2018, by Zend Technologies
安装完记得测试一下。
安装Sqlite3
sudo apt install sqlite3
安装php-sqlite3模块
sudo apt install php7.3-sqlite3
修改php.ini文件
/etc/php/7.3/apache2/php.ini
945行,把前面的分号去掉
extension=sqlite3
安装php-mbstring模块
sudo apt install php-mbstring
修改php.ini文件
/etc/php/7.3/apache2/php.ini
923行,把前面的分号去掉
extension=mbstring
克隆canhackme项目
git clone https://github.com/area39/canhackme.git
部署的时候注意权限问题,还有把.git文件夹删除,还有必须得把.htaccess这个文件放到网站根目录
修改apache2配置文件
vim /etc/apache2/apache2.conf
修改(164~168行),把路径改成你实际的网站根目录
AllowOverride None改为AllowOverride ALL
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride ALL
Require all granted
</Directory>
开启mod_rewrite模块
sudo a2enmod rewrite
然后重启一下apache
service apache2 restart
导入数据库
进入到@import/confs/目录下,导入init.sql文件
sqlite3 .common.db < init.sql
root@linuz:/var/www/html/@import/confs# sqlite3 .common.db
SQLite version 3.11.0 2016-02-15 17:29:24
Enter ".help" for usage hints.
sqlite> .dump
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE `users` (
`user_no` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
`user_name` TEXT NOT NULL UNIQUE,
`user_email` TEXT NOT NULL UNIQUE,
`user_password` TEXT NOT NULL,
`user_comment` TEXT NOT NULL,
`user_score` INTEGER NOT NULL,
`user_signed_up_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);
......
sqlite> .exit
然后更改confs目录权限为www-data
sudo chown -R www-data:www-data confs/
此时你的CanHackMe虽然能访问了,但其实还有一堆问题
后续完善
写入.hash_salt.txt文件
加盐加盐加盐,内容自己写就好!!!
注意是在@import/confs/目录下创建.hash_salt.txt文件
recaptcha
因为作者是国外的嘛,所以加了个Google的recaptcha验证功能,然后,你懂的...这是个大坑
先注册一个recaptcha(第3版)
地址:https://www.google.com/recaptcha
把域名或者IP填好,然后你会拿到两个key
网站的配置文件为common.php
路径:@import/confs/common.php
在这个配置文件里,你可以修改一些网站的基本信息,包括网站URL,作者信息等
把拿到的key替换一下
第一条密钥替换common.php文件里的recaptcha_sitekey内容
第二条密钥编辑成.recaptcha_secretkey.txt文件,放到@import/confs路径下
在国内访问解决方法:
修改网站php文件,把https://www.google.com改成
https://www.recaptcha.net
需要修改的几个文件
@import/init.php
@import/views/challenges/challenges.php
@import/views/users/settings.php
@import/views/users/sign-in.php
@import/views/users/sign-up.php
有动手能力强的老哥如果能把recaptcha这个验证功能去除的话一定要记得联系我,哈哈哈哈。
关于flag
flag默认的格式为CanHackMe{...}且长度不小于10位数,具体可以在init.php这个文件中修改。
大概在493行,把CanHackMe修改成你想要的格式。
创建题目
这个平台没有后台,所以必须直接访问sqlite数据库然后添加通知和题目。
添加一个题目:
sqlite> INSERT INTO "chals" VALUES(1,'name','title','contents',100,'CanHackMe{xxxxxxxxxxxx}','web','1','2019-09-12');
创建公告
添加一个通知:
sqlite> INSERT INTO "notis" VALUES(1,'公告内容',1,'2019-09-12');
总结
搭建过程中遇到几个奇奇怪怪的问题,和作者反馈后,作者小改动了几次,所以安装的时候还是clone我保存的以前的代码吧。
https://github.com/Area39/canhackme
如果想汉化,那就自己改一下源代码吧。
最后附一张安装成功的图。