アルゴリズムとデータ構造 forプロコン
プログラミングコンテスト攻略のためのアルゴリズムとデータ構造という本を購入
勉強の動機:
C++の能力・データ構造知識・基礎アルゴリズムを身につけたい。
本の概要:
1オンラインジャッジ活用方法
2アルゴリズムとは
3初等的整列(初等的ソート)
4データ構造概説
5探索
6再帰・分割統治
7高等的整列
8木
9二分探索木
10ヒープ
11動的計画法
12グラフ
13重み付きグラフ
14高度なデータ構造
15高度なグラフアルゴリズム
16計算幾何学
17動的計画法
18整数論
19ヒューリスティック探索
勉強方法:
各アルゴリズムでどのような操作が実現できるか覚える(デメリットも併せて)
必須の数学の知識はその都度勉強する
コーディングしまくる
とりあえず11まで進める。
CTF本 概要まとめ 勉強方針
本の内容
1 バイナリ解析
2 PWN
3 ネットワーク
4 Web問題
各項目の概要 と 勉強事項:
1バイナリ解析 (Binary Reversing ReverseEngineering)
・コマンドとツールを覚える
コマンド:file,readelf,strings,grep,unzip,tar,gunzip,xz,strace,ltrace
ツール:デバッガ、プロセスメモリエディタ、逆アセンブラ、逆コンパイラ、バイナリ解析基盤、バイナリエディタ、仮想化ソフトウェア
・環境構築(32/64bit linux とwindows環境)
・表層解析 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の勉強事項
保留(何もしない
・SQL基礎4構文
・インジェクション可否判定方法5種
・動作環境の判定
・SQLインジェクション初歩
5の勉強事項
SQL基礎
インジェクション初歩の再現できるようにする。
上記を念頭にまず本を5周読む。
読んだ後に実践して再現できるようにする。
CTF 勉強方法 方針 目標
CTFを楽しみたい。理由:セキュリティに詳しくなりたいから。
ということで、CTFで戦うための技術を身に着けるためにどうやって勉強していくかを考えるための記事。
期間:1年
目標:CTFの全分野でwriteupを見て何をやっているかを理解し、再現することができる。
目標達成のための方法(ざっくり):
①本で勉強する
②師匠を作る
③サイトで勉強する
①について
・セキュリティコンテストチャレンジブック(以降:CTF本)
・ハッキング(以降:Hな本)
この2冊の内容を頭に叩き込んで実践。
②について
オンラインで探す。できればチームに入れてもらう。(社会人かつ初心者だけど入れてもらえるところないかな)
@nikoniko_entreでTwitterをやっているので、もし入れていただける方いればお声掛けいただけないかなー(他力本願寺
③について
こういったサイトの記事を参考にして、勉強していく。
目標達成のための方法(具体的・直近):
①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の繰り返し >
ということを表したかった!!