ネットワークコマンドと結果
まずping について
Reply from
pingの応答ごおこなわれており!
ネットワークか正常に動作している状態
Destination net unReachable
宛先IPアドレスまでの経路が存在しない
Unknown host
宛先IPアドレス情報が存在しない
Request tkmdd out
ICMPのメッセージ送信できたけど
返答がかえってこない
次に ifconfig
inet addr
現在設定されているIPアドレス
MASK
現在指定されているネットマスク
そして、route
Destination
併記されているGateway に処理を送るネットワークアドレス
Genmask
Destinationのネットマスクで
DestinationとNetmaskを組み合わせて
Gatewayへ処理を送るネットワークを指定
Gateway
DestinationとNetmaskで指定されたネットワークへの処理は
このアドレスの機器により
外部ネットワークに転送される
Flags
この行に
指定されたルールの動作状況を示していて
Uが指定されていないと動作していない
Iface
この行に指定されたルールは
この名前で認識されているネットワーク機器で処理される
ネットワークの基礎知識
ネットワークの基礎知識
IPアドレス
32bitの数値
10進数表示するときには、一般的に8bitごとに区切るとめ
最大値は255にねる
ネットマスク
32bitのビット列
IPアドレスと比較してネットマスクご
1となっている範囲をネットワーク部
0となっている範囲をアドレス部として使う
ローカルネットワーク
利用者が勝手に作成できるネットワーク
自由にできるアドレスとして
10.0.0.0/8
192.168.0.0/16
172.16.0.0/20
などがある
ワイドエリアネットワーク
ローカルネットワークの外のネットワーク
ブロードバンド回線などの公衆回線はこちらになる
FHSで定められたディレクトリと、内容のメモ
FHSで定められたディレクトリと、内容のメモ
/bin
主要コマンド
/boot
起動関連ファイル
/dev
デバイスファイル
/etc
システム設定ファイル
/lib
共有ライブラリー
/mnt
ファイルシステムの一時マウントポイント
/opt
オプションソフトのインストール用ディレクトリ
/proc
kernel process状態の情報を示す仮想ファイルシステム
/sbin
主要なシステム管理コマンド
/srv
システムによって提供されたサイト固有データ
/tmp
一時ファイル置き場
/usr
ユーザー共有ファイル
/usr/bin
基本的ではないコマンド
/usr/include
インクルードファイル
/usr/lib
共有ライブラリー
/usr/local
ユーザーが追加するアプリの置き場
/usr/sbin
基本的ではないシステム管理コマンド
/usr/share
アーキテクチャに依存しない共有データ
/var
ログなど
/var/cache
アプリのキャッシュデータ
/var/lib
アプリ、あるいはシステムの状態情報
/var/lock
ロックファイル
/var/log
ログファイル
/var/opt
/optの可変データ
/var/run
プロセスIDのファイルなど
実行時のシステム情報
/var/spool
アプリのスプールデータ
/var/tmp
一時ファイル置き場
OSをCUIで起動するには
OSをCUIで起動するには
LinuxをCUI環境、つまり仮想コンソールで起動するには
ランレベルを変更する
このメリットは
Linuxをアップグレードしたことにより
ビデオドライバーに不具合が生じ
GUIが起動しなくなったとき
お手上げにならなくてすむこと
以下Ubuntuのランレベル
0シャットダウン
1
rootのみのシングルユーザーモード
2~5
GUIのマルチユーザーモード
6
再起動
また、CentOSでは異なり
2
ネットワークなしのマルチユーザーモード
3
テキストログインのマルチユーザーモード
5
GUIのマルチユーザーモード
というように、少し細かくなる
LinuxのGUIから仮想コンソールへの切り替え
LinuxのGUIから仮想コンソールへの切り替え
Linuxの
GUI環境利用時にフリーズしたときの対策
Ctrl + Alt +F2
で仮想コンソールに切り替わる
切り替わると、黒い背景で
login:
となるので
ユーザー名
パスワード
を入力してログイン
そして、
top
freeなどのコマンドで、
リソース消費が激しいプロセスを把握
場合によっては
kill
で終了させる
仮想コンソールの場合
端末と同じで、バックグラウンドで稼働していない場合
次のコマンドが実行できない
そんなときには
Ctrl+Alt+F3
とすれば、新しく仮想コンソールが使えるようになる
Tab+Altでアプリの切り替えができるように
仮想コンソールも
Alt+F2で仮想コンソールのtty2
Alt+F3で仮想コンソールのtty3
というように切り替えできる
仮想コンソールから、GUI環境へ戻すには
Ubuntuなら Alt+F7
CentOSなら Alt+F1
で戻る
投票結果をDB格納
投票結果をDB格納
#09 投票結果を格納しよう (1)
http://dotinstall.com/lessons/poll_php_v2/9709
を元に
投票された結果をデータベースに格納していく
編集するのは index.php
まず、エラーがなかったときの処理から
if(empty($err)){
でエラーがないことを確認
そして、DB接続
$dbh = connectDb();
connectDb();
は、config.php で作成したユーザ関数
接続できたら、SQL発行
$sql = “insert into answers (answer, remote_addr, user_agent, answer_date, created, modified) values (:answer, :remote_addr, :user_agent, :answer_date, now(), now())”;
そして、SQLの実行
prepare() を使うのは、プレースホルダーの関係と
セキュリティのため
そして、 プレースホルダーの設定
$params = array(
“:answer”=>$_POST[‘answer’],
“:remote_addr”=>$_SERVER[‘REMOTE_ADDR’],
“:user_agent”=>$_SERVER[‘HTTP_USER_AGENT’];
“:answer_date”=>date(“Y-m-d”)
);
とする
:answer
は回答の番号
:remote_addr
はREMOTE_ADDRで取得したIPアドレス
REMOTE_ADDR は
http://phpjp.com/REMOTE_ADDR.htm
に例が乗っている
:user_agent”
はブラウザの種類
:answer_date
が回答した時間
投稿内容のエラーチェック
#08 エラーチェックをしてみよう
http://dotinstall.com/lessons/poll_php_v2/9708
を参考に
投票された内容をチェックしてエラーが発生した場合の処理を実装
まず、トークンが入っていて
セッションの中のものと同じかチェックする
if(empty($_SESSION[‘token’] || $_POST[‘token’] != $_SESSION[‘token’]){
で判定できる
empty($_SESSION[‘token’]
は token が空という意味
$_POST[‘token’] != $_SESSION[‘token’])
は、token とおくられてきた token が違うなら
という意味
||はもしくは、というOR判定
これで、どちらかの条件にあてはまるものを検出できる
もし、該当するなら
echo “不正な操作です”;
exit;
で終了する
続いて、エラーチェック
回答は1~4なので
if(!in_array($_POST[‘answer’],array(1.2.3.4)){
で判定する
in_array() は
配列に指定した値があるか検索する
http://php.quus.net/array/in_array.php
を参考
今回なら
answer の値が1~4の間に入っているか調べている
!がついているので、条件式としては
入っていないなら、という意味になっている
この場合、エラーを出すように
$err =”写真を選択してください”;
とする
このままではエラーがでないので、HTML部分にソースを追記
body タグの下あたりに
<?php if(!empty($err)): ?>
<p style=”color:red”><?php echo h($err); ?></p>
<?php endif; ?>
と追記する
if(!empty($err)):
は$err に値が入っている場合、
つまりエラーがある場合という意味
で
この場合
<?php echo h($err); ?>
でエラーを表示している
CSRF対策の実施
CSRF対策の実施
#07 CSRF対策を施そう
http://dotinstall.com/lessons/poll_php_v2/9707
を参考に
セキュリティを高めるためにCSRF対策を施す
sha1はハッシュで、暗号化とは異なり求み戻せない
暗号化の場合は、鍵があれば元に戻せる
今回、編集するファイルは index.php
まず、投稿されたかどうか判定する
if($_SERVER[‘REQUEST_METHOD’] != ‘POST’)
!= ‘POST’はPOSTではない
つまり投稿されていない状態という意味
else のほうに、投稿されたときの処理を書く
投稿前の処理で、CSRF対策をしておく
CSRF対策は、トークンをフォームにセットして
投稿された後に、このフォームから投稿されたものか
値をチェックすることで判定する
これは、偽者のフォームなど、悪意あるフォームからの投稿を防ぐため
まず、セッションをみて
トークンがセットされていないなら、トークンをセットする
if(!isset($_SESSION[‘token’])){
とすれば判定できる
isset() は指定した値が入っているかチェックする
http://php.net/manual/ja/function.isset.php
を参考
トークンの中身は推測されにくいランダムな文字列を使う
このときに sha1() を使う
暗号化した文字列を取得するのに使う
http://phpjp.com/sha1.htm
を参考に
この中で mt_rand() という乱数を発生させる関数
これについては
乱数を生成する(rand, mt_rand)
http://www.phpbook.jp/func/math/index1.html
を参考
そして
uniqid()
これは
マイクロ秒単位の現在時刻にもとづいた、接頭辞つきの一意な ID を取得
一意というのは、他と被らないただ1つという意味
uniqid() で true が設定されていると
23文字になる
これについては
http://phpspot.net/php/man/php/function.uniqid.html
を参考
これらを元に
$_SESSION[‘token’] = sha1(uniqid(mt_rand(),true));
これでハッシュ化されたランダムな文字列を作り
token に設定している
また、セッションを使うため
require_one() の下あたりに
session_start();
を追記する
ここからセッション開始になる
また、HTMLのフォーム部分に
セッショントークンを埋め込むため
<input type=”hidden” name=”token” value=”<?php echo h($_SESSION[‘token’]); ?>”>
というように
type=”hidden” にして画面には表示されないようにして
おく
実行後、ブラウザでソースをみると、値がセットされているのがわかる
Unicornscan の設定
BT5R3 ネットワークツール
パケットキャプチャツールは
情報収集だけでなく
検査のとき送受信したデータのエビデンス収集を
目的に使われる
今回も、 VirtualBox でBT5R3を使い
対象サーバーには metasploitable2 を使用
今回は Unicornscan の実践
Unicornscan は nmap のような
ポートスキャナー
検査結果を PostgreSQL に格納できる
コマンド以外に Web UI でも使えるけど
最初にコマンドによる設定が必要
ln -s /opt/metasploit /opt/framework3
chmod 755 /pentest/scanners/unicornscan
これで、シンボリックリンク作成と
権限の変更
次に、セットアップスクリプトの修正
vim /pentest/scanners/unicornscan/setup-unicornscan.sh
:set number
で番号表示すると編集しやすい
修正箇所は
29,30行目
psqlcmd=”psql.bin -h 127.0.0.1 -p 7175″
createdbcmd=”createdb.bin -h 127.0.0.1 -p 7175″
から.bin を削除して
psqlcmd=”psql -h 127.0.0.1 -p 7175″
createdbcmd=”createdb -h 127.0.0.1 -p 7175″
次に、セットアップ後に Web UI で使用するポート番号を変えたいので
7175 から 7337 へ変更
変更箇所は
29
30
570
571
行目
psqlcmd=”psql -h 127.0.0.1 -p 7175″
を
psqlcmd=”psql -h 127.0.0.1 -p 7337″
というように
-p はポートを示しているので、この番号を変更
探すときに
/7175
で探すと見つけやすい
次に 143 行目の
udo -u postgres $psqlbin/psql -c “alter user $uni_user_esc with password ‘$ uni_pw_esc'”
の
$uni_user_esc
を
$uni_user
$uni_pw_esc を $uni_pw
と変更して
sudo -u postgres $psqlbin/psql -c “alter user $uni_user with password ‘$uni_pw'”
とする
147~149行目の
sudo -u $uni_user_esc
を
sudo -u postgres
に変更する
148,149行目の
$psqlbin/$psqlcmd の後ろに
-u $uni_user_esc
を追記
これで
sudo -u postgres $psqlbin/$psqlcmd -u $uni_user_esc -d $uni_db_esc < $SCRIPT _PATH/unicornscan/src/output_modules/database/sql/pgsql_schema.sql
sudo -u postgres $psqlbin/$psqlcmd -u $uni_user_esc -d $uni_db_esc < $SCRIPT _PATH/unicornscan/www-front-end/lib/session.sql
となるので、保存して終了
投票結果を jQuery で取得
#06 投票結果を取得してみよう
http://dotinstall.com/lessons/poll_php_v2/9706
を参考に
クリックされた画像のIDを取得するための処理をjQueryで実装
編集するのは index.php
の form タグの下あたりに
script タグで作成する
$(function(){
$(‘.candidate’).click(function(){
$(‘#answer’).val($(this).data(‘id’));
});
});
という処理になる
jQuery関連を勉強するとわかるけど
.candidate は
class=”candidate”
#answer は
id=”answer”
という意味
this はそのもの、というような意味
とりあえず、実働実験するので
input type=”hidden” だと見えないので
input type=”text” として値が取得できているか確認する
このままだと、写真をクリックしたときに
どれを選択したかわからないから
新しいクラスをつける
まず、CSSを設定する
head タグの中に
<style>
.selected {
border:4px solid red;
}
</style>
これで、選択した画像の回りに赤い線がでるようになる
この動作を jQuery で制御する
まず、すべての selected を外す
$(‘.candidate’).removeClass(‘selected’);
そして、選択したものに selected を追加する
$(this).addClass(‘selected’);
これで、再度読み込んでみると
選択した写真の回りに赤い線がでるようになり
わかりやすくなる
ここまでできたら、
<input type=”text” id=”answer” name=”answer” value=””>
から
<input type=”hidden” id=”answer” name=”answer” value=””>
へ戻す