zoomzoomzoom

解決方法の共有に主眼を置くブログ・他雑談

アルゴリズムとデータ構造 forプロコン

プログラミングコンテスト攻略のためのアルゴリズムとデータ構造という本を購入

 

勉強の動機:

C++の能力・データ構造知識・基礎アルゴリズムを身につけたい。

 

本の概要:

1オンラインジャッジ活用方法

アルゴリズムとは

3初等的整列(初等的ソート)

4データ構造概説

5探索

再帰・分割統治

7高等的整列

8木

9二分探索木

10ヒープ

11動的計画法

12グラフ

13重み付きグラフ

14高度なデータ構造

15高度なグラフアルゴリズム

16計算幾何学

17動的計画法

18整数論

19ヒューリスティック探索

 

勉強方法:

アルゴリズムでどのような操作が実現できるか覚える(デメリットも併せて)

必須の数学の知識はその都度勉強する

コーディングしまくる

とりあえず11まで進める。

CTF本 概要まとめ 勉強方針

本の内容

1  バイナリ解析

2  PWN

3  ネットワーク

4  Web問題

5  SQLインジェクション

 

各項目の概要 と 勉強事項:

バイナリ解析 (Binary Reversing ReverseEngineering)
・コマンドとツールを覚える

コマンド:file,readelf,strings,grep,unzip,tar,gunzip,xz,strace,ltrace

ツール:デバッガ、プロセスメモリエディタ、逆アセンブラ、逆コンパイラバイナリ解析基盤、バイナリエディタ、仮想化ソフトウェア

・環境構築(32/64bit linuxwindows環境)

・表層解析  file strings grep

・動的解析  strace,ltrace デバッガ

・静的解析  アセンブラ,逆アセンブラ

 

1の勉強事項:

ツールの名前と役割を覚える。

3つの解析を再現できるようにする。

 

 

2  PWN

脆弱性看破ツール

・セキュリティ機構理解

(・文字列脆弱性

・exploit基礎(StackBaseOverFlow,FormatPrintAttack)

・exploit基礎+(ASLRの回避方法)

 

2の勉強事項:

ツールの名前と役割を覚える。

セキュリティ機構覚える。

exploitを再現できるようになる。

 

3  ネットワーク

・パケットの種類

・ファイルの分割方法

wiresharkの使い方

Python(のライブラリScapy)を使ったパケット解析

・3種類のパケット送受信方法

 

3の勉強事項:

ファイルの分割方法覚える

wiresharkの使い方を再現できるようにする。

pythonやり直す

パケット解析再現

 

 

4  Web問題

・問題に対する姿勢

・主な突破口

・突破した後何するか

 

4の勉強事項

保留(何もしない

 

 

5  SQLインジェクション

SQL基礎4構文

・インジェクション可否判定方法5種

・動作環境の判定

SQLインジェクション初歩

 

5の勉強事項

SQL基礎

インジェクション初歩の再現できるようにする。

 

 

上記を念頭にまず本を5周読む。

読んだ後に実践して再現できるようにする。

 

CTF 勉強方法 方針 目標

CTFを楽しみたい。理由:セキュリティに詳しくなりたいから。

 

ということで、CTFで戦うための技術を身に着けるためにどうやって勉強していくかを考えるための記事。

 

期間:1年

目標:CTFの全分野でwriteupを見て何をやっているかを理解し、再現することができる。

 

目標達成のための方法(ざっくり):

①本で勉強する

②師匠を作る

③サイトで勉強する

 

①について

・セキュリティコンテストチャレンジブック(以降:CTF本)

・ハッキング(以降:Hな本)

この2冊の内容を頭に叩き込んで実践。

 

②について

オンラインで探す。できればチームに入れてもらう。(社会人かつ初心者だけど入れてもらえるところないかな)

@nikoniko_entreTwitterをやっているので、もし入れていただける方いればお声掛けいただけないかなー(他力本願寺

 

③について

hority-ctf.blogspot.jp

 

こういったサイトの記事を参考にして、勉強していく。

 

 

目標達成のための方法(具体的・直近):

①CTF本の内容を頭に入れる。

→何のためにどうやって何をやるのか、を頭に入れるために本を10回読む

→→具体的に手を動かして再現できるようにする。

 

②コーディングの力を付ける。

プログラミングコンテスト攻略のためのアルゴリズムとデータ構造、という本で、

「こういうことがしたいな」と思った時にそれをコードで書き表せる力を培う。

C/C++/Python/Java/アセンブラ の基礎的な力を付ける。

 

③師匠を探す

上記①と②を並行しながら。2月中旬までに見つけたいなあ。

 

 

 

端末操作 ubuntu ショートカット

便利ショートカット見つけたから書く。

なお

Cはcontrolキー

SはShiftキー

AはAltキー

+ は同時押し

と読み替えてください。

 

C+A+t 新しい端末起動

C+S+t (端末内で)新しいタブ起動

A+1だのA+2だの タブの切り替え

C+d 現在のタブ削除

 

その他:

C+A長押し→(離してから)→左右矢印キー  タスクを自由に選べるよモード

シェルスクリプト高速開発手法入門 CMS

上田隆一さんというシェル芸の達人の本で修行をしている。

 

タイトルの本を購入させていただいた。

修行の最中、躓いたところと解決方法を共有する。

なお、躓いた事象のみ記述してあることもあるのであしからず。

 

コマンド自作:

pwd が ~/bashcmsディレクトリの状況で

pushコマンド(ソース下記)を自作した後、~/bashcms/binに保存。

実行しようとして、ローカル環境で./bin/push を実行。

 

pushコマンド:

1#!/bin/bash
2
3 pagedir=$(dirname $0)/../pages
4 remote=160.16.88.188
5
6 rsync -av --delete --exclude ',*' "$pagedir/" "$remote:/var/www/bashcms/pages/"

 

...するとエラーメッセージとして下記が表示される。

bash: ./bin/push: /bin/bash: 誤ったインタプリタです: 許可がありません

 

解決策模索中。

bashがうまく動いてくれてないのかとも思ったが、cd とかディレクトリ移動ちゃんとできているし、

一度もchshとかしていない。

 

 

解決した。

/bin/bashが怪しかったので、ディレクトリ権限を見てみると、閲覧すらできないようになっていた。

 chmod 777で権限変更してやると、ディレクトリの中身が見れるようになった。

そして件の./bin/pushも実行できた。

 

どうやら、binディレクトリを誤ってもう一個作ってしまって消してという作業があったためか、デフォルトのbinディレクトリの権限が変更されていて、自作したpushコマンドの一行目のシバンがうまく機能できなくなっていたようだ。 と自分の中では納得した。

 

追記(つまり新たな問題の発生)

template.6.htmlというのを作るところまで進めた。

URLをブラウザに打ち込んで自分が作成したサイトを眺めるのはいいものだ。

しかし、文字化けしているぞ。

 

<body>

<header>

ここが全部文字化け

</header>

</body>

 

特定のタグで囲まれた箇所だけが文字化けってありえるのか。。。調査中。

apache2 設定 ファイル どこ

LAMPを使ってserver運用をしたいと思い、いろいろ調べた。

そのつまづきメモ。

すごく参考にさせていただいたサイト。

http://koonz.blog.fc2.com/blog-entry-511.html

 

Server version: Apache/2.4.18 (Ubuntu)

 

ドキュメントルートの設定 2つやんなきゃダメぽい:

~etc/apache2/apache2.conf

ここのDirectoryってところを変更

 

~/etc/apache2/sites-available/000-default.conf

ここのDocumentRootというところを変更

 

編集を終えたら

sudo service apache2 restart

をするといいらしい。

 

=========================

デフォルトのドキュメントルートについて引っかかった話。

こんなこと引っかかるの私だけかもしれませんが、

ドキュメントルート(WEBサーバーの最上位ディレクトリ)は、var/www/"ここ!" に初期設定されています。

 

何が言いたいかというと、更新がないサイトでは、下記の様なことが書かれていて、ちょっと躓くのです。。。

”よし!apache2のインストール終わったね!なんでもいいからブラウザ立ち上げてURL欄にlocalhostってうってみようか!うん、it worksって出たよね。じゃあ、こんどは設定が見れるかどうか、phptest.phpっていうファイル作って、phpinfo();が動くかどうか確認してみよっか!ファイルの置き場所は、/var/wwwだよ!動いたよね!やったね!”

 

.....ドキュメントルート上にないのでforbiddenになります。

私はなりました。

======================

 

もうひとつ引っかかったことがあります。

それは、上記のディレクトリ設定の際、

home/ユーザー名/wwwが推奨されていたので、

"オッケー。homeディレクトリの下に新たにディレクトリ適当な名前で作ってその下に更にwww作ればいいんでしょ?らくっしょー!じゃあ今回作るのはtestapache2manっていうディレクトリ名にしよっと!つまりhome/testapache2man/wwwねー。はいできた!"

とやったのですが、それではforbiddenになりました。

 

forbiddenとなった原因は、私の現在の知識ではわからないのですが、その後、2つのファイルのディレクトリ設定のところを

home/現在このlinuxで使用している、"存在している"ユーザー名/www  に変更したところうまくいったので、おそらく、単にフォルダを作るだけではダメで、ユーザーを作ってあげなきゃいけないんじゃないかなと。

シェル芸 sed 使い方

シェル芸の練習をしています。

 

https://blog.ueda.asia/というところで、問題集的なカテゴリがありましたので、

そこで勉強させていただいております。

 

問題集→https://blog.ueda.asia/?page_id=684

 

で、第五回の4問目の解答で

 

curl http://www.yahoo.co.jp|sed 's@</[^/][^/]*>@&\n@g'

 

という部分があるんですが、

 

</[^/][^/]*> の表現の部分、それぞれの文字がどういう意味を持っているのかイマイチわかりません。わかる方いたら教えていただけると嬉しいです。

 

文字 : 自分の理解 

< : "<"という文字

/ (ひとつ目): ??????

[ (ひとつ目):

^ (ひとつ目): 次にくる文字を含む、という意味

/ (ふたつ目): ??????

] (ひとつ目):

[ (ふたつ目):

^(ひとつ目) : 次に来る文字を含む、という意味

/ (みっつ目):   ???????

] (ふたつ目): 

* :

> : ">"という文字

 

 

よろしくお願いします。

 

追記(20161214 19:39)

理解した。

勘違いしていたところ: ^ の使い方。

^は2通りの機能がある。

1.先頭から始まる

2.( [] の中で使って)〜を含まない

今回は2.の方の機能を使う。

 

文字 : 機能の理解 

< : "<"という文字

/ (ひとつ目): "/" という文字

ここまでで、 </ という文字列を表現する

 

[ (ひとつ目):   "[" という文字

^ (ひとつ目): 次にくる文字を含む、という意味

/ (ふたつ目): "/" という文字

] (ひとつ目): "]"という文字

ここまでで、 /を含まない何かの文字 という意味。

 

[(ふたつ目): "[" という文字

^(ひとつ目) : 次に来る文字を含む、という意味

/ (みっつ目):   "/" という文字

] (ふたつ目):  "]"という文字

ここまでで、 /を含まない何かの文字 という意味。

 

* : 繰り返し文字

> : ">"という文字

 

要約すると、

</ "/"以外なら何でもいい1 "/"以外なら何でもいい2の繰り返し >

ということを表したかった!!