使用 CTFd 架設 CTF 平台 (Apache + mod_wsgi + MySQL)

這陣子因為課程需要建立一個 CTF 平台, 最後決議使用 CTFd 來架設這次的CTF計分板, 安裝的過程中踩了不少的地雷, 又因為懶得裝 Nginx 改採 Apache + mod_wsgi 結果冒出了更多問題, 真的是人不作死就不會死.

本篇文章假定各位已經裝好 Apache 與 MySQL.

關於 CTFd

CTFd 是 isislab 推出的 open source jeopardy style CTF platform, 使用上非常容易上手, 運行要求十分輕量且容易客製化.
DEMO: CTFd.io

環境資訊

Python 2.7
Apache 2.4
Debian 8

1. 環境準備

sudo apt-get update
sudo apt-get install build-essential libffi-dev git libapache2-mod-wsgi python-pip python-dev
a2enmod mod_wsgi

2. 取的最新版 CTFd

git clone https://github.com/isislab/CTFd.git
cd CTFd

3. 安裝相依

pip install -r requirements.txt
pip install -U sqlalchemy

4. 設定啟動腳本

在 CTFd 下建立 apache.py, 讓 Apache 使用這個 py 來啟動服務

import sys
sys.path.insert(0, '/CTFd') # /CTFd 要改成你的 CTFd 主目錄的路徑, 範例是放在 /CTFd

from CTFd import create_app
application = create_app()

5. 設定 Apache

DocumentRoot /CTFd # CTFd 所在目錄
WSGIDaemonProcess CTFd user=www-data group=www-data threads=5 # user/group 決定 Apache 用哪個帳號運行這支程式
WSGIScriptAlias / /CTFd/apache.py # 前面步驟設定的啟動腳本
 <Directory /CTFd>
    WSGIProcessGroup CTFd
    WSGIApplicationGroup %{GLOBAL}
    Order allow,deny
    Allow from all
    Require all granted  # Apache 2.4 預設禁止目錄在 /var/www 外, 這行可以解除這項限制
</Directory>

6. 設定資料庫連線(Mysql)

建立資料庫的時候編碼記得選擇 utf8mb4_bin (若選擇general將會導致計分板無法正確取得題目類型), 這樣就可以讓 CTFd 支援 Emoji 和中文

編輯 CTFd/CTFd/config.py

SQLALCHEMY_DATABASE_URI = "mysql://帳號:密碼@主機位置/資料庫名稱?charset=utf8mb4"

這邊無需導入資料表, 在網站第一次啟動的時候程式會自動建立必要資料表以及產生Admin

7. 重新啟動 Apache

systemctl restart apache2

備註

由於 CTFd 有檔案上傳與Log, 要記得將 CTFd 目錄的擁有者設定成 Apache 使用的帳號, 不然CTFd不會正常運作

如何擷取 Windows Loopback 封包

在開發各種網路系統時, 不管是 安全分析, 流量分析, 協定分析…等都逃不了封包分析的命運, 在開發階段, 我們時常會建立 local server 進行測試, 前陣子因為特殊原因必須要分析封包時才赫然發現 Wireshark 在 Windows 上竟然無法擷取 loopback 介面的封包(127.0.0.1 之類的, 只要是本機持有的 IP 都不行), 根據 Wireshark 官方說法是不支援, 只好開始尋找其他方法.

在經過各種嘗試, 最終只剩下 NPacp, NetCap, RawCap 這三個工具可以達成我的目的, 網路上也有人提過 KB-839013 但實測後發現沒有任何效果.

最後我選擇了 RawCap, 因為他輕巧免安裝, 又可以產生 pcap 讓我繼續用 Wireshark 分析

RawCap

官方網站: Netresec
下載位置: RawCap

使用方法

程式一執行就會列出可以用的網路介面卡, 在這邊我的 LoopBack 卡是 7號


在選擇完介面後, 程式會詢問檔案名稱, 這邊我維持預設 dumpfile.pcap

開始擷取封包後, 只要按下 Ctrl+C 便可以停止錄製並退出程式

在 RawCap 的所在目錄就會出現 dumpfile.pcap, 這便是我們要的擷取結果, 使用 Wireshark 開啟就可以看到之前無法擷取的 loopback 封包

如何在 XAMPP 3 安裝 XDebug

XDebug 是 PHP 一個很好用的除錯工具, 同時也是Unit Test 的好幫手, 做好 UnitTest Coverage 就靠它了!

今天在處理 XAMPP 測試環境時發現 XAMPP 3 的 XDebug 設定不見了, 於是花點時間把它找了出來, 在這邊記錄一下如何在 XAMPP 啟動 XDebug 的方法

環境

XAMPP v3.2.2
Windows 10

Step 1. 停止 Apache

我們可以藉由 XAMPP Control Panel 先將 Apache 停止

Step 2. 修改 PHP.ini

從 XAMPP Control Panel 中快速開啟 php.ini

並將下列內容貼到 php.ini 的底部並存檔
請記得將 S:\xampp 更換為 XAMPP 實際安裝位置

[XDebug]
zend_extension = "S:\xampp\php\ext\php_xdebug.dll"
xdebug.profiler_append = 0
xdebug.profiler_enable = 1
xdebug.profiler_enable_trigger = 0
xdebug.profiler_output_dir = "S:\xampp\tmp"
xdebug.profiler_output_name = "cachegrind.out.%t-%s"
xdebug.remote_enable = 0
xdebug.remote_handler = "dbgp"
xdebug.remote_host = "127.0.0.1"
xdebug.trace_output_dir = "S:\xampp\tmp"

Step 3. 啟動 Apache

Step 4. 確認 XDebug 正常載入

如果 XDebug 有正常載入, 我們便可以在 phpinfo 中看到相關資訊

小記

在 XAMPP 3 之前, XDebug 的設定都已經幫我們寫好在 php.ini 裡, 只是被註解掉了, 但 XAMPP 3 之後就消失, 讓我還特地去挖設定檔

如何在 AWS EC2 建立 Windows Server 2016 主機

最近系統測試環境需要使用 Windows Server 2016, 但手邊沒有多餘的測試主機, 想到平常工作都是使用 Linux, 所以 Amazon Web Service(AWS)上的主機也都是以 Linux 系統為主, 那就在 AWS EC2 上開一台 Windows 2016 玩玩看好了, 實際使用後才發現流程上有點差異, 決定做個筆記紀錄一下

Step 1. 建立 Windows EC2

創建 Windows EC2 的方法就跟建立 Linux EC2 的方法大致相同, 只要選擇 Windows 的 AMI 即可(這邊選擇 Windows Server 2016)

後續步驟跟平常建立 EC2相同, 這邊就不再贅述

Step 2. 選擇憑證

在 EC2 建立精靈的最後一步會要求選擇憑證, 請務必選擇憑證, 這憑證是用來解開密碼用的, 很多人在這個步驟想說 Windows 不支援 PEM 登入就不選擇, 導致最後無法解開登入資訊

Setp 3. 取得登入密碼

在主機建立完成後, 可以在主機上按下右鍵選擇 Get Windows Password

若主機上尚未準備完成會顯示如下訊息, 過幾分鐘後重試就可以了(主機建立後四分鐘通常就可以正常取得密碼)

當系統準備完成時, 系統會要求我們上傳自己的 PEM(建立EC2時選的那張憑證)

上傳PEM後選擇 Decrypt Password

畫面上就會顯示登入資訊

Setp 3. 取得連線資訊

在主機上按下右鍵選擇 Connect

點選 Download Remote Desktop File, 下載 RDP 資訊檔

接著只要打開下載的 RDP 檔就可以建立遠端連線了!