8割解けるCTF「WEST-SEC」

セキュリティ初心者の方でも楽しめるゲーム形式のセキュリティイベント

Linuxの基本操作

1.WEST-SECで利用するLinux環境

WEST-SECで利用するLinux環境は、主にAmazonLinuxです。CentOSベースなので、CentOSのコマンドがほぼ使えます。
たまに、利用するツールなどの関係でUbuntuを使うこともあります。

2.Linuxコマンド

WEST-SECでは、Linuxサーバの操作が必要な場合があります。基本コマンドをある程度理解し、それ以外は「検索すればいいじゃん」という考えでいいと思います。

(1)基本コマンド

ファイルを表示するls、パスを移動するcd、ファイルをコピーするcp、ファイルを削除するrm、ファイルの中身を表示する(catやless)、検索するgrepなどがあります。
以下のサイトがわかりやすいです。
qiita.com
qiita.com

・事前作業(主催者)
以下のフォルダを作り、読み書き実行権限(Read:4 + Write:2 + Execute:1 =7)を付与しています。

mkdir /var/www/html/user
chmod 757 /var/www/html/user   #otherのユーザにw権限を与えるという意味で、chmod o+w /var/www/html/user でもいい。 

・皆さんの作業

cd /var/www/html/user/
mkdir userX          <--自分のユーザ番号
cd userX
(2)viエディタ

WEST-SECでは、設定を書き換える問題は、それほど多くありません。
ですが、古くからある標準のテキストエディタであるvi、または、改良版(iMproved)のvimを使えるようにしましょう。
以下のサイトに、基本的な操作がまとまっています。
eng-entrance.com
最低限の操作であれば、以下だけ覚えておきましょう。
・i で編集モードにする
・ESCで編集モードを抜ける --> Shift を押しながらzzで保存
             --> 間違えて保存したくないなら :q! 
では、以下でエディタを開き、好きな文字を入れてみましょう。HTMLの構文にする必要はありません。

cd /var/www/html/user/user1
vi index.html

http://IPアドレス/user/user1/index.html に接続すると、上記で入力した文字が表示されることでしょう。

(3)ログ解析のコマンド

ログは表示項目が大量にあり、そのまま解析するのは大変です。Excelで解析もいいのですが、Linux上でも整形できます。
いくつかの方法がありますが、awk(オーク)を使ってみましょう。awkに関しては、以下がまとまっています。
とほほのAWK入門 - とほほのWWW入門
※事前にchmod o+r+x /var/log/httpd として、一般ユーザがログを閲覧できるようにしています。
①表示したい行を限定

cat /var/log/httpd/access_log | awk '{print $1}'

※複数表示する場合は、'{print $1,$2}' という感じで。
※awk -F "," とすることで、区切り文字をカンマ(,)に指定できます。
(2)数を数える
uniqで重複を排除、sortで並び替え、-cオプションで件数を数える

cat /var/log/httpd/access_log | awk '{print $1}' | sort | uniq -c

さらに、この結果を件数が多い順に並び替えるには、以下。※2回sortしないとカウントされないものがあります。

cat /var/log/httpd/access_log | awk '{print $1}' |  sort | uniq -c | sort -n -r

3.PHP

・PHP(Personal Home Page Tools)は、Webページで簡単にプログラムを書くことができる言語です。
・インストール

yum install -y php php-devel php-mysql php-gd php-mbstring

・バージョンの確認をしてみよう。

php -v

・初歩の初歩として、簡単なページを動かしてみましょう。以下が参考になります。
https://www.pasonatech.co.jp/workstyle/column/detail.html?p=2097#chapter-10
・たとえば、こんなソースコードです。/var/www/html/の配下にtest.phpなどの名前で作成し、インターネットからアクセスしてみましょう。うまく表示されましたか?

<?php
echo 'run PHP';
?>

4.C言語

(1)概要など

・かつて、プログラム言語を学ぶときの基本として多くの方が学習した言語です。最近は、javaやpythonを含め、他の言語が使われることが増えています。
・以下のサイトに基礎の基礎があります。
https://c-lang.sevendays-study.com/day1.html

(2)簡単なプログラムを作ってみよう

画面上に「hello」を出力するプログラムである hello.exe を作ります。
①hello.cというファイルを作ります。

#include<stdio.h>
int main(){
 printf("こんにちは\n");
}

②コンパイルして、hello.exeというファイルを出力

gcc -o hello.exe hello.c

③実行権限の付与

chmod +x hello.exe

④ファイルの実行

./hello.exe

⑤pingを打つプログラムを作ってみよう

#include<stdio.h>
int main () {
    system ( "ping 8.8.8.8" );
}

5.Python言語

(1)概要など

オブジェクト指向型の言語で、スクリプト言語です。CやJavaなどに比べてシンプルな構文になっていて、なおかつ軽量、高速で、非常に人気のプログラムです。
❶環境構築
・WindowsPCやLinux環境でも動作しますが、GoogleColab環境が手軽でグラフィカルな表示もできてお勧めです。
https://colab.research.google.com/?hl=ja
・Googleアカウントが無い場合、paiza.ioが便利です。
https://paiza.io/ja/projects/new?language=python3

❷Linuxの場合

# python3 --version
Python 3.7.15
# python3

これにより、Pythonを実行できます。

(2)とりあえず、動かしてみよう

以下、いくつか初歩的な操作の記載があります。
https://qiita.com/AI_Academy/items/b97b2178b4d10abe0adb

>>> 1+1
2
>>> a=1
>>> b=2
>>> a+b
3
(3)ループ処理をしてみよう

❶1~10までの和を求めよう
注意点は、インデントに意味があるという点です。困ったら、ツールの自動インデント機能を使いましょう。具体的には前の行でEnterを押します。

total=0
for n in range(1,11): #nは1-10の値を取ります。
  total = total + n
print(total) #-->55

または、こんな風にも書けます。

print(sum(range(1,11)))

❷1~nまでの和が1830になるnを求めよう
以下をいれてみよう。このままでは動かないので、少し工夫してください。

  if total == 1830:
      break

正解は以下になります。マウスでドラッグしてください。※仕様上、インデントが消えてしまっていますので、ご注意を。
for n in range(100):
total = total + n
if total == 1830:
break
print(n)